Home » Archimedes archive » Archimedes World » AW-1994-04-Disc2.adf » Disk2Apr94 » !AWApr94/Goodies/PowerBase/!Powerbase/!RunImage

!AWApr94/Goodies/PowerBase/!Powerbase/!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-1994-04-Disc2.adf » Disk2Apr94
Filename: !AWApr94/Goodies/PowerBase/!Powerbase/!RunImage
Read OK:
File size: 39628 bytes
Load address: 0000
Exec address: 0000
File contents
    1REM ><PBase$Dir>.!RunImage
    2REM
    3REM !RunImage for !Powerbase database
    4REM LEN D.L. & S.R. Haslam
    5:
    6REM Heap Manager (module + BASIC)
    7REM LEN S.R. Haslam
    8:
    9REM Interface Manager (v.2)
   10REM LEN Simon Huntingdon
   11:
   12version$="4.995 (09-Feb-1994)"
   13intversion$="Interface Manager (v.2.00)"
   14:
   15SYS "OS_Byte",202,0,255 TO ,kbdstatus%
   16fatal_err%=255:moan_err%=254
   17present%=FALSE
   18ON ERROR:ON ERROR OFF:ERROR ERR,"L0 error: "+REPORT$+" during initialisation at line "+STR$(ERL)
   19PROCsetup
   20IF buff%>endbuff% THEN ERROR 0,"No room for defs."
   21IF menu_ptr%>men_end% THEN ERROR 0,"No room for menus"
   22ON ERROR PROCwimp_error(TRUE,ERR,ERL,REPORT$)
   23SYS "OS_GetEnv" TO ComString$
   24IF INSTR(ComString$,"-database") THEN
   25  File$=MID$(ComString$,INSTR(ComString$,"-database")+10)
   26  SYS "OS_GSTrans",File$,STRING$(255,CHR$13),255 TO ,File$,L%
   27  File$=LEFT$(File$,L%)
   28  PROCget_it_in(File$)
   29ENDIF
   30ON ERROR PROCwimp_error(TRUE,ERR,ERL,REPORT$)
   31REPEAT
   32  PROCpoll
   33UNTIL quit%
   34PROCclose_down
   35END
   36:
   37DEF PROCpoll
   38SYS "OS_Byte",229,1:SYS "OS_Byte",124
   39SYS "Wimp_Poll",mask%,block% TO reason%
   40SYS "Interface_Poll",reason%,,mytask%
   41CASE reason% OF
   42  WHEN 0:IF autosave%>0 AND Access%=TRUE THEN PROCcheck_save(saveint%*6000)
   43  IF Imp_wait% AND NOT merging% THEN PROCready_to_merge
   44  IF flash%>0 THEN PROCflash(mainW%,field%(flash%))
   45  WHEN 1:PROCredraw(!block%)
   46  WHEN 2:SYS "Wimp_OpenWindow",,block%
   47  WHEN 3:PROCperform_close(!block%)
   48  WHEN 4:PROChourglass(TRUE)
   49  WHEN 5:PROChourglass(FALSE)
   50  WHEN 6:PROCmouse(block%!0,block%!4,block%!8,block%!12,block%!16)
   51  WHEN 7:PROCend_drag(Start%,End%)
   52  WHEN 8:PROCprocess_key
   53  WHEN 9:PROCmenu_select
   54  WHEN 12:PROCset_keyboard(!block%,block%!4)
   55  WHEN 17,18:
   56  SYS "Impulse_Decode",reason%,block%,,,,methodtable%,mytask% TO reason%,,,,,token%,params%,object%
   57  IF reason%>=&200 THEN
   58    CASE reason% OF
   59      WHEN &200,&201:IF token%<>-1 THEN PROCImpulse_command(token%,params%,object%)
   60      WHEN &202:PROCImpulse_reply(token%,params%)
   61      WHEN &203:PROCImpulse_send(token%,object%)
   62      WHEN &204:PROCImpulse_receive(token%,params%,object%)
   63    ENDCASE
   64    ELSE PROCmessage
   65  ENDIF
   66  WHEN 19:PROCnot_acknowledged
   67ENDCASE
   68ENDPROC
   69:
   70DEF PROChourglass(on%)
   71IF (indexing% OR printing%) AND !block%=keypadW% THEN
   72  IF on% THEN SYS "Hourglass_On" ELSE SYS "Hourglass_Off"
   73ENDIF
   74ENDPROC
   75:
   76DEF PROCflash(wi%,ic%)
   77LOCAL time%
   78SYS "OS_ReadMonotonicTime" TO time%
   79IF (time% MOD 50)=0 THEN PROCinvert(wi%,ic%)
   80ENDPROC
   81:
   82REM Shutdown routines ---------------------------------------------------
   83:
   84DEF PROCclose_down
   85LOCAL F%
   86LOCAL ERROR
   87ON ERROR LOCAL:$block%="TASK":SYS "Wimp_CloseDown",mytask%,!block%:SYS "Interface_CloseDown",mytask%,!block%:ON ERROR OFF:MODE 12:ERROR ERR,"L0 error: "+REPORT$+" during closedown at line "+STR$(ERL):END
   88SYS "Hourglass_Smash"
   89PROCexit(0)
   90SYS "Interface_CloseDown",mytask%
   91SYS "Impulse_CloseDown",mytask%
   92$block%="TASK"
   93SYS "Wimp_CloseDown",mytask%,!block%
   94SYS "OS_Byte",202,kbdstatus%
   95END
   96ENDPROC
   97:
   98DEF PROCexit(exittype%)
   99LOCAL flag%
  100SYS "Hourglass_Smash"
  101IF present%=7 THEN PROCcheck_change
  102CASE exittype% OF
  103  WHEN 0:IF warn% AND ram% THEN flag%=FNconfirm(FNmsg(63)) ELSE flag%=TRUE
  104  WHEN 1:IF warn% THEN flag%=FNconfirm(FNmsg(62)) ELSE flag%=TRUE
  105ENDCASE
  106IF flag%=FALSE THEN ENDPROC  
  107IF exittype%=0 THEN
  108  IF design% THEN PROCsave_form($database%+".Form")
  109  IF link$(0)="LOADED" THEN
  110    lk=OPENOUT($database%+".Link")
  111    FOR F%=1 TO fields%
  112      PRINT#lk,link$(F%)
  113    NEXT F%
  114  ENDIF
  115  IF calc$(0)="LOADED" THEN
  116    cl=OPENOUT($database%+".Calc")
  117    FOR F%=1 TO fields%
  118      PRINT#cl,calc$(F%)
  119    NEXT F%
  120  ENDIF
  121  IF Access%=TRUE AND present%=7 THEN PROCmouse(0,0,4,keypadW%,19)
  122ENDIF
  123IF menu%(5)>0 THEN menu_ptr%=menu%(5):menu%(5)=0
  124REM ###  Menu 5 is the menu of validation tables ###
  125PROCclose_log
  126PROCclose_files
  127PROChide_windows
  128PROCdelete_icons(mainW%,0)
  129PROCdelete_icons(datadicW%,0)
  130PROCdelete_icons(pselectW%,1)
  131PROCdelete_icons(keypadW%,37)
  132PROCrecover_memory
  133PROCinit_vars
  134FOR I%=0 TO MaxTabs%
  135  printrel$(I%)=""
  136NEXT I%
  137field$()=""
  138$Password%=""
  139present%=FALSE
  140exit%=TRUE
  141PROClit(menu%(0),1,TRUE)
  142PROClit(menu%(0),2,FALSE)
  143PROClit(menu%(0),3,FALSE)
  144PROClit(menu%(0),4,FALSE)
  145PROClit(menu%(2),1,FALSE):ptr%=menu%(2)+52:ptr%!4=-1
  146PROClit(menu%(6),6,FALSE)
  147PROClit(menu%(6),7,FALSE)
  148PROClit(menu%(6),8,FALSE)
  149PROCset_auto(FALSE)
  150PROCset_autobalance(FALSE)
  151PROCtick(menu%(2),3,TRUE)
  152PROCtick(menu%(2),4,FALSE)
  153$dbase%="No data"
  154$database%="No data"
  155PROCredraw_icon(-2,pbaseicon%)
  156ENDPROC
  157:
  158DEF PROCdelete_icons(wi%,ic%)
  159!block%=wi%:block%!4=ic%
  160REPEAT
  161  SYS "Wimp_DeleteIcon",,block%
  162  ic%+=1:block%!4=ic%
  163  SYS "Wimp_GetIconState",,block%
  164UNTIL ((block%!24) AND (1<<23))>0
  165ENDPROC
  166:
  167DEF PROCclose_files
  168LOCAL key%
  169FOR key%=0 TO Keys%
  170  PROCdate(key%)
  171NEXT key%
  172PROCclose_file(lk):link$()=""
  173PROCclose_file(cl):calc$()=""
  174PROCclose_file(dbasehandle%)
  175PROCclose_file(csvhandle%)
  176PROCclose_file(texthandle%)
  177PROCclose_file(text%)
  178PROCclose_file(toobighandle%)
  179PROCclose_file(F)
  180PROCclose_file(FH%)
  181PROCclose_file(V)
  182ENDPROC
  183:
  184DEF PROCclose_file(RETURN filehandle%)
  185IF filehandle%>0 THEN
  186  CLOSE#filehandle%
  187  filehandle%=0
  188ENDIF
  189ENDPROC
  190:
  191DEF PROCrecover_memory
  192LOCAL I%
  193PROCscrap_sliding_block(headanchor%)
  194PROCscrap_sliding_block(undoanchor%)
  195PROCscrap_sliding_block(lineanchor%)
  196PROCscrap_sliding_block(textanchor%)
  197PROCscrap_sliding_block(formanchor%)
  198PROCscrap_sliding_block(selanchor%)
  199PROCscrap_sliding_block(tempanchor%)
  200PROCscrap_sliding_block(balanchor%)
  201PROCscrap_sliding_block(flaganchor%)
  202PROCscrap_sliding_block(transanchor%)
  203PROCscrap_sliding_block(sprsanchor%)
  204PROCscrap_sliding_block(recanchor%)
  205PROCscrap_sliding_block(saveanchor%)
  206PROCscrap_sliding_block(logoanchor%)
  207FOR I%=0 TO MaxTabs%
  208  PROCscrap_sliding_block(tabanchor%(I%))
  209NEXT I%
  210FOR I%=0 TO MaxKeys%+1
  211  PROCscrap_sliding_block(keyanchor%(I%))
  212NEXT I%
  213FOR I%=1 TO fields%
  214  IF chartype%(I%)=40 THEN PROCscrap_sliding_block(Rf%(I%))
  215NEXT I%
  216ENDPROC
  217:
  218REM Error handling ------------------------------------------------------
  219:
  220DEF PROCwimp_error(return%,err%,erl%,err$)
  221LOCAL type%,result%
  222LOCAL ERROR
  223ON ERROR LOCAL ON ERROR OFF:PROCclose_down:ERROR ERR,"L0 error: "+REPORT$+" during error handler at line "+STR$(ERL)
  224SYS "Wimp_CommandWindow",-1
  225block%!8=0:block%!12=wi%:block%!16=ic%
  226SYS "Interface_SlabButton",,block%
  227block%!0=err%
  228IF return% AND err%<>fatal_err% THEN
  229   IF err%=moan_err% THEN
  230      type%=&11:REM OK button and no "Error from" in title
  231   ELSE
  232      type%=3:REM OK and Cancel buttons
  233      err$+=" @ "+STR$(erl%)+" (OK to continue, Cancel to quit)"
  234   ENDIF
  235ELSE
  236   type%=2:REM Cancel buttom
  237   err$+=" @ "+STR$(erl%)+" (Powerbase must quit at once)"
  238ENDIF
  239$(block%+4)=err$+CHR$(0)
  240SYS "Wimp_ReportError",block%,type%,"Powerbase" TO ,result%
  241REM result=1 means OK selected, 2 means Cancel selected
  242IF result%=2 THEN
  243   PROCclose_down
  244   END
  245ENDIF
  246RESTORE ERROR
  247ENDPROC
  248:
  249DEF PROCsofterror(E$,E%)
  250$(block%+4)=FNmsg(E%)+E$
  251!block%=255
  252SYS "Wimp_ReportError",block%,&11,"Report from Powerbase"
  253ENDPROC
  254:
  255DEF FNmsg(E%)
  256errorblock%=errormsg%
  257WHILE E%>1
  258  errorblock%+=LEN($errorblock%)+1
  259  E%-=1
  260ENDWHILE
  261=MID$($errorblock%,4)
  262:
  263REM Program initialisation ----------------------------------------------
  264:
  265DEF PROCsetup
  266LOCAL F,A%,I%,J%,V%,valid$
  267F=OPENIN("<Pbase$Dir>.Resources.Config")
  268MaxFields%=VAL(GET$#F)
  269IF MaxFields%>127 THEN ERROR fatal_err%,FNmsg(61)
  270MaxKeys%=VAL(GET$#F)
  271MaxTabs%=VAL(GET$#F)-1
  272datesep$=LEFT$(GET$#F,1)
  273timesep$=LEFT$(GET$#F,1)
  274S$=GET$#F:P%=INSTR(S$," "):kill%=NOT (LEFT$(S$,P%-1)="YES")
  275S$=GET$#F:P%=INSTR(S$," "):commoncase%=(LEFT$(S$,P%-1)="YES")
  276S$=GET$#F:P%=INSTR(S$," "):common%=(LEFT$(S$,P%-1)="YES")
  277S$=GET$#F:P%=INSTR(S$," "):leftmenu%=(LEFT$(S$,P%-1)="YES")
  278S$=GET$#F:P%=INSTR(S$," "):IF LEFT$(S$,P%-1)="YES" THEN caps%=128 ELSE caps%=16
  279winback%=VAL(GET$#F)
  280PROCclose_file(F)
  281PROCdim_arrays(MaxFields%,MaxKeys%,MaxTabs%)
  282PROCinit_vars
  283REM ------------------ Initialise Wimp ----------------------------
  284$block%="TASK"
  285mask%=(1<<11)
  286SYS "Wimp_Initialise",200,!block%,"Powerbase" TO version%,mytask%
  287IF version%>=316 THEN RISCOS3=TRUE ELSE RISCOS3=FALSE
  288SYS "Impulse_Initialise",003,mytask%,"Powerbase",-1
  289SYS "Interface_Initialise",mytask%
  290pbaseicon%=FNcreate_icon(-1,0,-16,144,110,&1700312B,"",dbase%,psprite%,10)
  291REM --------- Set up Heap Manager. Load error messages -----------
  292PROCinitheaps(128,128)
  293SYS "OS_File",5,"<PBase$Dir>.Resources.Messages" TO ,,,,len%
  294errormsg%=FNcreate_fixed_block(len%)
  295SYS "OS_File",255,"<PBase$Dir>.Resources.Messages",errormsg%
  296FOR I%=0 TO len%
  297  IF errormsg%?I%=10 THEN errormsg%?I%=13
  298NEXT I%
  299SYS "OS_Byte",135 TO,,mode%
  300CASE mode% OF
  301  WHEN 12,15,16,17,35,36:f$="Sprites"
  302  OTHERWISE:f$="Sprites22"
  303ENDCASE
  304SYS "OS_File",5,"<PBase$Dir>.Resources."+f$ TO ,,,,len%
  305sprites%=FNcreate_fixed_block(len%+4)
  306!sprites%=len%+4
  307SYS "OS_File",255,"<PBase$Dir>.Resources."+f$,sprites%+4
  308undoanchor%=FNcreate_anchor("Undo")
  309headanchor%=FNcreate_anchor("Heading")
  310lineanchor%=FNcreate_anchor("TextLine")
  311textanchor%=FNcreate_anchor("Text")
  312formanchor%=FNcreate_anchor("Form")
  313sprsanchor%=FNcreate_anchor("DbaseSprites")
  314tempanchor%=FNcreate_anchor("Temp")
  315balanchor%=FNcreate_anchor("Balance")
  316flaganchor%=FNcreate_anchor("Flags")
  317transanchor%=FNcreate_anchor("DataTransfer")
  318selanchor%=FNcreate_anchor("PrintSel")
  319recanchor%=FNcreate_anchor("RecordNum")
  320saveanchor%=FNcreate_anchor("SaveBuffer")
  321logoanchor%=FNcreate_anchor("Logo")
  322FOR I%=0 TO MaxKeys%+1
  323   keyanchor%(I%)=FNcreate_anchor("Key #"+STR$(I%))
  324NEXT I%
  325FOR I%=0 TO MaxTabs%
  326   tabanchor%(I%)=FNcreate_anchor("VTable #"+STR$(I%))
  327NEXT I%
  328REM --------------- Read validation strings etc -----------------------
  329V=OPENIN("<Pbase$Dir>.Resources.ValStrings")
  330vstrings%=VAL(GET$#V)
  331DIM vname$(vstrings%),valid%(vstrings%),rvalid%(vstrings%),hvalid%(vstrings%)
  332FOR I%=0 TO vstrings%
  333  vname$(I%)=MID$(GET$#V,4)
  334  valid$=GET$#V
  335  DIM V% LEN(valid$)+1:$V%=valid$:valid%(I%)=V%
  336  DIM V% LEN(valid$)+1:$V%=valid$:rvalid%(I%)=V%
  337  DIM V% LEN(valid$)+16:$V%=valid$+";Pptr_hand,12,8":hvalid%(I%)=V%
  338NEXT I%
  339PROCclose_file(V)
  340REM ---------------------------------------------------------------
  341REM Method structure
  342FOR PASS=0 TO 2 STEP 2
  343P%=methodtable%
  344  [OPT PASS
  345        equd    0
  346        FNmethod(0,1,"GetPathname","")
  347        FNmethod(0,2,"Selection","")
  348        FNmethod(0,3,"ParseQuery","")
  349        FNmethod(0,4,"GetRecord","")
  350        FNmethod(0,5,"PutRecord","")
  351        FNmethod(0,6,"ExpandCode","")
  352        FNmethod(0,7,"GetField","")
  353        FNmethod(0,8,"GetExpanded","")
  354        FNmethod(-1,-1,"","")
  355  ]
  356NEXT PASS
  357PROCgetscreensize(ScreenWidth%,ScreenHeight%)
  358PROCcreate_windows
  359PROCmake_menus
  360PROCset_auto(FALSE)
  361PROCset_autobalance(FALSE)
  362PROCget_choices("<Pbase$Dir>.Resources.Choices")
  363ENDPROC
  364:
  365DEF FNmethod(Flags,Token,Method$,Syntax$)
  366[OPT PASS
  367        equd    Flags
  368        equd    Token
  369        equs    Method$+CHR$(0)
  370        equs    Syntax$+CHR$(0)
  371        align
  372]
  373=PASS
  374:
  375DEF PROCdim_arrays(F%,K%,T%)
  376DIM desc%(F%),Tag$(F%),field%(F%),F$(F%),Rf%(F%),len%(F%),maxlen%(F%),chartype%(F%),fix%(F%),link$(F%),calc$(F%),Tab%(F%),field$(F%),update$(F%)
  377DIM Date%(5),Index$(K%+1),KL%(K%+1),KF%(K%+1,1),KW%(K%+1,3),key$(K%+1),case%(K%+1),WD%(3),Ext%(10)
  378DIM Label$(10,2)
  379DIM Sum(30,3)
  380DIM key 256,date% 6,calcrow% F%
  381DIM menu%(22),choice$(4)
  382DIM table$(T%+1),tabfieldlen%(9),fcol%(6),ncol%(6)
  383DIM rel%(6)
  384DIM buttonfield%(22)
  385MC%=30:DIM L%(MC%)
  386REM -------------------- Allocate buffers ------------------------------
  387indirectionmem%=&7000:menumem%=&1400
  388DIM Mi% 20,Mo% 20
  389DIM block% &1000,savebuff% &100,choices% &100
  390DIM buff% indirectionmem%:endbuff%=buff%+indirectionmem%
  391DIM menblk% menumem%:men_end%=menblk%+menumem%:menu_ptr%=menblk%
  392DIM fieldmenu% 3200
  393DIM hand% 16:$hand%="Pptr_hand,12,8"
  394DIM paint% 8:$paint%="file_ff9"
  395DIM writep% 16:$writep%="Pptr_write,4,4"
  396DIM tick% 12:$tick%="Snull,yes"
  397DIM dbase% 10:$dbase%="No data"
  398DIM psprite% 15:$psprite%="S!Powerbase"
  399DIM menspr% 15,mentxt% 1:$menspr%="Smenu;Z0":$mentxt%=""
  400DIM winspr% 15,wintxt% 1:$winspr%="Swindow;Z0":$wintxt%=""
  401DIM methodtable% 256
  402REM ------------- Indirection addresses for Heap Manager ---------------
  403DIM keyanchor%(K%+1)
  404DIM tabanchor%(T%)
  405DIM printrel$(T%)
  406DIM box% 16,box2% 16,matrix% 16,origin% 8
  407ENDPROC
  408:
  409DEF PROCinit_vars
  410getrec%=213:ClientSearch$="TRUE"
  411Imp_wait%=FALSE:Impref%=-1:merging%=FALSE:mergenum%=0:mergewith$="":document$=""
  412mergetag%=214:transtag%=215:printtag%=216
  413flash%=FALSE:dup%=FALSE:filter%=FALSE:logosloaded%=FALSE
  414accessbutton%=0:stop%=TRUE:scripton%=FALSE:customise%=FALSE
  415displayed%=FALSE:scratchpad$="":k$=""
  416Search$="TRUE":Filter$="TRUE":REC%=-1:usekey%=-1:useval$=""
  417real$="":visible$="":reform$="":val$="":calcfield%=0:savefunc$="":savetofile%=FALSE:startlog%=FALSE
  418password$="":myref%=-1:Type%=0:fieldtype%=1
  419printing%=FALSE:indexing%=FALSE:validate%=TRUE:relations%=FALSE
  420delwarn%=TRUE:autosave%=FALSE:export%=FALSE:csvconv%=FALSE:saveint%=10
  421autobalance%=0:balint%=25:added%=0
  422present%=0:fields%=0:template%=0:adjust%=FALSE
  423Listed%=FALSE:writingcsv%=FALSE:calcerror%=FALSE
  424lk=0:cl=0:V=0:F=0:FH%=0:dbasehandle%=0:csvhandle%=0:texthandle%=0:text%=0:toobighandle%=0:loghandle%=0:handle%=0
  425$date%=STRING$(6,CHR$(0))
  426movetype%=8:movetype$="Move �"
  427quit%=FALSE:exit%=FALSE:matching%=FALSE:newrec%=FALSE:val%=FALSE:ram%=FALSE:Access%=FALSE:Modify%=FALSE:warn%=FALSE:design%=FALSE:newtree%=FALSE
  428LenLine%=0:Count%=0:Start%=0:End%=0:Fptr%=0
  429Fieldnumber%=0:calclink%=0:Keyfld0%=0:Keyfld1%=0
  430LastTable%=-1:Tablenumber%=-1:TabsLoaded$="Tables":table$()=""
  431Rows%=0:TabFields%=0:Rec%=0:Match_tag%=1:fast%=10
  432Keys%=0:keylimit%=1:keylen%=1:LH%=90:file%=0:key%=0:top=8*file%+LH%
  433keyfunc$="":fieldfunc$="":Keys%=0:RU%=0
  434printorder$="":Form$="":ImpCom$="":margin$=""
  435uon$=CHR$(27)+CHR$(%10001000)
  436Filename$="":extrakeys$="":extratabs$="":logpath$=""
  437months$="JanFebMarAprMayJunJulAugSepOctNovDec"
  438pitch$=CHR$(31)+"9001"
  439ENDPROC
  440:
  441REM Window handling -----------------------------------------------------
  442:
  443DEF PROCcreate_windows
  444SYS "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
  445infoW%=FNnew_window("info",sprites%)
  446$FNtext(infoW%,7)=version$
  447$FNtext(infoW%,8)=intversion$
  448keypadW%=FNnew_window("keypad",sprites%):Title%=block%!72
  449savesubW%=FNnew_window("savesub",sprites%):SubName%=FNtext(savesubW%,3):SubSprite%=FNval(savesubW%,1):SubTitle%=block%!72
  450saveW%=FNnew_window("save",1):SaveName%=FNtext(saveW%,0):SaveSprite%=FNval(saveW%,1)
  451datadicW%=FNnew_window("datadic",sprites%):TabTitle%=block%!72
  452accessW%=FNnew_window("access",sprites%):Password%=FNtext(accessW%,0):AccessTitle%=block%!72
  453passW%=FNnew_window("password",sprites%):Read%=FNtext(passW%,2):Write%=FNtext(passW%,3):Manager%=FNtext(passW%,5)
  454mainW%=FNnew_window("main",sprites%):RecInfo%=block%!72
  455keyW%=FNnew_window("changekey",sprites%):KeyTitle%=block%!72
  456F1dkey%=FNtext(keyW%,0):F2dkey%=FNtext(keyW%,1)
  457DIM Wkey%(3)
  458FOR word%=0 TO 3
  459  Wkey%(word%)=FNtext(keyW%,word%+2)
  460NEXT word%
  461KeyNo%=FNtext(keyW%,6)
  462changeW%=FNnew_window("change",sprites%):ChangeTitle%=block%!72
  463moveW%=FNnew_window("move",sprites%)
  464tableW%=FNnew_window("table",sprites%)
  465linkW%=FNnew_window("link",sprites%):LinkTitle%=block%!72:Tablename%=FNtext(linkW%,0):fieldnum%=FNtext(linkW%,2):expand%=FNtext(linkW%,10)
  466miscW%=FNnew_window("misc",sprites%):database%=FNtext(miscW%,1):$database%="No data"
  467FOR ic%=2 TO 7
  468  Date%(ic%-2)=FNtext(miscW%,ic%)
  469NEXT ic%
  470used%=FNtext(miscW%,17):filesize%=FNtext(miscW%,18):percent%=FNtext(miscW%,14)
  471printW%=FNnew_window("print",sprites%)
  472matchW%=FNnew_window("match",sprites%)
  473listW%=FNnew_window("list",sprites%)
  474createW%=FNnew_window("create",sprites%):FtitleText%=block%!72:$FtitleText%="Field 0"
  475DescText%=FNtext(createW%,4):TagText%=FNtext(createW%,5):LenText%=FNtext(createW%,6):ValText%=FNtext(createW%,28):InsText%=FNtext(createW%,26):Fixpt%=FNtext(createW%,13):$Fixpt%="2"
  476mintext%=FNtext(createW%,15):maxtext%=FNtext(createW%,25)
  477boxX%=FNtext(createW%,7):boxY%=FNtext(createW%,8):boxW%=FNtext(createW%,9):boxH%=FNtext(createW%,10)
  478relateW%=FNnew_window("relation",sprites%):RelTitle%=block%!72
  479reformW%=FNnew_window("reform",sprites%):RefmTitle%=block%!72
  480colW%=FNnew_window("cols",sprites%)
  481calcW%=FNnew_window("calc",sprites%):CalcForm%=FNtext(calcW%,0):CalcTitle%=block%!72
  482labelW%=FNnew_window("label",sprites%)
  483pselectW%=FNnew_window("pselect",sprites%)
  484mergeW%=FNnew_window("merge",sprites%):MergeTitle%=block%!72
  485sizeW%=FNnew_window("size",sprites%):Records%=FNtext(sizeW%,1):$Records%="100"
  486Increment%=FNtext(sizeW%,3):$Increment%="0"
  487csvW%=FNnew_window("csvfile",sprites%):CSVTitle%=block%!72
  488SYS "Wimp_CloseTemplate"
  489IF common% THEN PROCcommonbuffers
  490ENDPROC
  491:
  492DEF PROCcommonbuffers
  493PROCcommon(keypadW%,29,matchW%,0)
  494PROCcommon(moveW%,7,matchW%,0)
  495PROCcommon(changeW%,3,matchW%,0)
  496PROCcommon(savesubW%,0,matchW%,0)
  497PROCcommon(mergeW%,3,matchW%,0)
  498ENDPROC
  499:
  500DEF PROCcommon(wi%,ic%,wic%,icc%)
  501Formula%=FNtext(wic%,icc%)
  502!block%=wi%:block%!4=ic%:SYS "Wimp_GetIconState",,block%
  503SYS "Wimp_DeleteIcon",,block%
  504block%!28=Formula%:block%!4=wi%
  505SYS "Wimp_CreateIcon",,block%+4 TO handle%
  506ENDPROC
  507:
  508DEF PROCcommoncase(wi%,ic%)
  509LOCAL on%
  510IF NOT commoncase% THEN ENDPROC
  511on%=FNselected(wi%,ic%)
  512PROCset_icon(matchW%,16,on%)
  513PROCset_icon(keypadW%,32,on%)
  514PROCset_icon(moveW%,9,on%)
  515PROCset_icon(changeW%,5,on%)
  516PROCset_icon(savesubW%,5,on%)
  517PROCset_icon(mergeW%,12,on%)
  518ENDPROC
  519:
  520DEF FNnew_window(name$,sp%)
  521LOCAL handle%
  522SYS "Wimp_LoadTemplate",,block%,buff%,endbuff%,-1,name$,0 TO ,,buff%
  523IF name$="main" THEN block%?35=winback%
  524block%!64=sp%
  525SYS "Wimp_CreateWindow",,block% TO handle%
  526=handle%
  527:
  528DEF PROCshow_windows
  529PROCopen_window(mainW%)
  530IF (present% AND 7)=7 THEN
  531  IF FNselected(passW%,9) THEN
  532    !block%=keypadW%:SYS "Wimp_GetWindowState",,block%
  533    block%!12=block%!4+660:block%!8=block%!16-328
  534    block%!20=0:block%!24=0:block%!28=-1
  535    SYS "Wimp_OpenWindow",,block%
  536  ENDIF
  537  addr=FNmoveto(key%,top,1)
  538ENDIF
  539IF Listed% THEN PROCopen_window(listW%)
  540ENDPROC
  541:
  542DEF PROCopen_window(whandle%)
  543block%!0=whandle%
  544SYS "Wimp_GetWindowState",,block%
  545block%!28=-1
  546SYS "Wimp_OpenWindow",,block%
  547ENDPROC
  548:
  549DEF PROCset_height(handle%,height%)
  550!block%=handle%:SYS "Wimp_GetWindowState",,block%
  551block%!16=block%!8+height%
  552SYS "Wimp_OpenWindow",,block%
  553ENDPROC
  554:
  555DEF PROCperform_close(wi%)
  556CASE wi% OF
  557  WHEN mainW%:PROCclose_window(keypadW%)
  558  WHEN matchW%:matching%=FALSE
  559  WHEN calcW%:calclink%=0
  560  WHEN keyW%:
  561  design%=FALSE:newtree%=FALSE
  562  !block%=0:block%!4=-700
  563  block%!8=506:block%!12=0
  564  SYS "Wimp_SetExtent",keyW%,block%
  565  !block%=keyW%
  566  WHEN mergeW%:
  567  IF mergewith$<>"" THEN SYS "Impulse_SendMessage",&200,":"+mergewith$+"."+document$+" Edit On",,,,-1,mytask%
  568  merging%=FALSE
  569ENDCASE
  570PROCclose_window(wi%)
  571ENDPROC
  572:
  573DEF PROChide_windows
  574PROCperform_close(mainW%)
  575PROCperform_close(keypadW%)
  576PROCperform_close(datadicW%)
  577PROCperform_close(listW%)
  578PROCperform_close(matchW%)
  579PROCperform_close(relateW%)
  580PROCperform_close(keyW%)
  581PROCperform_close(reformW%)
  582PROCperform_close(calcW%)
  583PROCperform_close(mergeW%)
  584PROCperform_close(csvW%)
  585ENDPROC
  586:
  587DEF PROCclose_window(whandle%)
  588!block%=whandle%
  589SYS "Wimp_CloseWindow",,block%
  590ENDPROC
  591:
  592DEF PROCredraw(handle%)
  593LOCAL L%
  594L%=LEN(margin$)
  595!block%=handle%
  596SYS "Wimp_RedrawWindow",,block% TO more%
  597PROCget_origin(block%,x0%,y0%)
  598WHILE more%
  599  PROCdraw(x0%,y0%)
  600  IF handle%<>datadicW% THEN SYS "Interface_Render3dWindow",,block%
  601  SYS "Wimp_GetRectangle",,block% TO more%
  602ENDWHILE
  603ENDPROC
  604:
  605DEF PROCget_origin(block%,RETURN x0%,RETURN y0%)
  606x0%=block%!4-block%!20
  607y0%=block%!16-block%!24
  608ENDPROC
  609:
  610DEF PROCdraw(x0%,y0%)
  611LOCAL TextPtr%,y1%,y2%,I%,chars%
  612CASE handle% OF
  613  WHEN listW%
  614  y1%=-(block%!40-y0%)
  615  y2%=-(block%!32-y0%)
  616  y1%=y1% DIV 32+1
  617  y2%=y2% DIV 32+1
  618  TextPtr%=(!textanchor%)+(y1%-1)*LenLine%
  619  IF y2%>Count% THEN y2%=Count%
  620  FOR I%=y1% TO y2%
  621    PROCdraw_line(I%)
  622    TextPtr%+=LenLine%
  623  NEXT I%
  624ENDCASE
  625ENDPROC
  626:
  627DEF PROCdraw_line(Line%)
  628MOVE x0%,y0%-(Line%-1)*32-4
  629IF TextPtr%?L%=12 THEN ENDPROC
  630SYS "OS_WriteN",TextPtr%,LenLine%
  631ENDPROC
  632:
  633REM Menu handling -------------------------------------------------------
  634:
  635DEF PROCmake_menus
  636LOCAL I%
  637menu%(10)=FNcreate_menu(menu_ptr%,260,"Field,Index field...,Analyse months,Global changes>"+STR$(changeW%)+",Link to table...,Combine fields>"+STR$(calcW%)+",Start editing,Clear contents,Warn of delete,Save contents>"+STR$(saveW%)+",Undo changes")
  638menic%=menu%(10)+28+(1*24):AnalyseFunc%=menic%!12:menic%!16=-1:menic%!20=14
  639menic%=menu%(10)+28+(4*24):CalcFunc%=menic%!12:menic%!16=-1:menic%!20=14
  640menu%(13)=FNcreate_menu(menu_ptr%,120,"Interval:,"+STRING$(13,"0"))
  641menic%=menu%(13)+28
  642Interval%=menic%!12:menic%!16=buff%:$buff%="A0-9":buff%+=5
  643?menic%=?menic% OR (1<<2):$Interval%="10 min"
  644menu%(12)=FNcreate_menu(menu_ptr%,160,"Save indices,Automatic>"+STR$(menu%(13))+",Warning>"+STR$(menu%(13))+",Manual")
  645menu%(2)=FNcreate_menu(menu_ptr%,265,"Validation,Create table...,~Display table,Show table files,Validate input,Show relations")
  646PROCtick(menu%(2),3,TRUE)
  647PROCtick(menu%(10),7,TRUE)
  648menu%(7)=FNcreate_menu(menu_ptr%,260,"Misc.,Batch delete!"+STR$(moveW%)+",Set passwords...,Colours!"+STR$(colW%)+",Save indices>"+STR$(menu%(12))+",Edit template")
  649menu%(15)=FNcreate_menu(menu_ptr%,90,"Separator,Comma,TAB,CR,LF,"+STRING$(13,"0"))
  650menic%=menu%(15)+28+(4*24)
  651Delim%=menic%!12:menic%!16=-1:menic%!20=3
  652?menic%=?menic% OR (1<<2):$Delim%=""
  653menu%(20)=FNcreate_menu(menu_ptr%,90,"Terminator,CR,LF,LF CR,CR LF,CR CR,LF LF,"+STRING$(13,"0"))
  654menic%=menu%(20)+28+(6*24)
  655Termin%=menic%!12:menic%!16=-1:menic%!20=3
  656?menic%=?menic% OR (1<<2):$Termin%=""
  657string$="Print,Match,Show resources,Show jobs done,Options...,Save options!"+STR$(saveW%)+",Save query!"+STR$(saveW%)+",~Numeric fields>"+STR$(pselectW%)+",~Save selection!"+STR$(saveW%)+",~Clear selection"
  658menu%(6)=FNcreate_menu(menu_ptr%,260,string$+",Select all")
  659string$="Powerbase,Information!"+STR$(miscW%)+",Field: ''>"+STR$(menu%(10))+",Print>"+STR$(menu%(6))+",Validation>"+STR$(menu%(2))
  660string2$=",Current key...,Miscellaneous>"+STR$(menu%(7))+",Show keypad,Export subset!"+STR$(savesubW%)+",Export CSV!"+STR$(savesubW%)+",CSV options...,Save choices,Undo changes,Help"
  661menu%(1)=FNcreate_menu(menu_ptr%,236,string$+string2$)
  662Fieldpos%=menu%(1)+28+(1*24)+12
  663menu%(4)=FNcreate_menu(menu_ptr%,200,"Print tree,Complete,Totals only")
  664menu%(22)=FNcreate_menu(menu_ptr%,120,"Every:,"+STRING$(13,"0"))
  665menic%=menu%(22)+28
  666Every%=menic%!12:menic%!16=buff%:$buff%="A0-9":buff%+=5
  667?menic%=?menic% OR (1<<2):$Every%="25 recs"
  668menu%(21)=FNcreate_menu(menu_ptr%,160,"Balance,Automatic>"+STR$(menu%(22))+",Right now")
  669menu%(3)=FNcreate_menu(menu_ptr%,300,"Utilities,New primary key...,Adjust format,New record format,Merge database,~Change length>"+STR$(sizeW%)+",Balance index>"+STR$(menu%(21))+",Print index>"+STR$(menu%(4))+",Find duplicates,Warn of duplicates")
  670menu%(0)=FNcreate_menu(menu_ptr%,266,"\Powerbase,Information>"+STR$(infoW%)+",New database!"+STR$(saveW%)+",~Utilities>"+STR$(menu%(3))+",~Close database,~Abandon database,Save choices,Default choices,Help,Quit")
  671menu%(9)=FNcreate_menu(menu_ptr%,270,"New database,Design field...,~_Default database,~Save form file!"+STR$(saveW%)+",~Database size>"+STR$(sizeW%)+",~Primary key...,~Quit design")
  672menu%(17)=FNcreate_menu(menu_ptr%,200,"Table,Clear,Save!"+STR$(saveW%)+",Print,Sort,Undo change,Undo all")
  673menu%(18)=FNcreate_menu(menu_ptr%,250,"List,Save as text!"+STR$(saveW%)+",Sort,Scrap")
  674menu$="Data"
  675FOR I%=0 TO 8
  676  menu$+=","+vname$(I%)
  677NEXT I%
  678menu%(8)=FNcreate_menu(menu_ptr%,200,menu$):PROCtick(menu%(8),1,TRUE)
  679menu$="External"
  680FOR I%=36 TO 40
  681  menu$+=","+vname$(I%)
  682NEXT I%
  683menu%(11)=FNcreate_menu(menu_ptr%,180,menu$):PROCtick(menu%(11),0,TRUE)
  684menu$="Check box"
  685FOR I%=41 TO 45
  686  menu$+=","+vname$(I%)
  687NEXT I%
  688menu%(14)=FNcreate_menu(menu_ptr%,180,menu$):PROCtick(menu%(14),0,TRUE)
  689menu$="Stamp"
  690FOR I%=46 TO 59
  691  menu$+=","+vname$(I%)
  692NEXT I%
  693menu%(16)=FNcreate_menu(menu_ptr%,250,menu$):PROCtick(menu%(16),0,TRUE)
  694menu$="Button"
  695FOR I%=9 TO 35
  696  menu$+=","+vname$(I%)
  697NEXT I%
  698menu%(19)=FNcreate_menu(menu_ptr%,270,menu$):PROCtick(menu%(19),0,TRUE)
  699ybar%=96+9*44
  700ENDPROC
  701:
  702DEF PROCfield_menu(menu%,N%)
  703LOCAL F%,P%,L%,D$,F$
  704$menu%="Field list"
  705menu%?12=7:menu%?13=2:menu%?14=7:menu%?15=0:menu%!16=270:menu%!20=44:menu%!24=0
  706P%=menu%+28
  707FOR F%=1 TO N%
  708  F$=STR$(F%):F$=STRING$(3-LEN(F$)," ")+F$
  709  D$=LEFT$($FNtext(mainW%,desc%(F%)),7):D$+=STRING$(7-LEN(D$)," ")
  710  F$+=" "+D$+" "+Tag$(F%):L%=LEN(F$)
  711  !P%=0:P%!4=-1:P%!8=&7000121:P%!12=buff%:P%!16=-1:P%!20=L%+1
  712  $buff%=F$:buff%+=L%+1
  713  P%+=24
  714NEXT F%
  715P%!-24=P%!-24 OR &80
  716ENDPROC
  717:
  718DEF FNcreate_menu(RETURN menu%,width%,list$)
  719LOCAL start%,choice$,entries%,item%,P%,Q%,S%,shaded%
  720start%=menu%
  721IF LEFT$(list$,1)="\" AND (RISCOS3=FALSE OR leftmenu%=FALSE) THEN list$=MID$(list$,2)
  722P%=INSTR(list$,",")
  723$menu%=LEFT$(list$,P%-1)
  724menu%?12=7:menu%?13=2
  725menu%?14=7:menu%?15=0
  726menu%!16=width%:menu%!20=44:menu%!24=0
  727item%=menu%+28
  728list$+=","
  729entries%=0
  730REPEAT
  731  Q%=P%+1
  732  P%=INSTR(list$,",",Q%)
  733  IF P%>0 THEN
  734    !item%=0:shaded%=0
  735    choice$=MID$(list$,Q%,P%-Q%)
  736    IF LEFT$(choice$,1)="~" THEN choice$=MID$(choice$,2):shaded%=(1<<22)
  737    IF LEFT$(choice$,1)="_" THEN choice$=MID$(choice$,2):?item%=?item% OR 2
  738    S%=INSTR(choice$,"!")
  739    IF S%>0 THEN ?item%=?item% OR 8:MID$(choice$,S%,1)=">"
  740    S%=INSTR(choice$,">")
  741    IF S%=0 THEN
  742      item%!4=-1
  743      ELSE
  744      item%!4=VAL(MID$(choice$,S%+1))
  745      choice$=LEFT$(choice$,S%-1)
  746    ENDIF
  747    IF LEN(choice$)<=12 THEN
  748      $(item%+12)=choice$
  749      item%!8=&7000021
  750      ELSE
  751      L%=LEN(choice$)+1
  752      item%!12=buff%:$buff%=choice$:buff%+=L%:item%!16=-1:item%!20=L%
  753      item%!8=&7000121
  754    ENDIF
  755    item%!8=item%!8 OR shaded%
  756    item%+=24
  757    entries%+=1
  758  ENDIF
  759UNTIL P%=0
  760item%!-24=item%!-24 OR &80
  761menu%=item%
  762IF menu%>men_end% THEN ERROR EXT 0,"Not enough room for menus (internal error code 50)"
  763=start%
  764:
  765DEF PROCtick(menu%,item%,on%)
  766item%=menu%+28+item%*24
  767CASE on% OF
  768  WHEN TRUE:?item%=?item% OR 1
  769  WHEN FALSE:?item%=?item% AND 254
  770ENDCASE
  771ENDPROC
  772:
  773DEF PROCtick_one(menu%,first%,last%,item%)
  774LOCAL I%
  775FOR I%=first% TO last%
  776  PROCtick(menu%,I%,(I%=item%))
  777NEXT I%
  778ENDPROC
  779:
  780DEF FNticked(menu%,item%)
  781item%=menu%+28+item%*24
  782IF (?item% AND 1) THEN=TRUE ELSE=FALSE
  783:
  784DEF PROClit(menu%,item%,on%)
  785item%=menu%+28+item%*24
  786CASE on% OF
  787  WHEN TRUE: item%!8=item%!8 AND NOT (1<<22)
  788  WHEN FALSE: item%!8=item%!8 OR (1<<22)
  789ENDCASE
  790ENDPROC
  791:
  792DEF PROCshow_menu(menu%,x%,y%)
  793menuhandle%=menu%:menux%=x%:menuy%=y%
  794SYS "Wimp_CreateMenu",,menu%,x%,y%
  795ENDPROC
  796:
  797REM Icon handling -------------------------------------------------------
  798:
  799DEF FNcreate_icon(whandle%,xmin%,ymin%,width%,height%,iconflags%,text$,d1%,d2%,d3%)
  800LOCAL handle%
  801block%!0=whandle%
  802block%!4=xmin%:block%!8=ymin%
  803block%!12=xmin%+width%:block%!16=ymin%+height%
  804block%!20=iconflags%
  805IF d1%=0 THEN
  806  $(block%+24)=text$
  807  ELSE
  808  block%!24=d1%
  809  block%!28=d2%
  810  block%!32=d3%
  811ENDIF
  812SYS "Wimp_CreateIcon",,block% TO handle%
  813=handle%
  814:
  815DEF PROCredraw_icon(wi%,ic%)
  816!block%=wi%:block%!4=ic%
  817block%!8=0:block%!12=0
  818SYS "Wimp_SetIconState",,block%
  819block%!8=0:block%!12=wi%:block%!16=ic%
  820ENDPROC
  821:
  822DEF PROCicon_bit(bit%,wi%,ic%,on%)
  823!block%=wi%
  824block%!4=ic%
  825CASE on% OF
  826  WHEN TRUE:block%!8=0:block%!12=1<<bit%
  827  WHEN FALSE:block%!8=1<<bit%:block%!12=1<<bit%
  828ENDCASE
  829SYS "Wimp_SetIconState",,block%
  830ENDPROC
  831:
  832DEF PROCselect(wi%,ic%)
  833!block%=wi%:block%!4=ic%
  834block%!8=1<<21:block%!12=1<<21
  835SYS "Wimp_SetIconState",,block%
  836ENDPROC
  837:
  838DEF PROCdeselect(wi%,ic%)
  839!block%=wi%:block%!4=ic%
  840block%!8=0:block%!12=(1<<21)
  841SYS "Wimp_SetIconState",,block%
  842ENDPROC
  843:
  844DEF PROCinvert(wi%,ic%)
  845IF FNselected(wi%,ic%) THEN PROCdeselect(wi%,ic%) ELSE PROCselect(wi%,ic%)
  846ENDPROC
  847:
  848DEF PROCset_icon(wi%,ic%,on%)
  849IF on% THEN PROCselect(wi%,ic%) ELSE PROCdeselect(wi%,ic%)
  850ENDPROC
  851:
  852DEF FNselected(wi%,ic%)
  853!block%=wi%:block%!4=ic%
  854SYS "Wimp_GetIconState",,block%
  855=((block%!24) AND (1<<21))>0
  856:
  857DEF FNshaded(wi%,ic%)
  858!block%=wi%:block%!4=ic%
  859SYS "Wimp_GetIconState",,block%
  860=((block%!24) AND (1<<22))>0
  861;
  862DEF FNselected_esg(wi%,esg%)
  863SYS "Wimp_WhichIcon",wi%,block%,&003F0000,&00200000+(esg%<<16)
  864=!block%
  865:
  866DEF FNnext_writeable(wi%,ic%,d%,r%)
  867LOCAL P%,E%,next%
  868SYS "Wimp_WhichIcon",wi%,block%,&00C0E000,(14<<12)
  869REPEAT
  870  E%+=4
  871UNTIL block%!E%=-1
  872WHILE block%!P%<>ic% AND P%<E%
  873  P%+=4
  874ENDWHILE
  875IF P%=E% THEN P%-=4
  876IF r%=1 AND P%+4=E% THEN=TRUE
  877CASE d% OF
  878  WHEN 0:P%=E%
  879  WHEN 2:P%=-4
  880  OTHERWISE:P%+=4*d%
  881ENDCASE
  882CASE P% OF
  883  WHEN E%:next%=!block%
  884  WHEN -4:next%=block%!(E%-4)
  885  OTHERWISE:next%=block%!P%
  886ENDCASE
  887PROCset_caret(wi%,next%)
  888=FALSE
  889:
  890DEF FNtext(wi%,ic%)
  891!block%=wi%:block%!4=ic%
  892SYS "Wimp_GetIconState",,block%
  893=block%!28
  894:
  895DEF FNval(wi%,ic%)
  896!block%=wi%:block%!4=ic%
  897SYS "Wimp_GetIconState",,block%
  898=block%!32
  899:
  900DEF FNtext_length(wi%,ic%)
  901!block%=wi%:block%!4=ic%
  902SYS "Wimp_GetIconState",,block%
  903=LEN($(block%!28))
  904:
  905DEF PROCset_caret(handle%,ic%)
  906IF ic%=-1 THEN
  907  SYS "Wimp_SetCaretPosition",handle%,ic%
  908  ELSE
  909  SYS "Wimp_SetCaretPosition",handle%,ic%,0,0,-1,FNtext_length(handle%,ic%)
  910ENDIF
  911ENDPROC
  912:
  913DEF PROCalter_flags(dfg%,ffg%,bfg%)
  914LOCAL ic%,F%
  915!block%=mainW%
  916FOR ic%=0 TO fields%*2-1
  917  F%=(ic%+1) DIV 2
  918  block%!4=ic%:SYS "Wimp_GetIconState",,block%
  919  IF (ic% MOD 2)=1 THEN
  920    CASE chartype%(F%) OF
  921      WHEN 0,1,2,3,4,5,6,7,8,40,46,47,48,49,50,51,52,53,54,55,56,57,58:block%!8=ffg%
  922      WHEN 39:block%!8=ffg%:len%(F%)=0
  923      WHEN 59:IF logosloaded% THEN block%!8=&0000611E ELSE block%!8=ffg%
  924      OTHERWISE:block%!8=bfg%
  925    ENDCASE
  926    ELSE block%!8=dfg%
  927  ENDIF
  928  block%!12=&FFFFFFFF
  929  SYS "Wimp_SetIconState",,block%
  930NEXT ic%
  931ENDPROC
  932:
  933DEF PROClimit_actions(off%)
  934LOCAL ic%
  935RESTORE +0
  936READ ic%
  937REPEAT
  938  PROCicon_bit(22,keypadW%,ic%,off%)
  939  IF buttonfield%(ic%)>0 THEN PROCicon_bit(22,mainW%,field%(buttonfield%(ic%)),off%)
  940  READ ic%
  941UNTIL ic%=-1
  942PROClit(menu%(10),0,off%)
  943PROClit(menu%(10),1,off%)
  944PROClit(menu%(10),2,off%)
  945:
  946DATA 12,14,15,16,17,18,20,21,22,-1
  947:
  948ENDPROC
  949:
  950DEF PROCidentify_field(ic%)
  951Fieldnumber%=0:Fieldname$="":TextLength%=0
  952IF (ic% MOD 2)=1 THEN
  953  !block%=mainW%:block%!4=ic%
  954  SYS "Wimp_GetIconState",,block%
  955  TextLength%=block%!36-1
  956  Fieldnumber%=(ic%+1) DIV 2
  957  Fieldname$=$FNtext(mainW%,desc%(Fieldnumber%))
  958  IF Fieldname$="" THEN Fieldname$=Tag$(Fieldnumber%)
  959  CASE chartype%(Fieldnumber%) OF
  960    WHEN 2,4:SYS "OS_Byte",202,0,239
  961    OTHERWISE:SYS "OS_Byte",202,16,111
  962  ENDCASE
  963  SYS "OS_Byte",118
  964ENDIF
  965ENDPROC
  966:
  967DEF FNfirst_field
  968LOCAL I%
  969REPEAT I%+=1
  970UNTIL (len%(I%)>0 AND chartype%(I%)<6) OR I%>fields%
  971IF I%>fields% THEN=0 ELSE=I%
  972:
  973REM Mouse_click processing ----------------------------------------------
  974:
  975DEF PROCmouse(x%,y%,b%,wi%,ic%)
  976oldx%=x%:oldy%=y%
  977block%!0=x%:block%!4=y%:block%!8=b%:block%!12=wi%:block%!16=ic%
  978IF (b% AND 2)<>2 AND NOT (design% AND (wi%=mainW%)) THEN SYS "Interface_SlabButton",,block%
  979CASE wi% OF
  980  WHEN -2:PROCiconbar_click
  981  WHEN accessW%:accessbutton%=ic%
  982  WHEN mainW%:PROCmain_click
  983  WHEN keypadW%:PROCkeypad_click(wi%,ic%,b%)
  984  WHEN saveW%,savesubW%:PROCsave_click(wi%,ic%,b%)
  985  WHEN keyW%:PROCkey_click
  986  WHEN tableW%:PROCcreate_table
  987  WHEN linkW%:PROClink_to_table
  988  WHEN passW%:PROCpasswords
  989  WHEN printW%:PROCprint_click
  990  WHEN matchW%:PROCmatch_click(b%,wi%,ic%)
  991  WHEN createW%:PROCcreate_click
  992  WHEN datadicW%:PROCdatadic_click
  993  WHEN changeW%:PROCchange_click
  994  WHEN moveW%:PROCmove_click
  995  WHEN listW%:PROClist_click(x%,y%,b%,wi%)
  996  WHEN colW%:PROCset_colours
  997  WHEN calcW%:IF ic%=1 THEN PROCcalc_formula($CalcForm%)
  998  WHEN labelW%:
  999  CASE ic% OF
 1000    WHEN 11:PROCicon_bit(22,labelW%,12,FNselected(labelW%,11))
 1001    WHEN 15:SYS "Wimp_CreateMenu",,-1
 1002  ENDCASE
 1003  WHEN mergeW%:PROCmerge_click
 1004  WHEN sizeW%:PROCsize_click
 1005  WHEN csvW%:PROCcsv_click
 1006  WHEN pselectW%,relateW%,reformW%,infoW%,miscW%:REM ### No action on these ###
 1007  OTHERWISE:PROCspecial_click
 1008ENDCASE
 1009block%!8=0:block%!12=wi%:block%!16=ic%
 1010SYS "Interface_SlabButton",,block%
 1011ENDPROC
 1012:
 1013DEF PROCchange_click
 1014IF (b% AND %111)=4 THEN
 1015  CASE ic% OF
 1016    WHEN 4:PROCchanges(key%)
 1017    WHEN 5:PROCcommoncase(wi%,ic%)
 1018  ENDCASE
 1019ENDIF
 1020ENDPROC
 1021:
 1022DEF PROCmove_click
 1023IF (b% AND %111)=4 THEN
 1024  CASE ic% OF
 1025    WHEN 8:PROCclear
 1026    WHEN 9:PROCcommoncase(wi%,ic%)
 1027  ENDCASE
 1028ENDIF
 1029ENDPROC
 1030:
 1031DEF PROCcsv_click
 1032CASE (b% AND %111) OF
 1033  WHEN 2,4:
 1034  CASE ic% OF
 1035    WHEN 5:PROCshow_menu(menu%(15),oldx%+32,oldy%)
 1036    WHEN 6:PROCshow_menu(menu%(20),oldx%+32,oldy%)
 1037  ENDCASE
 1038ENDCASE
 1039CASE (b% AND %111) OF
 1040  WHEN 4:
 1041  CASE ic% OF
 1042    WHEN 1:PROCicon_bit(22,csvW%,4,(FNselected(csvW%,1)))
 1043    WHEN 9:PROCconvert_csv($FNtext(csvW%,13))
 1044    WHEN 10:PROCclose_window(csvW%)
 1045  ENDCASE
 1046ENDCASE
 1047ENDPROC
 1048:
 1049DEF PROCmerge_click
 1050IF (b% AND %111)=4 THEN z%=1 ELSE z%=-1
 1051CASE ic% OF
 1052  WHEN 4:ClientPtr%=FNmerge_next(ClientPtr%,z%)
 1053  WHEN 9:ClientPtr%=FNmerge_next(ClientPtr%,-z%)
 1054  WHEN 11:ClientPtr%=FNmerge_next(top,z%)
 1055  WHEN 10:ClientPtr%=FNmerge_next(top,-z%)
 1056  WHEN 12:PROCcommoncase(wi%,ic%)
 1057  WHEN 5:
 1058  SYS "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Print",,,,printtag%,mytask%
 1059  WHEN 7:
 1060  mergenum%=0
 1061  ClientSearch$=FNparse($FNtext(mergeW%,3),FNselected(mergeW%,12))
 1062  ClientPtr%=FNmerge_next(top,1)
 1063  WHEN 8:PROCperform_close(mergeW%)
 1064ENDCASE
 1065ENDPROC
 1066:
 1067DEF PROCsize_click
 1068CASE TRUE OF
 1069  WHEN VAL($Records%)<=0:
 1070  PROCsofterror("",71)
 1071  $Records%="100":PROCredraw_icon(sizeW%,1)
 1072  WHEN VAL($Increment%)<0
 1073  PROCsofterror("",72)
 1074  $Increment%="25":PROCredraw_icon(sizeW%,3)
 1075  OTHERWISE:
 1076  IF present%=7 THEN PROCchange_length(VAL($Records%),TRUE)
 1077  SYS "Wimp_CreateMenu",,-1
 1078ENDCASE
 1079ENDPROC
 1080:
 1081DEF PROCdatadic_click
 1082CASE b% AND %111 OF
 1083  WHEN 4:
 1084  !block%=datadicW%:SYS "Wimp_GetWindowState",,block%
 1085  SYS "Wimp_SetCaretPosition",datadicW%,ic%,x%-block%!4+block%!20,y%,-1,-1
 1086  WHEN 2:PROCshow_menu(menu%(17),x%-64,y%-20)
 1087  WHEN 1:
 1088  IF ic%>=0 THEN
 1089    field%=(ic% MOD (TabFields%+1))
 1090    PROCinvert(wi%,field%)
 1091    field$=STR$(field%)
 1092    IF FNselected(wi%,field%) THEN
 1093      printrel$(Tablenumber%)+=field$
 1094      ELSE
 1095      P%=INSTR(printrel$(Tablenumber%),field$)
 1096      printrel$(Tablenumber%)=LEFT$(printrel$(Tablenumber%),P%-1)+MID$(printrel$(Tablenumber%),P%+1)
 1097    ENDIF
 1098  ENDIF
 1099ENDCASE
 1100ENDPROC
 1101:
 1102DEF PROClist_click(x%,y%,b%,wi%)
 1103LOCAL N%
 1104CASE (b% AND %111) OF
 1105  WHEN 2:PROCshow_menu(menu%(18),x%-64,y%-20)
 1106  WHEN 4:
 1107  !block%=wi%
 1108  SYS "Wimp_GetWindowState",,block%
 1109  line%=(block%!16-block%!24-y%+32) DIV 32
 1110  column%=(x%-block%!4+block%!20) DIV 16
 1111  RecPtr%=!recanchor%
 1112  R%=RecPtr%!(line%*4)
 1113  E%=LEN(Form$) DIV 2
 1114  IF R%>=0 THEN
 1115    addr=FNfind("#"+STR$(R%),key%,1,TRUE)
 1116    CASE format$ OF
 1117      WHEN "horiz","table"
 1118      REPEAT
 1119        N%+=1
 1120      UNTIL Tab%(N%)>column%+1 OR N%=E%
 1121      F%=FNfnum(MID$(Form$,N%*2-1,2))
 1122      WHEN "vert":
 1123      REPEAT
 1124        N%+=1:line%-=1
 1125      UNTIL RecPtr%!(line%*4)<>R% OR N%=E%
 1126      F%=FNfnum(MID$(Form$,N%*2-1,2))
 1127      WHEN "tree":F%=KF%(tkey%,0)
 1128      WHEN "dup":F%=KF%(0,0)
 1129    ENDCASE
 1130    IF chartype%(F%)<=10 THEN PROCset_caret(mainW%,field%(F%))
 1131    Fieldnumber%=F%
 1132  ENDIF
 1133ENDCASE
 1134ENDPROC
 1135:
 1136DEF PROCmatch_click(b%,wi%,ic%)
 1137LOCAL not%,and%,or%
 1138IF b%=2 THEN PROCshow_menu(menu%(1),x%-64,y%-20):ENDPROC
 1139CASE FNselected_esg(printW%,4) OF
 1140  WHEN 38:reportdest$="Window"
 1141  WHEN 39:reportdest$="File"
 1142  WHEN 41:reportdest$="Printer"
 1143ENDCASE
 1144CASE ic% OF
 1145  WHEN 16:PROCcommoncase(wi%,ic%)
 1146  WHEN 27:
 1147  IF FNselected(matchW%,27) THEN $FNtext(matchW%,25)="Number found" ELSE $FNtext(matchW%,25)="Time taken"
 1148  PROCredraw_icon(matchW%,25)
 1149  WHEN 1,24:
 1150  IF ic%=24 THEN Search$="":displayed%=TRUE ELSE Search$=FNparse($FNtext(matchW%,0),FNselected(matchW%,16)):displayed%=FALSE
 1151  IF Search$<>"FALSE" THEN
 1152    $FNtext(matchW%,14)=""
 1153    PROCredraw_icon(matchW%,14)
 1154    CASE reportdest$ OF
 1155      WHEN "Window","Printer":PROCdo_it(Search$,displayed%)
 1156      WHEN "File":
 1157      savefunc$="Save list"
 1158      $SaveName%=$database%+".PrintJobs.List"
 1159      $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
 1160      !block%=matchW%:SYS "Wimp_GetWindowState",,block%
 1161      xmin%=block%!4+200:ymax%=block%!16
 1162      !block%=saveW%:SYS "Wimp_GetWindowState",,block%
 1163      block%!12=xmin%+block%!12-block%!4:block%!4=xmin%
 1164      block%!8=ymax%-block%!16+block%!8:block%!16=ymax%
 1165      block%!28=-1:SYS "Wimp_OpenWindow",,block%
 1166      PROCset_caret(saveW%,0)
 1167    ENDCASE
 1168  ENDIF
 1169  IF (b% AND %111)=4 AND NOT FNselected(matchW%,27) THEN PROCclose_window(matchW%):PROCset_caret(mainW%,-1)
 1170  WHEN 21,22:
 1171  IF (b% AND %111)=4 THEN z%=1 ELSE IF (b% AND %111)=1 THEN z%=-1
 1172  IF ic%=21 THEN Match_tag%+=z% ELSE Match_tag%-=z%
 1173  IF Match_tag%>fields% THEN Match_tag%=1
 1174  IF Match_tag%<1 THEN Match_tag%=fields%
 1175  $FNtext(matchW%,3)=Tag$(Match_tag%)
 1176  PROCredraw_icon(matchW%,3)
 1177  PROCtick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
 1178  WHEN 26:PROCshow_menu(fieldmenu%,oldx%+32,oldy%)
 1179  WHEN 10:
 1180  op%=FNselected_esg(matchW%,1)
 1181  CASE op% OF
 1182    WHEN 5:op$="="
 1183    WHEN 6:op$="{"
 1184    WHEN 7:op$="<"
 1185    WHEN 8:op$=">"
 1186    WHEN 15:op$="<>"
 1187    WHEN 18:op$=">="
 1188    WHEN 19:op$="<="
 1189    WHEN 20:op$="}{"
 1190  ENDCASE
 1191  not%=FNselected(matchW%,4):PROCdeselect(matchW%,4)
 1192  and%=FNselected(matchW%,12):PROCdeselect(matchW%,12)
 1193  or%=FNselected(matchW%,13):PROCdeselect(matchW%,13)
 1194  tag$=$FNtext(matchW%,3)
 1195  contents$=$FNtext(matchW%,9)
 1196  new$=tag$+op$+contents$
 1197  IF not% THEN new$="NOT ("+new$+")"
 1198  IF and% THEN new$+=" AND "
 1199  IF or% THEN new$+=" OR "
 1200  $FNtext(matchW%,0)=$FNtext(matchW%,0)+new$:PROCredraw_icon(matchW%,0)
 1201  $FNtext(matchW%,9)="":PROCredraw_icon(matchW%,9)
 1202  WHEN 24:reportdest$="Window":PROCdo_it("",TRUE)
 1203  IF (b% AND %111)=4 AND NOT FNselected(matchW%,27) THEN PROCclose_window(matchW%):PROCset_caret(mainW%,-1)
 1204ENDCASE
 1205ENDPROC
 1206:
 1207DEF PROCiconbar_click
 1208CASE b% AND %111 OF
 1209  WHEN 2:
 1210  IF FNselected(passW%,12) THEN
 1211    PROCclose_window(saveW%)
 1212    PROCshow_menu(menu%(0),x%-64,ybar%)
 1213  ENDIF
 1214  WHEN 4:
 1215  IF $dbase%="No data" THEN
 1216    $SaveName%="!DataBase"
 1217    $SaveSprite%="snew_appl;Pptr_hand,12,8;B3"
 1218    savefunc$=choice$(1)
 1219    SYS "Wimp_CreateMenu",,saveW%,x%-50,y%+300
 1220    ELSE PROCshow_windows
 1221  ENDIF
 1222ENDCASE
 1223ENDPROC
 1224:
 1225DEF PROCmain_click
 1226LOCAL P%,F%,H$,L%,T%,N$,field$
 1227IF present%=7 AND adjust%=FALSE THEN IF FNvalidate(Fieldnumber%,T%,N$)=FALSE THEN ENDPROC ELSE PROCupdate_calcs(Fieldnumber%)
 1228IF flash% THEN PROCdeselect(mainW%,field%(flash%)):flash%=FALSE
 1229CASE present% OF
 1230  WHEN 0,3:PROCdesign_field
 1231  WHEN 1:
 1232  IF FNfirst_field>0 THEN PROCdefault_key
 1233  PROCdesign_field
 1234  WHEN 5,7:
 1235  IF adjust% THEN
 1236    PROCdesign_field
 1237    ELSE
 1238    PROCidentify_field(ic%)
 1239    IF relations%=TRUE THEN PROCrelations(FALSE)
 1240    CASE b% AND 2047 OF
 1241      WHEN 2:
 1242      IF FNselected(passW%,11) OR Modify% THEN
 1243        PROCset_up_field_menu
 1244        PROCshow_menu(menu%(1),x%-64,y%-20)
 1245      ENDIF
 1246      WHEN 1:
 1247      CASE chartype%(Fieldnumber%) OF
 1248        WHEN 41,42,43,44,45:
 1249        PROCinvert(wi%,ic%)
 1250        col%=FNget_icon_cols(wi%,ic%)
 1251        col%=((col%>>4) OR (col%<<4)) AND %11111111
 1252        PROCset_icon_cols(wi%,ic%,col%)
 1253        boxon%=((col% AND %1111)<2)
 1254        PROCupdate_selection(boxon%)
 1255      ENDCASE
 1256      WHEN 4:
 1257      CASE chartype%(Fieldnumber%) OF
 1258        WHEN 31:PROCfilter(mainW%,field%(buttonfield%(22)))
 1259        WHEN 41,42,43,44,45:
 1260        IF INKEY(-3) THEN PROCinvert(wi%,ic%)
 1261        IF FNselected(wi%,ic%) THEN $Rf%(Fieldnumber%)=" " ELSE $Rf%(Fieldnumber%)=""
 1262        OTHERWISE:PROCrelations(TRUE)
 1263      ENDCASE
 1264      WHEN 256:
 1265      CASE chartype%(Fieldnumber%) OF
 1266        WHEN 0,1,2,3,4,5,6,7,8,36,39,46,47,48,49,50,51,52,53,54,55,56,57:
 1267        PROCinvert(wi%,ic%)
 1268        PROCupdate_selection(FNselected(wi%,ic%))
 1269        WHEN 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:PROCkeypad_click(wi%,chartype%(Fieldnumber%)-9,1)
 1270      ENDCASE
 1271      WHEN 1024:
 1272      IF INKEY(-3) THEN
 1273        SYS "Wimp_GetCaretPosition",,block%
 1274        wi%=!block%:ic%=block%!4
 1275        CASE wi% OF
 1276          WHEN matchW%:IF ic%<>0 THEN wi%=0
 1277          WHEN keypadW%:IF ic%<>29 THEN wi%=0
 1278          WHEN mergeW%:IF ic%<>3 THEN wi%=0
 1279          OTHERWISE:wi%=0
 1280        ENDCASE
 1281        IF wi%<>0 THEN
 1282          $FNtext(wi%,ic%)+=Tag$(Fieldnumber%)
 1283          PROCset_caret(wi%,ic%)
 1284          PROCredraw_icon(wi%,ic%)
 1285        ENDIF
 1286        ELSE
 1287        CASE chartype%(Fieldnumber%) OF
 1288          WHEN 0,1,2,3,4,5,8:
 1289          IF Fieldnumber%>0 THEN
 1290            !block%=mainW%:SYS "Wimp_GetWindowState",,block%
 1291            IF Access% THEN SYS "Wimp_SetCaretPosition",mainW%,ic%,x%-block%!4+block%!20,y%,-1,-1
 1292          ENDIF
 1293          WHEN 35:IF LEFT$(link$(Fieldnumber%),1)="@" THEN SYS "OS_CLI","Filer_OpenDir "+MID$(link$(Fieldnumber%),2) ELSE PROCsofterror("",91)
 1294          WHEN 36,37,38:PROCedit_blob(REC%,Fieldnumber%,chartype%(Fieldnumber%))
 1295          WHEN 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:PROCkeypad_click(wi%,chartype%(Fieldnumber%)-9,4)
 1296          WHEN 32:PROCmatch
 1297          WHEN 33:PROCexit(0)
 1298          WHEN 34:quit%=TRUE
 1299        ENDCASE
 1300      ENDIF
 1301    ENDCASE
 1302  ENDIF
 1303ENDCASE
 1304ENDPROC
 1305:
 1306DEF PROCset_up_field_menu
 1307LOCAL I%
 1308PROCtick_one(menu%(5),0,LastTable%,LastTable%+1)
 1309IF Fieldnumber%>0 THEN
 1310  PROClit(menu%(1),1,TRUE)
 1311  $AnalyseFunc%="Analyse"
 1312  $Fieldpos%="Field: "+Tag$(Fieldnumber%)
 1313  $LinkTitle%=Fieldname$
 1314  $CalcForm%=Tag$(Fieldnumber%)+"="
 1315  FOR I%=0 TO 9
 1316    PROClit(menu%(10),I%,FALSE)
 1317  NEXT I%
 1318  V%=chartype%(Fieldnumber%)
 1319  CASE V% OF
 1320    WHEN 5,50,51:
 1321    isadate%=TRUE:PROClit(menu%(10),1,TRUE)
 1322    $AnalyseFunc%="Analyse months"
 1323    OTHERWISE:isadate%=FALSE
 1324  ENDCASE
 1325  IF FNis_a_key(Fieldnumber%)>=0 THEN
 1326    PROClit(menu%(10),1,TRUE)
 1327    IF isadate%=FALSE OR NOT FNselected(mainW%,field%(Fieldnumber%)) THEN $AnalyseFunc%="Analyse index"
 1328  ENDIF
 1329  CASE V% OF
 1330    WHEN 0,1,2,3,4,5:
 1331    PROClit(menu%(10),0,Access%)
 1332    PROClit(menu%(10),2,Access%)
 1333    PROClit(menu%(10),3,Access%)
 1334    PROClit(menu%(10),5,Access%)
 1335    PROClit(menu%(10),9,Access%)
 1336    Keyfld0%=Fieldnumber%:Keyfld1%=0:$F2dkey%=""
 1337    $F1dkey%=Tag$(Fieldnumber%)
 1338    keylimit%=TextLength%:$KeyNo%=""
 1339    WD%()=0:WD%(0)=keylimit%:keylen%=keylimit%
 1340    FOR J%=0 TO 3
 1341      $Wkey%(J%)=STR$(WD%(J%))
 1342    NEXT J%
 1343    $ChangeTitle%="Field: "+Fieldname$
 1344    $FNtext(changeW%,1)=""
 1345    IF NOT common% THEN $FNtext(changeW%,3)=""
 1346    PROClink_status
 1347    WHEN 6:
 1348    PROClit(menu%(10),4,Modify%)
 1349    PROClit(menu%(10),3,Access%)
 1350    PROCcalc_link("Calculations",6)
 1351    PROClink_status
 1352    WHEN 7:
 1353    PROClit(menu%(10),4,Modify%)
 1354    PROClit(menu%(10),3,Access%)
 1355    PROCcalc_link("Combine fields",7)
 1356    PROClink_status
 1357    WHEN 46,47,48,49,50,51,52,53,54,55,56,57:
 1358    IF V%=47 THEN
 1359      PROClit(menu%(10),4,Modify%)
 1360      PROCcalc_link("Set base value",47)
 1361    ENDIF
 1362    PROClit(menu%(10),0,Access%)
 1363    Keyfld0%=Fieldnumber%:Keyfld1%=0:$F2dkey%=""
 1364    IF Fieldname$<>Tag$(Fieldnumber%) THEN $F1dkey%=LEFT$(Fieldname$,8)+" ("+Tag$(Fieldnumber%)+")" ELSE $F1dkey%=Fieldname$
 1365    keylimit%=TextLength%:$KeyNo%=""
 1366    WD%()=0:WD%(0)=keylimit%:keylen%=keylimit%
 1367    FOR J%=0 TO 3
 1368      $Wkey%(J%)=STR$(WD%(J%))
 1369    NEXT J%
 1370    WHEN 36,39:
 1371    IF FNblob_path(FALSE,$database%,REC%,Fieldnumber%,V%,object$)>=0 THEN
 1372      PROClit(menu%(10),6,Access%)
 1373      PROClit(menu%(10),7,TRUE)
 1374      PROClit(menu%(10),8,TRUE)
 1375      $SaveName%="TextFile"
 1376      $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
 1377      savefunc$="Save text"
 1378    ENDIF
 1379    WHEN 37,40:
 1380    IF FNblob_path(FALSE,$database%,REC%,Fieldnumber%,V%,object$)>=0 THEN
 1381      PROClit(menu%(10),6,Access%)
 1382      PROClit(menu%(10),7,TRUE)
 1383      PROClit(menu%(10),8,TRUE)
 1384      $SaveName%="Sprite"
 1385      $SaveSprite%="sfile_ff9;Pptr_hand,12,8;B3"
 1386      savefunc$="Save sprite"
 1387    ENDIF
 1388    WHEN 38:
 1389    IF FNblob_path(FALSE,$database%,REC%,Fieldnumber%,V%,object$)>=0 THEN
 1390      PROClit(menu%(10),6,Access%)
 1391      PROClit(menu%(10),7,TRUE)
 1392      PROClit(menu%(10),8,TRUE)
 1393      $SaveName%="DrawFile"
 1394      $SaveSprite%="sfile_aff;Pptr_hand,12,8;B3"
 1395      savefunc$="Save draw"
 1396    ENDIF
 1397  ENDCASE
 1398  ELSE PROClit(menu%(1),1,FALSE):$Fieldpos%="Field: ''"
 1399ENDIF
 1400ENDPROC
 1401:
 1402DEF PROCupdate_selection(add%)
 1403LOCAL P%,SP%,F%,SF%
 1404F%=Fieldnumber%:SF%=(F% OR 128)
 1405field$=STR$~(F%):IF F%<16 THEN field$="0"+field$
 1406sfield$=STR$~(SF%):IF SF%<16 THEN sfield$="0"+sfield$
 1407IF add% THEN
 1408  IF INKEY(-1) THEN printorder$+=sfield$ ELSE printorder$+=field$ 
 1409  PROCenable_row(calcrow%?Fieldnumber%,TRUE)
 1410  PROClit(menu%(6),7,TRUE)
 1411  PROClit(menu%(6),8,TRUE)
 1412  ELSE
 1413  REPEAT
 1414    P%=INSTR(printorder$,field$,P%+1)
 1415  UNTIL ((P%-1) MOD 2)=0 OR P%=0
 1416  IF P%>0 THEN
 1417    printorder$=LEFT$(printorder$,P%-1)+MID$(printorder$,P%+2)
 1418    PROCenable_row(calcrow%?Fieldnumber%,FALSE)
 1419    ELSE
 1420    REPEAT
 1421      SP%=INSTR(printorder$,sfield$,SP%+1)
 1422    UNTIL ((SP%-1) MOD 2)=0 OR SP%=0
 1423    IF SP%>0 THEN
 1424      printorder$=LEFT$(printorder$,SP%-1)+MID$(printorder$,SP%+2)
 1425      PROCenable_row(calcrow%?Fieldnumber%,FALSE)
 1426    ENDIF   
 1427  ENDIF
 1428  IF printorder$="" THEN
 1429    PROClit(menu%(6),7,FALSE)
 1430    PROClit(menu%(6),8,FALSE)
 1431  ENDIF
 1432ENDIF
 1433ENDPROC
 1434:
 1435DEF PROCprint_click
 1436CASE (b% AND %111) OF
 1437  WHEN 2:IF FNselected(printW%,26) THEN PROCshow_menu(labelW%,x%-500,y%+200)
 1438  WHEN 1,4:
 1439  CASE ic% OF
 1440    WHEN 23,24,25:
 1441    PROCicon_bit(22,printW%,15,FNselected(printW%,25))
 1442    PROCicon_bit(22,printW%,45,FNselected(printW%,25))
 1443    WHEN 26:
 1444    PROCicon_bit(22,printW%,15,FNselected(printW%,25))
 1445    PROCicon_bit(22,printW%,45,FNselected(printW%,25))
 1446    PROCshow_menu(labelW%,x%-500,y%+200)
 1447    WHEN 28:PROCdrag_options("<Pbase$Dir>.Resources.PrintOpts")
 1448    WHEN 20:
 1449    PROCclose_window(printW%)
 1450    IF (b% AND %111)=1 THEN PROCopen_window(matchW%):PROCmatch
 1451  ENDCASE
 1452ENDCASE
 1453ENDPROC
 1454:
 1455DEF PROCkeypad_click(wi%,ic%,b%)
 1456LOCAL handle%,icon%,T%,N$,date$
 1457PROCclose_window(relateW%)
 1458IF flash% THEN PROCdeselect(mainW%,field%(flash%)):flash%=FALSE
 1459IF ic%<>12 THEN IF FNvalidate(Fieldnumber%,T%,N$)=FALSE THEN ENDPROC ELSE PROCupdate_calcs(Fieldnumber%)
 1460CASE (b% AND %111) OF
 1461  WHEN 1,4:
 1462  IF (b% AND %111)=4 THEN z%=1 ELSE z%=-1
 1463  CASE ic% OF
 1464    WHEN 0:PROCscan(z%,VAL($FNtext(keypadW%,23)))
 1465    WHEN 1:stop%=TRUE
 1466    WHEN 2:addr=FNmoveto(key%,top,z%)
 1467    WHEN 3:addr=FNmoveto(key%,top,-z%)
 1468    WHEN 4:addr=FNmoveto(key%,addr,z%)
 1469    WHEN 5:addr=FNmoveto(key%,addr,-z%)
 1470    WHEN 6:addr=FNfast_wind(top,addr,z%)
 1471    WHEN 7:addr=FNfast_wind(top,addr,-z%)
 1472    WHEN 8:PROCkey_select(z%)
 1473    WHEN 9:PROCkey_select(-z%)
 1474    WHEN 10:PROCsubfile(z%)
 1475    WHEN 11:PROCsubfile(-z%)
 1476    WHEN 12:PROCrotate:addr=FNmoveto(key%,top,1)
 1477    WHEN 13:PROCallow_search(wi%,z%)
 1478    WHEN 14:
 1479    PROCdisplay(key%,-1)
 1480    WHEN 15:addr=FNshift(z%,key%,0)
 1481    IF INKEY(-3) THEN
 1482      addr=FNfind("#"+STR$(REC%),key%,0,TRUE)
 1483      ELSE PROCdisplay(key%,addr)
 1484    ENDIF
 1485    WHEN 16:addr=FNshift(-z%,key%,0)
 1486    IF INKEY(-3) THEN
 1487      addr=FNfind("#"+STR$(REC%),key%,0,TRUE)
 1488      ELSE PROCdisplay(key%,addr)
 1489    ENDIF
 1490    WHEN 17:addr=FNshift(0,key%,1):PROCdisplay(key%,addr)
 1491    WHEN 18:PROCval_help
 1492    WHEN 19:PROCcheck_change:PROCsave_keys:PROCsave_all_tables
 1493    WHEN 20:PROCstore
 1494    WHEN 21:PROCretrieve
 1495    WHEN 22:PROCfilter(keypadW%,22)
 1496    WHEN 28:
 1497    S$=$FNtext(keypadW%,27)
 1498    CASE chartype%(KF%(key%,0)) OF
 1499      WHEN 5,50,51:
 1500      IF FNcheck_date(S$,1,date$)=TRUE THEN S$=FNreverse_date(date$)
 1501    ENDCASE
 1502    IF S$<>"" THEN addr=FNfind(LEFT$(S$,KL%(key%)),key%,1,TRUE)
 1503    IF z%=1 THEN
 1504      IF FNselected(passW%,9) THEN
 1505        !block%=keypadW%:SYS "Wimp_GetWindowState",,block%
 1506        block%!12=block%!4+660:block%!16=block%!8+328
 1507        block%!20=0:block%!24=0
 1508        SYS "Wimp_OpenWindow",,block%
 1509        ELSE PROCclose_window(keypadW%)
 1510      ENDIF
 1511    ENDIF
 1512    WHEN 30:
 1513    IF $FNtext(keypadW%,29)<>"" THEN
 1514      Filter$=FNparse($FNtext(keypadW%,29),FNselected(keypadW%,32))
 1515      filter%=TRUE
 1516      addr=FNmoveto(key%,top,z%)
 1517      ELSE filter%=FALSE
 1518    ENDIF
 1519    WHEN 32:PROCcommoncase(wi%,ic%)
 1520    WHEN 37:SYS "OS_Byte",202,0,239:PROCshow_menu(specmenu%,oldx%+32,oldy%)
 1521    WHEN 38:PROCopen_window(specialW%)
 1522  ENDCASE
 1523ENDCASE
 1524ENDPROC
 1525:
 1526DEF PROCscan(z%,s%)
 1527stop%=FALSE
 1528REPEAT
 1529  addr=FNmoveto(key%,addr,z%)
 1530  K%=INKEY(s%)
 1531  PROCpoll
 1532UNTIL stop%
 1533ENDPROC
 1534:
 1535DEF PROCstore
 1536LOCAL wi%,ic%
 1537SYS "Wimp_GetCaretPosition",,block%
 1538wi%=!block%:ic%=block%!4
 1539IF wi%=mainW% THEN scratchpad$=$FNtext(wi%,ic%)
 1540ENDPROC
 1541:
 1542DEF PROCretrieve
 1543LOCAL wi%,ic%,field%
 1544SYS "Wimp_GetCaretPosition",,block%
 1545wi%=!block%:ic%=block%!4
 1546IF scratchpad$<>"" AND wi%=mainW% THEN
 1547  field%=FNget_field(ic%)
 1548  $FNtext(wi%,ic%)=LEFT$(scratchpad$,len%(field%))
 1549  PROCredraw_icon(wi%,ic%)
 1550ENDIF
 1551ENDPROC
 1552:
 1553REM ### Binary Large Objects (B.L.O.B.s) ###
 1554:
 1555DEF FNblob_path(create%,f$,R%,F%,V%,RETURN b$)
 1556LOCAL O$,main$,level1$,level2$,d%,L%
 1557CASE V% OF
 1558  WHEN 36,39:O$=".Memo"
 1559  WHEN 37,40:O$=".Sprite"
 1560  WHEN 38:O$=".Draw"
 1561ENDCASE
 1562main$=f$+O$+STR$(F%)
 1563level1$=main$+"."+STR$(R% DIV 4900)
 1564level2$=level1$+"."+STR$(R% DIV 70)
 1565b$=level2$+"."+STR$(R% MOD 70)
 1566SYS "OS_File",5,b$ TO d%,,,,L%
 1567IF d%=0 AND create%=TRUE THEN
 1568  SYS "OS_File",8,main$
 1569  SYS "OS_File",8,level1$
 1570  SYS "OS_File",8,level2$
 1571ENDIF
 1572IF d%=1 THEN=L% ELSE=-1
 1573:
 1574DEF FNload_blob(f$,R%,F%,V%)
 1575LOCAL L%,b$
 1576L%=FNblob_path(FALSE,f$,R%,F%,V%,b$)
 1577IF L%>=0 THEN
 1578  PROCextend_named_sliding_block(tempanchor%,L%+1)
 1579  SYS "OS_File",255,b$,!tempanchor%
 1580ENDIF
 1581=L%
 1582:
 1583DEF PROCblob_to_file(F,L%)
 1584IF L%>0 THEN SYS "OS_GBPB",2,F,!tempanchor%,L%
 1585ENDPROC
 1586:
 1587DEF PROCcopy_blob(source$,dest$,RS%,RD%,FS%,FD%,V%)
 1588LOCAL L%,Z%,bs$,bd$
 1589L%=FNblob_path(FALSE,source$,RS%,FS%,V%,bs$)
 1590IF L%>0 THEN
 1591  Z%=FNblob_path(TRUE,dest$,RD%,FD%,V%,bd$)
 1592  SYS "OS_CLI","Copy "+bs$+" "+bd$+" ~C~V~Q"
 1593ENDIF
 1594ENDPROC
 1595:
 1596DEF PROCdelete_blob(F%,F$,wi%,ic%)
 1597LOCAL flag%
 1598IF delwarn%=FALSE THEN
 1599  SYS "OS_CLI","Delete "+F$:flag%=TRUE
 1600  ELSE IF FNconfirm("Delete object? Are you sure?") THEN
 1601    SYS "OS_CLI","Delete "+F$:flag%=TRUE
 1602  ENDIF
 1603ENDIF
 1604IF flag% THEN
 1605  CASE chartype%(F%) OF
 1606    WHEN 36:$FNval(wi%,ic%)="Z0;Ssm!edit"
 1607    WHEN 37:$FNval(wi%,ic%)="Z0;Ssm!paint"
 1608    WHEN 38:$FNval(wi%,ic%)="Z0;Ssm!draw"
 1609    WHEN 39:$FNtext(wi%,ic%)=""
 1610  ENDCASE
 1611  PROCredraw_icon(wi%,ic%)
 1612ENDIF
 1613ENDPROC
 1614:
 1615DEF PROCset_blob_sprite(R%,F%,V%)
 1616LOCAL L%,b$,sprite$
 1617IF R%=RA% THEN L%=-1 ELSE L%=FNblob_path(FALSE,$database%,R%,F%,V%,b$)
 1618CASE V% OF
 1619  WHEN 36:IF L%>=0 THEN sprite$="small_fff" ELSE sprite$="sm!edit"
 1620  WHEN 37:IF L%>=0 THEN sprite$="small_ff9" ELSE sprite$="sm!paint"
 1621  WHEN 38:IF L%>=0 THEN sprite$="small_aff" ELSE sprite$="sm!draw"
 1622ENDCASE
 1623$FNval(mainW%,field%(F%))="Z0;Pptr_ext,8,4;S"+sprite$
 1624PROCredraw_icon(mainW%,field%(F%))
 1625ENDPROC
 1626:
 1627DEF PROCedit_blob(R%,F%,V%)
 1628LOCAL wi%,ic%,b$,O$,val$
 1629IF R%=RA% THEN PROCcheck_change:IF REC%<>RA% THEN R%=REC%
 1630wi%=mainW%:ic%=field%(F%)
 1631CASE V% OF
 1632  WHEN 36:O$="Memo":val$="Z0;Ssmall_fff":ftype%=&fff
 1633  WHEN 37:O$="Sprite":val$="Z0;Ssmall_ff9":ftype%=&ff9
 1634  WHEN 38:O$="Draw":val$="Z0;Ssmall_aff":ftype%=&aff
 1635ENDCASE
 1636IF FNblob_path(TRUE,$database%,R%,F%,V%,b$)<0 THEN
 1637  $FNval(wi%,ic%)=val$
 1638  SYS "OS_CLI","Copy <PBase$Dir>.Resources.Objects."+O$+" "+b$+" ~C~V"
 1639  PROCredraw_icon(wi%,ic%)
 1640ENDIF
 1641block%!0=256:block%!12=0:block%!16=5:block%!20=0
 1642block%!24=0:block%!28=0:block%!32=0:block%!36=0
 1643block%!40=ftype%:$(block%+44)=b$+CHR$(0)
 1644SYS "Wimp_SendMessage",18,block%,0
 1645ENDPROC
 1646:
 1647DEF PROCtransfer_blob(wi%,ic%,R%,file$,ft%)
 1648LOCAL F%,V%,L%,W%,b$
 1649IF wi%<>mainW% THEN ENDPROC
 1650IF R%=RA% THEN PROCcheck_change:IF REC%<>RA% THEN R%=REC%
 1651F%=(ic%+1) DIV 2:V%=chartype%(F%)
 1652CASE V% OF
 1653  WHEN 35:IF ft%=-1 THEN link$(F%)="@"+file$:link$(0)="LOADED"
 1654  WHEN 36:
 1655  IF ft%=&fff THEN PROCinstall_blob:$FNval(wi%,ic%)="Z0;Ssmall_fff"
 1656  WHEN 37:
 1657  IF ft%=&ff9 THEN PROCinstall_blob:$FNval(wi%,ic%)="Z0;Ssmall_ff9"
 1658  WHEN 38:
 1659  IF ft%=&aff THEN PROCinstall_blob:$FNval(wi%,ic%)="Z0;Ssmall_aff"
 1660  WHEN 39:
 1661  IF ft%=&fff THEN PROCinstall_blob:PROCshow_text_block(F%)
 1662  WHEN 40:
 1663  IF ft%=&ff9 THEN PROCinstall_blob:PROCshow_picture(F%)
 1664ENDCASE
 1665PROCredraw_icon(wi%,ic%)
 1666ENDPROC
 1667:
 1668DEF PROCinstall_blob
 1669L%=FNblob_path(TRUE,$database%,R%,F%,V%,b$)
 1670SYS "OS_CLI","Remove "+b$
 1671SYS "OS_CLI","Copy "+file$+" "+b$+" ~C~V"
 1672ENDPROC
 1673:
 1674DEF PROCshow_text_block(F%)
 1675LOCAL F,b$,I%,L%,base%
 1676IF F%=0 THEN ENDPROC
 1677base%=Rf%(F%)
 1678L%=FNblob_path(FALSE,$database%,REC%,F%,39,b$)
 1679IF L%>0 THEN
 1680  IF L%>len%(F%) THEN L%=len%(F%)
 1681  REM ### Load only as much of file as we can display ###
 1682  F=OPENIN(b$):IF F>0 THEN SYS "OS_GBPB",4,F,base%,L%:PROCclose_file(F)
 1683  REM ### Replace any characters<32 by spaces - but ONLY for display ###
 1684  FOR I%=0 TO L%-1
 1685    IF base%?I%<32 THEN base%?I%=32
 1686  NEXT I%
 1687  base%?L%=10
 1688  ELSE $base%=""
 1689ENDIF
 1690ENDPROC
 1691:
 1692DEF PROCshow_picture(F%)
 1693LOCAL F,f$,I%,max%,len%,x%,y%,w%,h%
 1694IF F%=0 THEN ENDPROC
 1695len%=FNblob_path(FALSE,$database%,REC%,F%,40,f$)
 1696!block%=mainW%:block%!4=field%(F%):SYS "Wimp_GetIconState",,block%
 1697x%=block%!8:y%=block%!12:w%=block%!16-x%:h%=block%!20-y%
 1698SYS "Wimp_DeleteIcon",,block%
 1699IF len%>=0 THEN
 1700  PROCextend_named_sliding_block(Rf%(F%),len%+4):base%=!Rf%(F%)
 1701  !base%=len%+4:SYS "OS_File",255,f$,base%+4
 1702  field%(F%)=FNcreate_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",base%+16,base%,0)
 1703  ELSE
 1704  field%(F%)=FNcreate_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",paint%,1,384)
 1705ENDIF
 1706ENDPROC
 1707:
 1708DEF PROCfilter(wi%,ic%)
 1709LOCAL h%,ox%,oy%
 1710CASE wi% OF
 1711  WHEN keypadW%:h%=530:ox%=0:oy%=0
 1712  WHEN mainW%:h%=200:ox%=0:oy%=-330
 1713ENDCASE
 1714IF FNselected(wi%,ic%) THEN
 1715  !block%=keypadW%:SYS "Wimp_GetWindowState",,block%
 1716  block%!12=block%!4+660:block%!8=block%!16-h%
 1717  block%!20=ox%:block%!24=oy%
 1718  SYS "Wimp_OpenWindow",,block%
 1719  IF NOT common% THEN $FNtext(keypadW%,29)=""
 1720  PROCset_caret(keypadW%,29)
 1721  IF $FNtext(keypadW%,29)<>"" THEN
 1722    Filter$=FNparse($FNtext(keypadW%,29),FNselected(keypadW%,32))
 1723    filter%=TRUE
 1724    addr=FNmoveto(key%,top,z%)
 1725    ELSE filter%=FALSE
 1726  ENDIF
 1727  ELSE
 1728  IF wi%=keypadW% THEN
 1729    !block%=keypadW%:SYS "Wimp_GetWindowState",,block%
 1730    block%!12=block%!4+660:block%!8=block%!16-330
 1731    block%!20=0:block%!24=0
 1732    SYS "Wimp_OpenWindow",,block%
 1733    ELSE PROCclose_window(keypadW%)
 1734  ENDIF
 1735  filter%=FALSE
 1736ENDIF
 1737ENDPROC
 1738:
 1739DEF FNfast_wind(T%,P%,D%)
 1740LOCAL I%
 1741fast%=VAL($FNtext(keypadW%,23))
 1742D%=(D%+1) DIV 2
 1743WHILE P%<>T% AND I%<fast%
 1744  IF filter% THEN P%=FNnext_match(P%,D%,Filter$) ELSE P%=FNneighbour(key%,P%,D%)
 1745  I%+=1
 1746ENDWHILE
 1747IF P%=T% AND NOT filter% THEN VDU 7:P%=FNneighbour(key%,P%,1-D%)
 1748PROCdisplay(key%,P%)
 1749=P%
 1750:
 1751DEF PROCsubfile(dir%)
 1752file%+=dir%
 1753IF file%=6 THEN file%=0
 1754IF file%=-1 THEN file%=5
 1755top=8*file%+LH%
 1756addr=FNmoveto(key%,top,1)
 1757ENDPROC
 1758:
 1759DEF PROCallow_search(wi%,e%)
 1760LOCAL w%,ox%,oy%
 1761CASE e% OF
 1762  WHEN 1:PROCselect(keypadW%,24):PROCdeselect(keypadW%,25)
 1763  WHEN -1:PROCselect(keypadW%,25):PROCdeselect(keypadW%,24)
 1764ENDCASE
 1765PROCdeselect(keypadW%,22)
 1766IF buttonfield%(22)>0 THEN PROCdeselect(mainW%,field%(buttonfield%(22)))
 1767filter%=FALSE
 1768$FNtext(keypadW%,27)="":$FNtext(keypadW%,36)=""
 1769$FNtext(keypadW%,33)=Index$(key%)
 1770CASE wi% OF
 1771  WHEN keypadW%:w%=1000:ox%=0:oy%=0
 1772  WHEN mainW%:w%=340:ox%=660:oy%=0
 1773ENDCASE
 1774!block%=keypadW%:SYS "Wimp_GetWindowState",,block%
 1775block%!12=block%!4+w%:block%!8=block%!16-328
 1776block%!20=ox%:block%!24=oy%
 1777SYS "Wimp_OpenWindow",,block%
 1778PROCset_caret(keypadW%,27)
 1779ENDPROC
 1780:
 1781DEF PROCval_help
 1782LOCAL name$
 1783IF Fieldnumber%>0 THEN
 1784  name$=LEFT$(link$(Fieldnumber%))
 1785  IF ASC(name$)<58 AND ASC(name$)<>-1 THEN name$=MID$(name$,2)
 1786  Tablenumber%=FNtable_number(name$)
 1787  IF Tablenumber%<>-1 THEN PROCshow_table(Tablenumber%)
 1788ENDIF
 1789ENDPROC
 1790:
 1791DEF PROCval_on_off
 1792LOCAL I%
 1793validate%=NOT validate%
 1794PROCtick(menu%(2),3,validate%)
 1795CASE validate% OF
 1796  WHEN TRUE:
 1797  FOR I%=1 TO vstrings%
 1798    $valid%(I%)=$rvalid%(I%)
 1799  NEXT I%
 1800  WHEN FALSE:
 1801  FOR I%=1 TO vstrings%
 1802    $valid%(I%)="Pptr_write,4,4"
 1803  NEXT I%
 1804ENDCASE
 1805ENDPROC
 1806:
 1807DEF PROCsave_click(wi%,ic%,b%)
 1808LOCAL p$,H$
 1809butt%=(b% AND %111)
 1810CASE wi% OF
 1811  WHEN saveW%:
 1812  Filename$=$SaveName%
 1813  CASE savefunc$ OF
 1814    WHEN "New database":
 1815    Type%=0
 1816    IF LEFT$(Filename$,1)<>"!" THEN Filename$="!"+Filename$:Filename$=LEFT$(Filename$,10):$SaveName%=Filename$
 1817    WHEN "Log changes":
 1818    Type%=&fff:startlog%=TRUE
 1819    WHEN "Save as text":
 1820    Type%=&fff
 1821    Start%=!textanchor%:End%=Start%+Count%*LenLine%
 1822    $Start%=pitch$
 1823    WHEN "Save list":
 1824    Type%=&fff:savetofile%=TRUE
 1825    WHEN "Save text":
 1826    Type%=&fff:
 1827    len%=FNblob_path(TRUE,$database%,REC%,Fieldnumber%,36,f$)
 1828    PROCextend_named_sliding_block(saveanchor%,len%+1)
 1829    SYS "OS_File",255,f$,!saveanchor%
 1830    Start%=!saveanchor%:End%=Start%+len%
 1831    WHEN "Save sprite":
 1832    Type%=&ff9
 1833    len%=FNblob_path(TRUE,$database%,REC%,Fieldnumber%,37,f$)
 1834    PROCextend_named_sliding_block(saveanchor%,len%+1)
 1835    SYS "OS_File",255,f$,!saveanchor%
 1836    Start%=!saveanchor%:End%=Start%+len%
 1837    WHEN "Save draw":
 1838    Type%=&aff
 1839    len%=FNblob_path(TRUE,$database%,REC%,Fieldnumber%,38,f$)
 1840    PROCextend_named_sliding_block(saveanchor%,len%+1)
 1841    SYS "OS_File",255,f$,!saveanchor%
 1842    Start%=!saveanchor%:End%=Start%+len%
 1843    WHEN "Save options":
 1844    Type%=&7f5
 1845    WHEN "Save query":
 1846    Start%=FNtext(matchW%,0):End%=Start%+LEN($Start%)+1:Type%=&7f4
 1847    WHEN "Save selection":
 1848    P%=savebuff%:$P%=printorder$:P%+=LEN($P%)+1
 1849    FOR T%=0 TO LastTable%
 1850     $P%=printrel$(T%):P%+=LEN($P%)+1
 1851    NEXT T%
 1852    Start%=savebuff%:End%=Start%+P%-savebuff%+1:Type%=&7F3
 1853    WHEN "Save table":
 1854    $TabTitle%=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 1855    Start%=!tabanchor%(T%):End%=Start%+160+Rows%*Rec%:Type%=&7f1
 1856    WHEN "Save form file":
 1857    Type%=&7f2
 1858    PROClit(menu%(9),3,TRUE)
 1859    PROClit(menu%(9),4,TRUE)
 1860    IF adjust%=FALSE AND FNfirst_field>0 THEN PROCdefault_key
 1861  ENDCASE
 1862  WHEN savesubW%:
 1863  CASE savefunc$ OF
 1864    WHEN "Export subset":
 1865    Filename$=$SubName%:Type%=0
 1866    WHEN "Export CSV":
 1867    Filename$=$SubName%:Type%=&dfe
 1868  ENDCASE
 1869ENDCASE
 1870CASE ic% OF
 1871  WHEN 1:
 1872  IF (b% AND %11110000)>0 THEN PROCinit_drag(wi%,ic%,5)
 1873  WHEN 2:
 1874  IF INSTR(Filename$,".")>0 THEN
 1875    IF butt%<>2 THEN PROCsave(Filename$,Type%,Start%,End%)
 1876    IF butt%=4 THEN SYS "Wimp_CreateMenu",,-1
 1877    ELSE PROCsofterror("",33)
 1878  ENDIF
 1879  WHEN 12:IF butt%=2 OR butt%=4 THEN PROCshow_menu(menu%(15),x%-64,y%-20)
 1880  WHEN 13:IF butt%=2 OR butt%=4 THEN PROCshow_menu(menu%(20),x%-64,y%-20)
 1881  WHEN 5:PROCcommoncase(wi%,ic%)
 1882ENDCASE
 1883ENDPROC
 1884:
 1885DEF PROCkey_click
 1886LOCAL J%
 1887CASE b% AND %111 OF
 1888  WHEN 4:z%=1
 1889  WHEN 1:z%=-1
 1890ENDCASE
 1891CASE ic% OF
 1892  WHEN 16:PROCkcycle(Keyfld0%,F1dkey%,0,z%)
 1893  WHEN 17:PROCkcycle(Keyfld0%,F1dkey%,0,-z%)
 1894  WHEN 18:PROCkcycle(Keyfld1%,F2dkey%,1,z%)
 1895  WHEN 19:PROCkcycle(Keyfld1%,F2dkey%,1,-z%)
 1896  WHEN 21:
 1897  PROCtick_one(fieldmenu%,0,fields%-1,Keyfld0%-1)
 1898  PROCshow_menu(fieldmenu%,oldx%+32,oldy%):fieldfunc$="first"
 1899  WHEN 22:
 1900  PROCtick_one(fieldmenu%,0,fields%-1,Keyfld1%-1)
 1901  PROCshow_menu(fieldmenu%,oldx%+32,oldy%):fieldfunc$="second"
 1902  WHEN 7:
 1903  IF keyfunc$<>"Current key" THEN
 1904    keylimit%=len%(Keyfld0%)+len%(Keyfld1%)
 1905    FOR J%=0 TO 3
 1906      WD%(J%)=VAL($Wkey%(J%))
 1907    NEXT J%
 1908    CASE TRUE OF
 1909      WHEN SUM(WD%())>keylimit%:PROCsofterror("",26)
 1910      OTHERWISE:
 1911      CASE keyfunc$ OF
 1912        WHEN "Primary key":
 1913        key%=0
 1914        PROCcopy_keydata(key%)
 1915        RA%=VAL($Records%):f$=$database%
 1916        PROCmake_empty_index(RA%,0,TRUE)
 1917        PROCsave_recs(f$+".Database",RA%)
 1918        present%=7:PROCsave_keys
 1919        design%=FALSE:PROCget_it_in(f$)
 1920        WHEN "New primary key":PROCnew_tree(file%)
 1921        WHEN "Index field":PROCcreate_index
 1922      ENDCASE
 1923    ENDCASE
 1924  ENDIF
 1925  keyfunc$=""
 1926  PROCclose_window(keyW%)
 1927ENDCASE
 1928ENDPROC
 1929:
 1930DEF PROCshade_key_icons(on%)
 1931FOR I%=16 TO 20
 1932  PROCicon_bit(22,keyW%,I%,on%)
 1933NEXT I%
 1934FOR I%=2 TO 5
 1935  PROCicon_bit(22,keyW%,I%,on%)
 1936NEXT I%
 1937ENDPROC
 1938:
 1939DEF PROCkcycle(RETURN F%,T%,icon%,z%)
 1940F%+=z%
 1941IF F%>fields% THEN F%=0
 1942IF F%<0 THEN F%=fields%
 1943IF F%>0 THEN $T%=Tag$(F%) ELSE $T%=""
 1944PROCredraw_icon(keyW%,icon%)
 1945PROCtick_one(fieldmenu%,0,fields%-1,F%-1)
 1946ENDPROC
 1947:
 1948DEF PROCcopy_keydata(key%)
 1949KF%(key%,0)=Keyfld0%:KF%(key%,1)=Keyfld1%
 1950KL%(key%)=SUM(WD%())
 1951FOR J%=0 TO 3
 1952  KW%(key%,J%)=WD%(J%)
 1953NEXT J%
 1954case%(key%)=FNselected(keyW%,20)
 1955ENDPROC
 1956:
 1957DEF PROCset_keydata(key%)
 1958LOCAL J%,S$
 1959Keyfld0%=KF%(key%,0):Keyfld1%=KF%(key%,1)
 1960$F1dkey%=Tag$(Keyfld0%)
 1961IF KF%(key%,1)>0 THEN $F2dkey%=Tag$(Keyfld1%) ELSE $F2dkey%=""
 1962keylen%=KL%(key%)
 1963FOR J%=0 TO 3
 1964  WD%(J%)=KW%(key%,J%):$Wkey%(J%)=STR$(WD%(J%))
 1965NEXT J%
 1966$KeyNo%=STR$(key%)
 1967PROCset_icon(keyW%,20,case%(key%))
 1968ENDPROC
 1969:
 1970DEF PROCkey_select(D%)
 1971PROCcolour(key%,2)
 1972CASE D% OF
 1973  WHEN +1:key%=(key%+1) MOD (Keys%+1)
 1974  WHEN -1:key%-=1:IF key%<0 THEN key%=Keys%
 1975ENDCASE
 1976PROCcolour(key%,1)
 1977PROCset_keydata(key%)
 1978$FNtext(keypadW%,33)=Index$(key%):PROCredraw_icon(keypadW%,33)
 1979top=8*file%+LH%
 1980addr=FNmoveto(key%,top,1)
 1981ENDPROC
 1982:
 1983DEF PROCset_colours
 1984LOCAL I%
 1985CASE ic% OF
 1986  WHEN 0,1,2,3,4,5,6:
 1987  col%=ncol%(ic%)
 1988  fb%=FNselected_esg(colW%,2)
 1989  CASE fb% OF
 1990    WHEN 11:col%=(col% AND &F):fb%=1
 1991    WHEN 12:col%=((col%>>4) AND &F):fb%=0
 1992  ENDCASE
 1993  CASE b% AND %111 OF
 1994    WHEN 1:
 1995    col%-=1:IF col%<0 THEN col%=15
 1996    PROCdcolour(colW%,ic%,col%,fb%)
 1997    WHEN 4:
 1998    col%=(col%+1) MOD 16
 1999    PROCdcolour(colW%,ic%,col%,fb%)
 2000  ENDCASE
 2001  ncol%(ic%)=FNget_icon_cols(colW%,ic%)
 2002  WHEN 9,10:
 2003  fcol%()=ncol%()
 2004  FOR I%=0 TO Keys%
 2005    PROCcolour(I%,2)
 2006  NEXT I%
 2007  PROCcolour(0,0)
 2008  PROCcolour(key%,1)
 2009  FOR I%=1 TO fields%
 2010    IF link$(I%)<>"" THEN PROCset_icon_cols(mainW%,field%(I%),ncol%(6))
 2011  NEXT I%
 2012  IF ic%=10 THEN PROCwrite_colours
 2013  SYS "Wimp_CreateMenu",,-1
 2014  WHEN 15:
 2015  PROCread_colours("<Pbase$Dir>.Resources.Colours")
 2016  FOR I%=0 TO 6
 2017    PROCset_icon_cols(colW%,I%,ncol%(I%))
 2018  NEXT I%
 2019ENDCASE
 2020ENDPROC
 2021:
 2022DEF PROCcreate_click
 2023LOCAL Calc$
 2024butt%=(b% AND %111)
 2025CASE butt% OF
 2026  WHEN 2,4:
 2027  IF ic%=36 THEN PROCshow_menu(menu%(menunumber%),oldx%+32,oldy%)
 2028ENDCASE
 2029IF butt%=4 THEN z%=1 ELSE IF butt%=1 THEN z%=-1 ELSE ENDPROC
 2030CASE ic% OF
 2031  WHEN 21:PROCset_limits(1,0,8,8)
 2032  WHEN 22:PROCset_limits(36,36,40,11)
 2033  WHEN 23:PROCset_limits(9,9,35,19)
 2034  WHEN 24:PROCset_limits(41,41,45,14)
 2035  WHEN 35:PROCset_limits(46,46,59,16)
 2036  WHEN 19:PROCchange_type(z%,menunumber%)
 2037  WHEN 20:PROCchange_type(-z%,menunumber%)
 2038  WHEN 18:PROCcreate_field(VAL($InsText%),posx%,posy%,Calc$)
 2039  WHEN 29:PROCremove_field(Fieldnumber%,FALSE,Calc$)
 2040  PROCcreate_field(Fieldnumber%,posx%,posy%,Calc$)
 2041  WHEN 30:PROCremove_field(Fieldnumber%,TRUE,Calc$)
 2042  WHEN 14:PROCicon_bit(22,createW%,13,(FNselected(createW%,14)))
 2043  WHEN 39:
 2044  F%=VAL($InsText%)
 2045  IF F%>0 AND F%<=fields% THEN
 2046    IF F%<Fieldnumber% THEN Z%=-1 ELSE Z%=1
 2047    PROCre_sequence(Fieldnumber%,F%,Z%)
 2048  ENDIF
 2049  PROCclose_window(createW%)
 2050  WHEN 40:PROCswap_fields(Fieldnumber%,VAL($InsText%))
 2051ENDCASE
 2052PROCupdate_box
 2053IF (present% AND 4)=0 THEN PROClit(menu%(9),1,(fields%>0))
 2054CASE ic% OF
 2055  WHEN 18,29,30:
 2056  IF butt%=4 THEN
 2057    PROCclose_window(createW%)
 2058    ELSE
 2059    PROCicon_bit(22,createW%,18,FALSE)
 2060    PROCicon_bit(22,createW%,30,NOT adjust%)
 2061    PROCicon_bit(22,createW%,29,TRUE)
 2062    Fieldnumber%=fields%
 2063  ENDIF
 2064ENDCASE
 2065ENDPROC
 2066:
 2067DEF PROCupdate_box
 2068CASE fieldtype% OF
 2069  WHEN 0,1,2,3,4,5,6,7,46,47:IF NOT adjust% THEN PROCicon_bit(22,createW%,6,TRUE)
 2070  OTHERWISE:PROCicon_bit(22,createW%,6,FALSE)
 2071ENDCASE
 2072PROCicon_bit(22,createW%,14,(fieldtype%=3 OR fieldtype%=6))
 2073PROCicon_bit(22,createW%,13,(fieldtype%=3 OR fieldtype%=6) AND FNselected(createW%,14))
 2074PROCicon_bit(22,createW%,15,(fieldtype%=3 OR fieldtype%=47))
 2075PROCicon_bit(22,createW%,25,(fieldtype%=3))
 2076PROCicon_bit(22,createW%,26,NOT adjust%)
 2077IF NOT adjust% THEN PROClit(menu%(9),2,(fields%>0))
 2078$ValText%=vname$(fieldtype%)
 2079PROCredraw_icon(createW%,28)
 2080ENDPROC
 2081:
 2082DEF PROCset_limits(t%,f%,l%,m%)
 2083fieldtype%=t%
 2084firsttype%=f%
 2085lasttype%=l%
 2086menunumber%=m%
 2087PROCtick_one(menu%(m%),0,l%-f%,t%-f%)
 2088PROCupdate_box
 2089ENDPROC
 2090:
 2091DEF PROCchange_type(d%,m%)
 2092CASE d% OF
 2093  WHEN 1:fieldtype%+=1
 2094  IF fieldtype%>lasttype% THEN fieldtype%=firsttype%
 2095  WHEN -1:fieldtype%-=1
 2096  IF fieldtype%<firsttype% THEN fieldtype%=lasttype%
 2097ENDCASE
 2098PROCtick_one(menu%(m%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
 2099PROCupdate_box
 2100ENDPROC
 2101:
 2102DEF PROCpasswords
 2103LOCAL F
 2104CASE ic% OF
 2105  WHEN 4:
 2106  IF $Write%="" THEN $Write%=$Read%
 2107  IF $Manager%="" THEN $Manager%=$Write%
 2108  F=OPENUP($database%+".Colours")
 2109  PTR#F=35
 2110  S$=FNencrypt($Read%,TRUE):PRINT#F,S$
 2111  S$=FNencrypt($Write%,TRUE):PRINT#F,S$
 2112  S$=FNencrypt($Manager%,TRUE):PRINT#F,S$
 2113  FOR I%=9 TO 16
 2114    PRINT#F,FNselected(passW%,I%)
 2115  NEXT I%
 2116  PRINT#F,logpath$
 2117  EXT#F=PTR#F
 2118  PROCclose_file(F)
 2119  PROClit(menu%(1),6,FNselected(passW%,9))
 2120  PROClit(menu%(1),7,FNselected(passW%,13))
 2121  PROClit(menu%(1),8,FNselected(passW%,13))
 2122  PROClit(menu%(1),2,FNselected(passW%,14))
 2123  PROClit(menu%(3),8,FNselected(passW%,15))
 2124  IF NOT FNselected(passW%,9) THEN PROCclose_window(keypadW%) ELSE PROCopen_window(keypadW%)
 2125  PROCclose_window(passW%):PROCclose_window(saveW%)
 2126  warn%=TRUE
 2127  WHEN 16:
 2128  IF FNselected(passW%,16) THEN
 2129    savefunc$="Log changes"
 2130    IF logpath$="" THEN $SaveName%=$database%+".Log" ELSE $SaveName%=logpath$
 2131    $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
 2132    !block%=passW%:SYS "Wimp_GetWindowState",,block%
 2133    xmin%=block%!4+200:ymax%=block%!16
 2134    !block%=saveW%:SYS "Wimp_GetWindowState",,block%
 2135    block%!12=xmin%+block%!12-block%!4:block%!4=xmin%
 2136    block%!8=ymax%-block%!16+block%!8:block%!16=ymax%
 2137    block%!28=-1:SYS "Wimp_OpenWindow",,block%
 2138    PROCset_caret(saveW%,0)
 2139    PROCopen_log
 2140    ELSE PROCclose_log
 2141  ENDIF
 2142ENDCASE
 2143ENDPROC
 2144:
 2145DEF PROCopen_log
 2146IF logpath$<>"" THEN
 2147  SYS "OS_File",5,logpath$ TO d%
 2148  IF d%=1 THEN
 2149    loghandle%=OPENUP(logpath$):PTR#loghandle%=EXT#loghandle%
 2150    BPUT#loghandle%,"Log opened "+TIME$
 2151    BPUT#loghandle%,"Password level used: "+STR$(pw%)
 2152    BPUT#loghandle%,STRING$(35,"=")
 2153    ELSE
 2154    PROCsofterror("",99)
 2155    PROCdeselect(passW%,16)
 2156    logpath$=""
 2157  ENDIF
 2158ENDIF
 2159ENDPROC
 2160:
 2161DEF PROCclose_log
 2162IF loghandle%<>0 THEN
 2163  BPUT#loghandle%,""
 2164  BPUT#loghandle%,"Log closed "+TIME$
 2165  PROCclose_file(loghandle%)
 2166  SYS "OS_File",18,logpath$,&fff
 2167ENDIF
 2168ENDPROC
 2169:
 2170DEF PROCcount(key%,RETURN RU%)
 2171LOCAL zero%,file%,top,sum%
 2172RU%=0
 2173FOR file%=0 TO 5
 2174  top=8*file%+LH%
 2175  sum%=FNcount_recs(key%,zero%)
 2176  RU%+=sum%
 2177  $FNtext(miscW%,file%+22)=STR$(sum%)
 2178NEXT file%
 2179ENDPROC
 2180:
 2181DEF FNcount_recs(key%,RETURN ptr%)
 2182LOCAL P%,count%,S%,R%,S$,k$
 2183SYS "Hourglass_On"
 2184P%=FNneighbour(key%,top,1)
 2185WHILE P%<>top
 2186  count%+=1
 2187  IF ptr%>0 THEN
 2188    R%=FNrec_no(k$,key%,P%)
 2189    IF R%>highest% THEN highest%=R%
 2190    !ptr%=R%:$(ptr%+4)=k$:ptr%+=4+KL%(key%)+1
 2191    flagptr%?R%=0
 2192  ENDIF
 2193  P%=FNneighbour(key%,P%,1)
 2194ENDWHILE
 2195SYS "Hourglass_Off"
 2196=count%
 2197:
 2198DEF PROCanalyse(func%)
 2199LOCAL L%,P%,S%,S$,K$,k$,ptr%,pos%,N%,values%,key%
 2200LOCAL S$(),N%()
 2201PROCread_print_options
 2202IF func%<0 THEN L%=6 ELSE key%=func%:L%=KL%(key%)
 2203IF L%>8 THEN Tab%(0)=Lmargin%+L%+6 ELSE Tab%(0)=Lmargin%+14
 2204Tab%(1)=Tab%(0)+6
 2205IF func%<0 THEN
 2206  Title$="Analysis of date field: "+Tag$(Fieldnumber%)
 2207  Heading$=FNpad(margin$+"Month",Tab%(0))+"Number"
 2208  ELSE
 2209  Title$="Analysis of index: "+Index$(key%)
 2210  Heading$=FNpad(margin$+"Contents",Tab%(0))+"Number"
 2211ENDIF
 2212Title1$=TIME$
 2213LenLine%=LEN(Heading$)+2
 2214PROCextend_named_sliding_block(lineanchor%,LenLine%+4)
 2215PROCextend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
 2216PROCheap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
 2217reportdest$="Window"
 2218PROCclose_window(datadicW%)
 2219Count%=0
 2220PROClist_head(0)
 2221SYS "Hourglass_On"
 2222IF func%<0 THEN PROCanalyse_date ELSE PROCanalyse_index
 2223SYS "Hourglass_Off"
 2224PROCrule_off(45)
 2225Line$=FNpad(margin$+"Total",Tab%(0))+FNjustify(STR$(N%),1,0)
 2226$(!lineanchor%)=Line$:PROClist_line(-1,lineanchor%,LEN(Line$),32)
 2227PROCrule_off(45)
 2228PROCscreen_list
 2229ENDPROC
 2230:
 2231DEF PROCanalyse_index
 2232K$="***"
 2233P%=FNneighbour(key%,top,1)
 2234WHILE P%<>top
 2235    R%=FNrec_no(k$,key%,P%)
 2236    IF k$<>K$ THEN values%+=1:K$=k$
 2237    P%=FNneighbour(key%,P%,1)
 2238ENDWHILE
 2239DIM S$(values%),N%(values%)
 2240K$="***"
 2241P%=FNneighbour(key%,top,1)
 2242WHILE P%<>top
 2243    R%=FNrec_no(k$,key%,P%)
 2244    IF k$<>K$ THEN ptr%+=1:K$=k$:S$(ptr%)=K$:N%(ptr%)=1 ELSE N%(ptr%)+=1
 2245    P%=FNneighbour(key%,P%,1)
 2246ENDWHILE
 2247FOR I%=1 TO ptr%
 2248  S$=S$(I%):IF S$="" THEN S$="<null>" ELSE IF isadate% THEN S$=FNreverse_date(S$)
 2249  Line$=margin$+S$:Line$=FNpad(Line$,Tab%(0))+FNjustify(STR$(N%(I%)),1,0)
 2250  $(!lineanchor%)=Line$:PROClist_line(-1,lineanchor%,LEN(Line$),32)
 2251  N%+=N%(I%)
 2252NEXT I%
 2253ENDPROC
 2254:
 2255DEF PROCanalyse_date
 2256DIM S$(12),N%(12)
 2257S$()="<null>","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
 2258dbasehandle%=OPENIN($database%+".Database")
 2259P%=FNneighbour(key%,top,1)
 2260WHILE P%<>top
 2261  R%=FNrec_no(k$,key%,P%)
 2262  PROCreadsmarray(dbasehandle%,R%)
 2263  S$=F$(Fieldnumber%)
 2264  IF S$<>"" THEN
 2265    M%=VAL(MID$(S$,4,2))
 2266    N%(M%)+=1
 2267    ELSE N%(0)+=1
 2268  ENDIF
 2269  P%=FNneighbour(key%,P%,1)
 2270ENDWHILE
 2271PROCclose_file(dbasehandle%)
 2272FOR I%=0 TO 12
 2273  Line$=margin$+S$(I%):Line$=FNpad(Line$,Tab%(0))+FNjustify(STR$(N%(I%)),1,0)
 2274  $(!lineanchor%)=Line$:PROClist_line(-1,lineanchor%,LEN(Line$),32)
 2275  N%+=N%(I%)
 2276NEXT I%
 2277ENDPROC
 2278:
 2279DEF PROCupdate_stats
 2280$filesize%=STR$(RA%)
 2281$Records%=STR$(RA%)
 2282$used%=STR$(RU%)
 2283$percent%=STR$(INT(RU%*100/RA%))+"%"
 2284ENDPROC
 2285:
 2286REM Keypress processing --------------------------------------------------
 2287:
 2288DEF PROCset_keyboard(wi%,ic%)
 2289CASE wi% OF
 2290  WHEN mainW%:
 2291  CASE chartype%((ic%+1) DIV 2) OF
 2292    WHEN 2,4:SYS "OS_Byte",202,0,239
 2293    OTHERWISE:SYS "OS_Byte",202,16,111
 2294  ENDCASE
 2295  OTHERWISE:SYS "OS_Byte",202,caps%,111
 2296ENDCASE
 2297SYS "OS_Byte",118
 2298ENDPROC
 2299:
 2300DEF PROCprocess_key
 2301IF printing% OR indexing% THEN ENDPROC
 2302LOCAL T%,N$
 2303SYS "Wimp_GetCaretPosition",,block%
 2304wi%=block%!0:ic%=block%!4:key_pressed%=block%!24
 2305CASE wi% OF
 2306  WHEN mainW%:PROCmain_press
 2307  WHEN keypadW%:PROCkeypad_press
 2308  WHEN passW%:PROCdbox_press(4)
 2309  WHEN changeW%:PROCdbox_press(4)
 2310  WHEN tableW%:PROCdbox_press(26)
 2311  WHEN saveW%:PROCdbox_press(2)
 2312  WHEN datadicW%:PROCdatadic_press
 2313  WHEN printW%:PROCdbox_press(20)
 2314  WHEN labelW%:PROCdbox_press(15)
 2315  WHEN createW%:PROCcreate_press
 2316  WHEN accessW%:PROCdbox_press(3)
 2317  WHEN keyW%:PROCdbox_press(7)
 2318  WHEN savesubW%:PROCdbox_press(2)
 2319  WHEN matchW%:PROCmatch_press
 2320  WHEN moveW%:PROCdbox_press(8)
 2321  WHEN calcW%:PROCdbox_press(1)
 2322  WHEN mergeW%:PROCdbox_press(7)
 2323  WHEN sizeW%:PROCdbox_press(4)
 2324  WHEN csvW%:PROCdbox_press(9)
 2325ENDCASE
 2326ENDPROC
 2327:
 2328DEF PROCkeypad_press
 2329IF key_pressed%=13 THEN
 2330  CASE ic% OF
 2331    WHEN 27:PROCmouse(0,0,4,wi%,28)
 2332    WHEN 29:PROCmouse(0,0,4,wi%,30)
 2333  ENDCASE
 2334  ELSE SYS "Wimp_ProcessKey",key_pressed%
 2335ENDIF
 2336ENDPROC
 2337:
 2338DEF PROCmain_press
 2339IF NOT FNselected(passW%,10) THEN SYS "Wimp_ProcessKey",key_pressed%:ENDPROC
 2340LOCAL icon%
 2341IF flash% THEN PROCdeselect(mainW%,field%(flash%)):flash%=FALSE
 2342IF key_pressed%<>392 THEN IF FNvalidate(Fieldnumber%,T%,N$)=FALSE THEN ENDPROC ELSE PROCupdate_calcs(Fieldnumber%)
 2343CASE key_pressed% OF
 2344  WHEN 13:
 2345  CASE wi% OF
 2346    WHEN mainW%:
 2347      IF Fieldnumber%=fields% THEN
 2348        PROCclose_window(relateW%)
 2349        PROCdisplay(key%,-1)
 2350        ELSE
 2351        REPEAT
 2352          Fieldnumber%+=1:IF Fieldnumber%>fields% THEN Fieldnumber%=1
 2353          c%=chartype%(Fieldnumber%)
 2354        UNTIL len%(Fieldnumber%)>0 AND (c%<6 OR c%=8)
 2355        icon%=field%(Fieldnumber%)
 2356        PROCset_caret(mainW%,icon%)
 2357        IF relations%=TRUE THEN PROCrelations(FALSE)
 2358      ENDIF
 2359  ENDCASE
 2360  WHEN 398:
 2361  REPEAT
 2362    Fieldnumber%+=1:IF Fieldnumber%>fields% THEN Fieldnumber%=1
 2363    c%=chartype%(Fieldnumber%)
 2364  UNTIL len%(Fieldnumber%)>0 AND (c%<6 OR c%=8)
 2365  icon%=field%(Fieldnumber%)
 2366  PROCset_caret(mainW%,icon%)
 2367  IF relations%=TRUE THEN PROCrelations(FALSE)
 2368  WHEN 399:
 2369  REPEAT
 2370    Fieldnumber%-=1:IF Fieldnumber%<1 THEN Fieldnumber%=fields%
 2371    c%=chartype%(Fieldnumber%)
 2372  UNTIL len%(Fieldnumber%)>0 AND (c%<6 OR c%=8)
 2373  icon%=field%(Fieldnumber%)
 2374  PROCset_caret(mainW%,icon%)
 2375  IF relations%=TRUE THEN PROCrelations(FALSE)
 2376  WHEN 389:IF Access% THEN PROCshow_menu(changeW%,500,600)
 2377  WHEN 405:
 2378  IF LEN(printorder$)=2 THEN
 2379    Fieldnumber%=FNfnum(printorder$):V%=chartype%(Fieldnumber%)
 2380    CASE V% OF
 2381      WHEN 36,39:
 2382      IF FNblob_path(FALSE,$database%,REC%,Fieldnumber%,V%,object$)>=0 THEN
 2383        PROCset_up_field_menu
 2384        PROCshow_menu(saveW%,500,600)
 2385      ENDIF
 2386    ENDCASE
 2387  ENDIF
 2388  WHEN 408:PROCval_on_off
 2389  WHEN 387:PROCmouse(0,0,4,keypadW%,2)
 2390  WHEN 403:PROCmouse(0,0,4,keypadW%,3)
 2391  WHEN 386:PROCmouse(0,0,4,keypadW%,4)
 2392  WHEN 402:PROCmouse(0,0,4,keypadW%,5)
 2393  WHEN 391:PROCmouse(0,0,4,keypadW%,6)
 2394  WHEN 407:PROCmouse(0,0,4,keypadW%,7)
 2395  WHEN 393:PROCmouse(0,0,4,keypadW%,8)
 2396  WHEN 409:PROCmouse(0,0,4,keypadW%,9)
 2397  WHEN 388:PROCmouse(0,0,4,keypadW%,10)
 2398  WHEN 404:PROCmouse(0,0,4,keypadW%,11)
 2399  WHEN 420:PROCmouse(0,0,4,keypadW%,12)
 2400  WHEN 385:PROCmouse(0,0,4,keypadW%,13)
 2401  WHEN 401:PROCmouse(0,0,1,keypadW%,13)
 2402  WHEN 458:PROCmouse(0,0,4,keypadW%,14)
 2403  WHEN 390:PROCmouse(0,0,4,keypadW%,15)
 2404  WHEN 406:PROCmouse(0,0,4,keypadW%,16)
 2405  WHEN 422:PROCmouse(0,0,4,keypadW%,17)
 2406  WHEN 392:PROCmouse(0,0,4,keypadW%,18)
 2407  WHEN 384:PROCprint_this
 2408  WHEN 400:PROCmatch
 2409  WHEN 416:PROCopen_window(printW%)
 2410  OTHERWISE:SYS "Wimp_ProcessKey",key_pressed%
 2411ENDCASE
 2412CASE chartype%(Fieldnumber%) OF
 2413  WHEN 2,4:SYS "OS_Byte",202,0,239
 2414  OTHERWISE:SYS "OS_Byte",202,16,111
 2415ENDCASE
 2416SYS "OS_Byte",118
 2417SYS "OS_Byte",15,0
 2418ENDPROC
 2419:
 2420DEF PROCdbox_press(ok%)
 2421CASE key_pressed% OF
 2422  WHEN 13:IF FNnext_writeable(wi%,ic%,1,1)=TRUE THEN PROCmouse(0,0,4,wi%,ok%)
 2423  WHEN 27:PROCclose_window(wi%):PROCset_caret(mainW%,-1)
 2424  WHEN 398:f%=FNnext_writeable(wi%,ic%,1,0)
 2425  WHEN 399:f%=FNnext_writeable(wi%,ic%,-1,0)
 2426  OTHERWISE SYS "Wimp_ProcessKey",key_pressed%
 2427ENDCASE
 2428ENDPROC
 2429:
 2430DEF PROCdatadic_press
 2431LOCAL icons%
 2432icons%=Rows%*(TabFields%+1)
 2433CASE key_pressed% OF
 2434  WHEN 13:
 2435  IF ic%<icons%-1 THEN PROCset_caret(datadicW%,ic%+1)
 2436  WHEN 398:
 2437  IF ic%<icons%-TabFields%-1 THEN PROCset_caret(datadicW%,ic%+TabFields%+1)
 2438  WHEN 399:
 2439  IF ic%>=TabFields%+1 THEN PROCset_caret(datadicW%,ic%-TabFields%-1)
 2440  OTHERWISE:SYS "Wimp_ProcessKey",key_pressed%
 2441ENDCASE
 2442ENDPROC
 2443:
 2444DEF PROCcreate_press
 2445CASE TRUE OF
 2446  WHEN FNshaded(wi%,29):IF NOT FNshaded(wi%,18) THEN PROCdbox_press(18)
 2447  OTHERWISE:IF NOT FNshaded(wi%,29) THEN PROCdbox_press(29)
 2448ENDCASE
 2449ENDPROC
 2450:
 2451DEF PROCmatch_press
 2452CASE key_pressed% OF
 2453  WHEN 13:PROCmouse(0,0,4,matchW%,1)
 2454  WHEN 27:PROCclose_window(matchW%):SYS "Wimp_SetCaretPosition",mainW%,-1
 2455  WHEN 384:PROCprint_this
 2456  OTHERWISE:SYS "Wimp_ProcessKey",key_pressed%
 2457ENDCASE
 2458ENDPROC
 2459:
 2460DEF PROCmenu_select
 2461LOCAL handle%,P%,Q%,I%
 2462choice1%=!block%:choice2%=block%!4
 2463choice3%=block%!8:choice4%=block%!12
 2464P%=1
 2465SYS "Wimp_DecodeMenu",,menuhandle%,block%,choices%
 2466FOR I%=1 TO 4
 2467  Q%=INSTR($choices%,".",P%+1)
 2468  choice$(I%)=MID$($choices%,P%,Q%-P%)
 2469  P%=Q%+1
 2470NEXT I%
 2471SYS "Wimp_GetPointerInfo",,block%
 2472redo%=block%!8=1
 2473CASE menuhandle% OF
 2474  WHEN menu%(0):
 2475  CASE choice$(1) OF
 2476    WHEN "Help":SYS "Wimp_StartTask","<Pbase$Dir>.!Help"
 2477    WHEN "Save choices":PROCsave_choices("<Pbase$Dir>.Resources.Choices")
 2478    WHEN "Default choices":PROCget_choices("<Pbase$Dir>.Resources.Defaults")
 2479    WHEN "Utilities":
 2480    CASE choice$(2) OF
 2481      WHEN "New primary key":
 2482      $KeyTitle%=choice$(2)
 2483      keyfunc$=choice$(2):PROCset_keydata(0)
 2484      PROCshade_key_icons(TRUE)
 2485      IF (present% AND 2)=2 THEN
 2486        PROCselect(keyW%,8):PROCdeselect(keyW%,9)
 2487        PROCicon_bit(22,keyW%,8,TRUE):PROCicon_bit(22,keyW%,9,TRUE)
 2488        ELSE
 2489        PROCselect(keyW%,9):PROCdeselect(keyW%,8)
 2490        PROCicon_bit(22,keyW%,8,FALSE):PROCicon_bit(22,keyW%,9,FALSE)
 2491      ENDIF
 2492      PROCset_height(keyW%,700):PROCset_caret(keyW%,2)
 2493      WHEN "New record format":
 2494      PROCclose_window(reformW%)
 2495      IF FNconfirm(FNmsg(28)) THEN
 2496        reform$="Reformat"
 2497        $RefmTitle%="Change record format"
 2498        PROCset_height(reformW%,220)
 2499      ENDIF
 2500      WHEN "Adjust format":
 2501      PROCadjust_on(TRUE)
 2502      PROCdisplay(key%,-1)
 2503      PROCalter_flags(&17016731,&07006535,&1700653B)
 2504      WHEN "Merge database":
 2505      PROCclose_window(reformW%)
 2506      reform$="Merge"
 2507      $RefmTitle%="Merge database"
 2508      PROCset_height(reformW%,360)
 2509      WHEN "Balance index":
 2510      CASE choice$(3) OF
 2511        WHEN "Automatic":
 2512        IF choice4%=0 THEN
 2513          PROCset_autobalance(TRUE)
 2514          ELSE PROCset_autobalance(NOT FNticked(menu%(21),0))
 2515        ENDIF
 2516        WHEN "Right now":PROCbalance(key%)
 2517      ENDCASE
 2518      WHEN "Print index":
 2519      CASE choice$(3) OF
 2520        WHEN "Complete":
 2521        PROCprint_tree(key%,file%,"ALL")
 2522        WHEN "Totals only":
 2523        PROCprint_tree(key%,file%,"TOTALS")
 2524      ENDCASE
 2525      WHEN "Find duplicates":PROCduplicates(key%,file%)
 2526      WHEN "Warn of duplicates":dup%=NOT dup%:PROCtick(menu%(3),8,dup%)
 2527    ENDCASE
 2528    WHEN "Close database":PROCexit(0)
 2529    WHEN "Abandon database":PROCexit(1)
 2530    WHEN "Quit":quit%=TRUE
 2531  ENDCASE
 2532  WHEN menu%(1):
 2533  CASE choice$(1) OF
 2534    WHEN "CSV options"
 2535    $CSVTitle%=choice$(1)
 2536    PROCicon_bit(22,csvW%,0,TRUE)
 2537    !block%=csvW%:SYS "Wimp_GetWindowState",,block%
 2538    block%!4=oldx%:block%!12=block%!4+390
 2539    block%!8=200:block%!16=block%!8+420:block%!28=-1
 2540    SYS "Wimp_OpenWindow",,block%
 2541    WHEN "Miscellaneous":
 2542    CASE choice$(2) OF
 2543      WHEN "Set passwords":PROCopen_window(passW%)
 2544      WHEN "Edit template":template%=1:PROCdisplay(key%,-1)
 2545      WHEN "Save indices":PROCset_auto(2-choice3%)
 2546    ENDCASE
 2547    WHEN "Current key":
 2548    $KeyTitle%=choice$(1):keyfunc$=choice$(1)
 2549    PROCset_keydata(key%)
 2550    PROCshade_key_icons(FALSE):PROCset_height(keyW%,590)
 2551    WHEN "Print":
 2552    CASE choice$(2) OF
 2553      WHEN "Match":PROCmatch
 2554      WHEN "Show resources":*Resources
 2555      WHEN "Options":PROCopen_window(printW%):PROCset_caret(printW%,16)
 2556      WHEN "Save options":
 2557      $SaveName%=$database%+".PrintRes.PrintOpts"
 2558      savefunc$=choice$(2):PROCsave_click(saveW%,2,4)
 2559      WHEN "Save query":
 2560      $SaveName%=$database%+".PrintRes.Query"
 2561      savefunc$=choice$(2):PROCsave_click(saveW%,2,4)
 2562      WHEN "Save selection":
 2563      $SaveName%=$database%+".PrintRes.Selection"
 2564      savefunc$=choice$(2):PROCsave_click(saveW%,2,4)
 2565      WHEN "Show jobs done":*JobsDone
 2566      WHEN "Clear selection":PROCclear_selection
 2567      WHEN "Select all":PROCselect_all
 2568      OTHERWISE:PROCmatch
 2569    ENDCASE
 2570    WHEN "Validation":
 2571    CASE choice$(2) OF
 2572      WHEN "Create table":PROCopen_window(tableW%):PROCset_caret(tableW%,0)
 2573      WHEN "Display table":
 2574      IF choice3%>=0 THEN
 2575        Tablenumber%=choice3%
 2576        PROCshow_table(Tablenumber%)
 2577      ENDIF
 2578      WHEN "Show table files":*Tables
 2579      WHEN "Validate input":PROCval_on_off
 2580      WHEN "Show relations":relations%=NOT relations%:PROCtick(menu%(2),4,relations%)
 2581    ENDCASE
 2582    WHEN "Show keypad":IF FNselected(passW%,9) THEN PROCopen_window(keypadW%)
 2583    WHEN "Save choices":PROCsave_choices($database%+".Choices")
 2584    WHEN "Undo changes":PROCrestore_rec
 2585    WHEN "Help":SYS "Wimp_StartTask","<Pbase$Dir>.!Help"
 2586    OTHERWISE:
 2587    CASE choice$(2) OF
 2588      WHEN "Index field":
 2589      $KeyTitle%=choice$(2):keyfunc$=choice$(2)
 2590      PROCdeselect(keyW%,20):PROCshade_key_icons(TRUE)
 2591      PROCset_height(keyW%,590):PROCset_caret(keyW%,2)
 2592      WHEN "Analyse index":PROCanalyse(FNis_a_key(Fieldnumber%))
 2593      WHEN "Analyse months":PROCanalyse(-1)
 2594      WHEN "Link to table":PROCopen_window(linkW%)
 2595      WHEN "Start editing":
 2596      starthere%=field%(Fieldnumber%)
 2597      IF Access% THEN PROCset_caret(mainW%,starthere%)
 2598      WHEN "Clear contents":PROCdelete_blob(Fieldnumber%,object$,mainW%,field%(Fieldnumber%))
 2599      IF chartype%(Fieldnumber%)=40 THEN
 2600        PROCshow_picture(Fieldnumber%):PROCredraw_icon(mainW%,field%(Fieldnumber%))
 2601      ENDIF
 2602      WHEN "Warn of delete":delwarn%=NOT delwarn%
 2603      PROCtick(menu%(10),7,delwarn%)
 2604      WHEN "Undo changes":PROCrestore(Fieldnumber%,"",-1)
 2605    ENDCASE
 2606  ENDCASE
 2607  WHEN menu%(9):
 2608  CASE choice$(1) OF
 2609    WHEN "Design field":PROCopen_window(createW%):PROCset_caret(createW%,4)
 2610    WHEN "Save form file":
 2611    $SaveName%=$database%+".Form"
 2612    savefunc$=choice$(1):PROCsave_click(saveW%,2,4)
 2613    WHEN "Default database":
 2614    PROCsave_form($database%+".Form")
 2615    PROCget_it_in($database%)
 2616    IF FNfirst_field>0 THEN
 2617      PROCdefault_key
 2618      PROCdefaults($database%,100,0)
 2619      ELSE PROCsofterror("",35)
 2620    ENDIF
 2621    WHEN "Primary key":
 2622    $KeyTitle%=choice$(1)
 2623    keyfunc$=choice$(1)
 2624    case%(0)=FALSE:PROCset_keydata(0)
 2625    PROCdeselect(keyW%,20):PROCshade_key_icons(TRUE):
 2626    PROCset_height(keyW%,590):PROCset_caret(keyW%,2)
 2627    WHEN "Quit design":
 2628    PROCadjust_on(FALSE)
 2629    PROCsave_form($database%+".Form")
 2630    PROCget_it_in($database%)
 2631  ENDCASE
 2632  WHEN menu%(17):
 2633  T%=FNtable_number($menu%(17))
 2634  CASE choice$(1) OF
 2635    WHEN "Save":
 2636    $SaveName%=$database%+".ValTables."+table$(T%)
 2637    savefunc$="Save table":PROCsave_click(saveW%,2,4)
 2638    WHEN "Clear":PROCclear_table(T%)
 2639    WHEN "Print":PROCprint_table(T%)
 2640    WHEN "Sort":PROCsort_table(T%)
 2641    WHEN "Undo all":PROCrestore_table(T%,tablen%)
 2642    WHEN "Undo change":PROCrestore_tabfield
 2643  ENDCASE
 2644  WHEN menu%(18):
 2645  CASE choice$(1) OF
 2646    WHEN "Save as text":
 2647    $SaveName%=$database%+".PrintJobs.List"
 2648    savefunc$=choice$(1):PROCsave_click(saveW%,2,4)
 2649    WHEN "Sort":PROCsort_list
 2650    WHEN "Scrap":PROClose_list
 2651  ENDCASE
 2652  WHEN menu%(15):
 2653  CASE choice$(1) OF
 2654    WHEN "Comma":sep$=","
 2655    WHEN "TAB":sep$=CHR$(9)
 2656    WHEN "CR":sep$=CHR$(13)
 2657    WHEN "LF":sep$=CHR$(10)
 2658    OTHERWISE sep$=$Delim%
 2659  ENDCASE
 2660  PROCtick_one(menuhandle%,0,3,choice1%)
 2661  $FNtext(csvW%,14)=choice$(1)
 2662  PROCredraw_icon(csvW%,14)
 2663  WHEN menu%(20):
 2664  CASE choice$(1) OF
 2665    WHEN "CR":term$=CHR$(13)
 2666    WHEN "LF":term$=CHR$(10)
 2667    WHEN "CR LF":term$=CHR$(13)+CHR$(10)
 2668    WHEN "LF CR":term$=CHR$(10)+CHR$(13)
 2669    WHEN "CR CR":term$=CHR$(13)+CHR$(13)
 2670    WHEN "LF LF":term$=CHR$(10)+CHR$(10)
 2671    OTHERWISE:term$=$Termin%
 2672  ENDCASE
 2673  PROCtick_one(menuhandle%,0,5,choice1%)
 2674  $FNtext(csvW%,15)=choice$(1)
 2675  PROCredraw_icon(csvW%,15)
 2676  WHEN menu%(8),menu%(11),menu%(14),menu%(16),menu%(19):
 2677  fieldtype%=firsttype%+choice1%
 2678  PROCtick_one(menuhandle%,0,lasttype%-firsttype%,choice1%)
 2679  PROCupdate_box
 2680  WHEN menu%(5):
 2681  Tablenumber%=choice1%
 2682  $Tablename%=table$(Tablenumber%)
 2683  PROCtick_one(menuhandle%,0,LastTable%,choice1%)
 2684  PROCredraw_icon(linkW%,0)
 2685  WHEN fieldmenu%:
 2686  CASE fieldfunc$ OF
 2687    WHEN "match":
 2688    Match_tag%=choice1%+1
 2689    $FNtext(matchW%,3)=Tag$(Match_tag%):PROCredraw_icon(matchW%,3)
 2690    PROCtick_one(fieldmenu%,0,fields%-1,choice1%)
 2691    WHEN "first":
 2692    IF keyfunc$<>"Current key" THEN
 2693      IF FNticked(fieldmenu%,choice1%) THEN
 2694        Keyfld0%=0:$F1dkey%="":PROCredraw_icon(keyW%,0)
 2695        PROCtick(fieldmenu%,choice1%,FALSE)
 2696        ELSE
 2697        Keyfld0%=choice1%+1
 2698        $F1dkey%=Tag$(Keyfld0%):PROCredraw_icon(keyW%,0)
 2699        PROCtick_one(fieldmenu%,0,fields%-1,choice1%)
 2700      ENDIF
 2701    ENDIF
 2702    WHEN "second":
 2703    IF keyfunc$<>"Current key" THEN
 2704      IF FNticked(fieldmenu%,choice1%) THEN
 2705        Keyfld1%=0:$F2dkey%="":PROCredraw_icon(keyW%,1)
 2706        PROCtick(fieldmenu%,choice1%,FALSE)
 2707        ELSE
 2708        Keyfld1%=choice1%+1
 2709        $F2dkey%=Tag$(Keyfld1%):PROCredraw_icon(keyW%,1)
 2710        PROCtick_one(fieldmenu%,0,fields%-1,choice1%)
 2711      ENDIF
 2712    ENDIF
 2713  ENDCASE
 2714  OTHERWISE:PROCspecial_select
 2715ENDCASE
 2716IF NOT quit% THEN
 2717  IF redo% THEN PROCshow_menu(menuhandle%,menux%,menuy%)
 2718ENDIF
 2719ENDPROC
 2720:
 2721DEF PROCinit_drag(wi%,ic%,dragtype%)
 2722PROCgetscreensize(W%,H%)
 2723!block%=wi%
 2724SYS "Wimp_GetWindowState",,block%
 2725ysize%=block%!16-block%!8
 2726x%=block%!4-block%!20
 2727y%=block%!16-block%!24
 2728block%!4=ic%
 2729SYS "Wimp_GetIconState",,block%
 2730block%!8+=x%:minx%=block%!8
 2731block%!12+=y%:miny%=block%!12
 2732block%!16+=x%:maxx%=block%!16
 2733block%!20+=y%:maxy%=block%!20
 2734IF dragtype%=6 THEN
 2735  block%!24=2*minx%-maxx%:block%!36=2*maxy%-miny%
 2736  ELSE block%!24=0:block%!36=H%
 2737ENDIF
 2738block%!28=0
 2739block%!32=W%
 2740!block%=0
 2741block%!4=dragtype%
 2742dragging%=TRUE
 2743CASE wi% OF
 2744  WHEN saveW%,savesubW%:
 2745  IF RISCOS3 THEN
 2746    IF wi%=saveW% THEN sprite$=MID$($SaveSprite%,2,8) ELSE sprite$=MID$($SubSprite%,2,8)
 2747    SYS "DragASprite_Start",&C5,1,sprite$,block%+8
 2748    ELSE SYS "Wimp_DragBox",,block%
 2749  ENDIF
 2750  OTHERWISE:
 2751  SYS "Wimp_DragBox",,block%
 2752ENDCASE
 2753IF wi%=mainW% THEN ficon%=ic%
 2754ENDPROC
 2755:
 2756DEF PROCend_drag(start%,end%)
 2757LOCAL wi%,ic%
 2758dragging%=FALSE
 2759datasize%=end%-start%
 2760SYS "Wimp_GetPointerInfo",,block%
 2761wi%=block%!12:ic%=block%!16
 2762block%!32=block%!4:block%!28=block%!0:block%!24=ic%
 2763block%!20=wi%:block%!16=1
 2764block%!12=0:block%!36=datasize%:block%!40=Type%
 2765IF design% THEN
 2766  PROCadjust_field(dragbutt%)
 2767  ELSE
 2768  IF Filename$<>"" AND wi%<>mainW% THEN
 2769    $(block%+44)=FNleaf(Filename$)
 2770    !block%=60
 2771    SYS "Wimp_SendMessage",17,block%,wi%,ic%
 2772    ramptr%=start%
 2773    SYS "Wimp_CreateMenu",,-1
 2774  ENDIF
 2775ENDIF
 2776ENDPROC
 2777:
 2778DEF FNencrypt(S$,Z%)
 2779LOCAL I%,R%
 2780R%=RND(-12817)
 2781FOR I%=1 TO LEN(S$)
 2782  R%=RND(58)-1
 2783  IF NOT Z% THEN R%=58-R%
 2784  MID$(S$,I%,1)=CHR$((ASC(MID$(S$,I%,1))-65+R%) MOD 58+65)
 2785NEXT I%
 2786=S$
 2787:
 2788DEF FNleaf(s$)
 2789s2$=""
 2790WHILE RIGHT$(s$)<>"." AND s$<>""
 2791  s2$=RIGHT$(s$)+s2$
 2792  s$=LEFT$(s$)
 2793ENDWHILE
 2794dbasepath$=LEFT$(s$)
 2795=s2$
 2796:
 2797REM Message handling ----------------------------------------------------
 2798:
 2799DEF PROCnot_acknowledged
 2800CASE block%!16 OF
 2801  WHEN 5:
 2802  REM DataOpen failed, so run file
 2803  IF block%!8=Impref% THEN Imp_wait%=TRUE
 2804  SYS "Wimp_StartTask",$(block%+44)
 2805  WHEN 7:
 2806  REM RAMTransmit failed
 2807  IF NOT merging% THEN ERROR moan_err%,FNmsg(39)
 2808  WHEN 3:
 2809  REM DataLoad failed, so delete scrapfile (if ours)
 2810  IF block%!8=myref% THEN SYS "OS_File",6,block+44
 2811  ERROR moan_err%,FNmsg(39)
 2812  WHEN &80142:ERROR moan_err%,FNmsg(90)
 2813ENDCASE
 2814ENDPROC
 2815:
 2816DEF PROCmessage
 2817LOCAL task%,ref%,myref%
 2818task%=block%!4:ref%=block%!8
 2819CASE block%!16 OF
 2820  WHEN 0:quit%=TRUE
 2821  WHEN 1:REM ### DataSave ###
 2822  IF task%<>mytask% AND present%=7 THEN
 2823    datasize%=block%!36
 2824    CASE block%!40 OF
 2825      WHEN &fff,&ff9,&aff,&dfe:
 2826      myref%=ref%
 2827      block%!0=256:block%!12=ref%:block%!16=2:block%!36=-1
 2828      $(block%+44)="<Wimp$Scrap>"+CHR$(0)
 2829      SYS "Wimp_SendMessage",17,block%,task%
 2830    ENDCASE
 2831  ENDIF
 2832  WHEN 2:REM ### DataSaveAck ###
 2833  PROCsave(FNgetstr(block%+44),Type%,Start%,End%)
 2834  myref%=ref%:block%!12=ref%:block%!16=3:!block%=256
 2835  SYS "Wimp_SendMessage",18,block%,task%
 2836  SYS "Wimp_CreateMenu",,-1
 2837  WHEN 3:REM ### DataLoad ###
 2838  myref%=block%!12:f$=FNgetstr(block%+44)
 2839  PROCget_it_in(f$)
 2840  IF myref%<>0 THEN SYS "OS_CLI","Remove <Wimp$Scrap>"
 2841  WHEN 4:REM ### DataLoadAck ###
 2842  IF block%!12=Impref% AND NOT merging% THEN PROCready_to_merge
 2843  WHEN 5:REM ### DataOpen - response to file double click ###
 2844  CASE block%!40 OF
 2845    WHEN &7f1,&7f3,&7f4,&7f5:
 2846    IF present%=7 THEN
 2847      block%!0=20:block%!12=ref%:block%!16=4
 2848      SYS "Wimp_SendMessage",17,block%
 2849      PROCget_it_in(FNgetstr(block%+44))
 2850    ENDIF
 2851    WHEN &2000:
 2852    IF kill% OR present%=0 THEN
 2853      f$=FNgetstr(block%+44)+".Indices"
 2854      SYS "OS_File",5,f$ TO d%
 2855      IF d%=2 THEN
 2856        block%!0=20:block%!12=ref%:block%!16=4
 2857        SYS "Wimp_SendMessage",17,block%
 2858        PROCget_it_in(FNgetstr(block%+44))
 2859      ENDIF
 2860    ENDIF
 2861  ENDCASE
 2862  WHEN 6:IF savefunc$<>"Save list" AND savefunc$<>"Export CSV" THEN PROCram_transmit
 2863  WHEN &502:PROChelp_message(block%!32,block%!36)
 2864  WHEN &400C2:PROCgetscreensize(ScreenWidth%,ScreenHeight%)
 2865  WHEN &400C0:PROCmessage_menu_select
 2866  WHEN &80140:REM ### PrintFile - ignore ###
 2867ENDCASE
 2868ENDPROC
 2869:
 2870DEF PROCram_transmit
 2871IF datasize%>block%!24 THEN tosend%=block%!24 ELSE tosend%=datasize%
 2872SYS "Wimp_TransferBlock",mytask%,ramptr%,block%!4,block%!20,tosend%
 2873block%!24=tosend%
 2874datasize%-=tosend%
 2875ramptr%+=tosend%
 2876block%!12=block%!8
 2877block%!16=7
 2878SYS "Wimp_SendMessage",18+(datasize%=0),block%,block%!4
 2879ENDPROC
 2880:
 2881DEF PROCmessage_menu_select
 2882LOCAL P%,Q%,I%
 2883keyfunc$="":savefunc$=""
 2884handle%=block%!20:xmin%=block%!24:ymax%=block%!28
 2885P%=1
 2886SYS "Wimp_DecodeMenu",,menuhandle%,block%+32,choices%
 2887FOR I%=1 TO 4
 2888  Q%=INSTR($choices%,".",P%+1)
 2889  choice$(I%)=MID$($choices%,P%,Q%-P%)
 2890  P%=Q%+1
 2891NEXT I%
 2892CASE menuhandle% OF
 2893  WHEN menu%(0):
 2894  CASE choice$(1) OF
 2895    WHEN "New database":
 2896    $SaveName%="!DataBase"
 2897    $SaveSprite%="snew_appl;Pptr_hand,12,8;B3"
 2898    savefunc$=choice$(1)
 2899  ENDCASE
 2900  WHEN menu%(1):
 2901  CASE choice$(1) OF
 2902    WHEN "Information":PROCcount(key%,RU%):PROCupdate_stats
 2903    WHEN "Print":
 2904    CASE choice$(2) OF
 2905      WHEN "Save options":
 2906      $SaveName%=$database%+".PrintRes.PrintOpts"
 2907      $SaveSprite%="sfile_7f5;Pptr_hand,12,8;B3"
 2908      WHEN "Save query":
 2909      $SaveName%=$database%+".PrintRes.Query"
 2910      $SaveSprite%="sfile_7f4;Pptr_hand,12,8;B3"
 2911      WHEN "Save selection":
 2912      $SaveName%=$database%+".PrintRes.Selection"
 2913      $SaveSprite%="sfile_7f3;Pptr_hand,12,8;B3"
 2914    ENDCASE
 2915    savefunc$=choice$(2)
 2916    WHEN "Miscellaneous":
 2917    CASE choice$(2) OF
 2918      WHEN "Batch delete":
 2919      PROCselect(moveW%,2):PROCdeselect(moveW%,1):PROCdeselect(moveW%,0)
 2920      IF NOT common% THEN $FNtext(moveW%,7)=""
 2921      WHEN "Colours":
 2922      ncol%()=fcol%()
 2923      FOR I%=0 TO 6
 2924        PROCset_icon_cols(colW%,I%,ncol%(I%))
 2925      NEXT I%
 2926      !block%=colW%:SYS "Wimp_GetWindowState",,block%
 2927      width%=block%!12-block%!4
 2928      block%!4=xmin%:block%!12=xmin%+width%
 2929      block%!8=ymax%-height%:block%!16=ymax%
 2930    ENDCASE
 2931    WHEN "Export subset":
 2932    export%=TRUE:$SubTitle%="Export subset":savefunc$=choice$(1)
 2933    $SubName%=$database%+".PrintJobs.!Subset":IF NOT common% THEN $FNtext(savesubW%,0)=""
 2934    $SubSprite%="snew_appl;Pptr_hand,12,8;B3"
 2935    WHEN "Export CSV":
 2936    $SubTitle%="Export CSV file":savefunc$=choice$(1)
 2937    IF sep$="," THEN t$="dfe":f$="CSV" ELSE t$="fff":f$="Sep"
 2938    $SubName%=$database%+".PrintJobs."+f$+"file":IF NOT common% THEN $FNtext(savesubW%,0)=""
 2939    $SubSprite%="sfile_"+t$+";Pptr_hand,12,8;B3"
 2940  ENDCASE
 2941  WHEN menu%(9):
 2942  CASE choice$(1) OF
 2943    WHEN "Save form file":
 2944    $SaveName%=$database%+".Form"
 2945    $SaveSprite%="sfile_7f2;Pptr_hand,12,8;B3"
 2946    savefunc$=choice$(1)
 2947  ENDCASE
 2948  WHEN menu%(17):
 2949  CASE choice$(1) OF
 2950    WHEN "Save":
 2951    T%=FNtable_number($menuhandle%)
 2952    $SaveName%=$database%+".ValTables."+table$(T%)
 2953    $SaveSprite%="sfile_7f1;Pptr_hand,12,8;B3"
 2954    savefunc$="Save table"
 2955  ENDCASE
 2956  WHEN menu%(18):
 2957  CASE choice$(1) OF
 2958    WHEN "Save as text":
 2959    $SaveName%=$database%+".PrintJobs.List"
 2960    $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
 2961  ENDCASE
 2962  savefunc$=choice$(1)
 2963ENDCASE
 2964SYS "Wimp_CreateSubMenu",,handle%,xmin%,ymax%
 2965ENDPROC
 2966:
 2967DEF PROChelp_message(wi%,ic%)
 2968CASE wi% OF
 2969  WHEN -2:PROCsend_help(75)
 2970  WHEN infoW%:PROCsend_help(76)
 2971  WHEN miscW%:PROCsend_help(77)
 2972  WHEN mainW%:
 2973  IF NOT design% AND ic%>=0 THEN
 2974    F%=(ic%+1) DIV 2
 2975    CASE chartype%(F%) OF
 2976      WHEN 0,1,2,3,4,5,6,7,8,36,39,41,42,43,44,45:PROCsend_help(78)
 2977      OTHERWISE:SYS "Interface_SendHelp",,block%
 2978    ENDCASE
 2979  ENDIF
 2980  WHEN pselectW%:PROCsend_help(79)
 2981  WHEN relateW%:PROCsend_help(80)
 2982  WHEN listW%:PROCsend_help(81)
 2983  WHEN datadicW%:PROCsend_help(82)
 2984  WHEN saveW%:PROCsend_help(83)
 2985  WHEN savesubW%:PROCsend_help(84)
 2986  WHEN accessW%:PROCsend_help(85)
 2987  WHEN mergeW%:PROCsend_help(86)
 2988  OTHERWISE:SYS "Interface_SendHelp",,block%
 2989ENDCASE
 2990ENDPROC
 2991:
 2992DEF PROCsend_help(M%)
 2993!block%=256
 2994block%!12=ref%
 2995block%!16=&503
 2996$(block%+20)=FNmsg(M%)
 2997SYS "Wimp_SendMessage",17,block%,block%!4
 2998ENDPROC
 2999:
 3000:
 3001REM File saving --------------------------------------------------------
 3002:
 3003DEF PROCsave_all_tables
 3004LOCAL T%
 3005SYS "Hourglass_On"
 3006WHILE T%<=LastTable%
 3007  f$=$database%+".ValTables."+table$(T%)
 3008  $TabTitle%=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3009  Start%=!tabanchor%(T%):End%=Start%+160+Rows%*Rec%
 3010  PROCsave(f$,&7f1,Start%,End%)
 3011  T%+=1
 3012  SYS "Hourglass_Percentage",T%*100 DIV (LastTable%+1)
 3013ENDWHILE
 3014SYS "Hourglass_Off"
 3015ENDPROC
 3016:
 3017DEF PROCsave_options
 3018LOCAL F,I%,ic%
 3019F=OPENOUT(f$)
 3020RESTORE +0
 3021FOR I%=1 TO 13
 3022  READ ic%
 3023  PRINT#F,FNselected(printW%,ic%)
 3024NEXT I%
 3025FOR I%=1 TO 9
 3026  READ ic%
 3027  PRINT#F,$FNtext(printW%,ic%)
 3028NEXT I%
 3029FOR I%=1 TO 7
 3030  READ ic%
 3031  PRINT#F,FNselected(printW%,ic%)
 3032NEXT I%
 3033FOR I%=1 TO 3
 3034  READ ic%
 3035  PRINT#F,FNselected(labelW%,ic%)
 3036NEXT I%
 3037FOR I%=1 TO 4
 3038  READ ic%
 3039  PRINT#F,$FNtext(labelW%,ic%)
 3040NEXT I%
 3041FOR I%=1 TO 3
 3042  READ ic%
 3043  PRINT#F,FNselected(labelW%,ic%)
 3044NEXT I%
 3045PROCclose_file(F)
 3046SYS "OS_File",18,f$,&7f5
 3047:
 3048DATA 1,2,4,6,7,8,23,24,25,26,38,39,41:REM Radio buttons
 3049DATA 15,16,17,18,30,32,34,43,45:REM Writable fields
 3050DATA 10,11,12,19,29,40,42:REM Option switches
 3051REM In Label Definition window
 3052DATA 0,1,2:REM Radio buttons
 3053DATA 4,6,10,12:REM Writeable fields
 3054DATA 11,13,16:REM Option switches
 3055:
 3056ENDPROC
 3057:
 3058DEF PROCsave(f$,ft%,start%,end%)
 3059CASE ft% OF
 3060  WHEN 0:
 3061  leaf$=FNleaf(f$)
 3062  IF LEFT$(leaf$,1)<>"!" THEN leaf$="!"+LEFT$(leaf$,9):f$=dbasepath$+"."+leaf$
 3063  SYS "OS_File",8,f$
 3064  SYS "OS_File",8,f$+".Indices"
 3065  SYS "OS_File",8,f$+".ValTables"
 3066  SYS "OS_File",8,f$+".PrintRes"
 3067  SYS "OS_File",8,f$+".PrintJobs"
 3068  SYS "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Run "+f$+".!Run ~C~V"
 3069  SYS "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Boot "+f$+".!Boot ~C~V"
 3070  SYS "OS_CLI","Copy <PBase$Dir>.Resources.chkspr "+f$+".chkspr ~C~V"
 3071  SYS "OS_CLI","Copy <PBase$Dir>.Resources.Colours "+f$+".Colours ~C~V"
 3072  PROCcopy_database_spritefile(f$,FNleaf(f$))
 3073  CASE TRUE OF
 3074    WHEN export%:PROCexport_subset(f$)
 3075    WHEN csvconv%:
 3076    IF !formanchor%=0 THEN
 3077      PROCextend_named_sliding_block(formanchor%,0)
 3078      Fptr%=!formanchor%
 3079      fields%=0:Fieldnumber%=0
 3080      fields%=FNget_form(Fptr%)
 3081    ENDIF
 3082    OTHERWISE:
 3083    PROClit(menu%(0),1,FALSE)
 3084    PROCget_it_in(f$)
 3085    PROCopen_window(mainW%)
 3086    IF !formanchor%=0 THEN
 3087      PROCextend_named_sliding_block(formanchor%,0)
 3088      Fptr%=!formanchor%
 3089      fields%=0:Fieldnumber%=0
 3090    ENDIF
 3091  ENDCASE
 3092  WHEN 1:
 3093  SYS "OS_CLI","CDir "+f$:
 3094  logpath$=f$
 3095  PROCclose_window(saveW%)
 3096  WHEN &7f2:PROCsave_form(f$):PROCget_it_in($database%)
 3097  WHEN &7f5:PROCsave_options
 3098  WHEN &dfe:PROCwrite_csv(f$)
 3099  OTHERWISE:
 3100  CASE TRUE OF
 3101    WHEN startlog%:
 3102    PROCclose_log
 3103    logpath$=f$
 3104    loghandle%=OPENOUT(logpath$)
 3105    BPUT#loghandle%,$database%
 3106    BPUT#loghandle%,"Password level used: "+STR$(pw%)
 3107    BPUT#loghandle%,"Log started "+TIME$
 3108    BPUT#loghandle%,STRING$(36,"=")
 3109    startlog%=FALSE
 3110    WHEN savetofile%:
 3111    texthandle%=OPENOUT(f$)
 3112    PROCdo_it(Search$,displayed%)
 3113    OTHERWISE:
 3114    SYS "OS_File",10,f$,ft%,,start%,end%
 3115    PROCscrap_sliding_block(saveanchor%)
 3116  ENDCASE
 3117ENDCASE
 3118warn%=TRUE
 3119ENDPROC
 3120:
 3121DEF FNgetstr(p%)
 3122LOCAL p$
 3123WHILE ?p%>31
 3124  p$+=CHR$(?p%)
 3125  p%+=1
 3126ENDWHILE
 3127=p$
 3128:
 3129REM Validation tables ----------------------------------------------------
 3130:
 3131DEF PROCcreate_table
 3132LOCAL I%,title$,Rec%
 3133CASE b% AND %111 OF
 3134  WHEN 4:
 3135  CASE ic% OF
 3136    WHEN 26:
 3137    IF LastTable%=MaxTabs% THEN
 3138      PROCsofterror(STR$(MaxTabs%+1),32)
 3139      ELSE
 3140      LastTable%+=1
 3141      Tablenumber%=LastTable%
 3142      name$=$FNtext(tableW%,0)
 3143      table$(LastTable%)=name$
 3144      Rows%=VAL($FNtext(tableW%,1))
 3145      TabFields%=VAL($FNtext(tableW%,2))
 3146      FOR I%=0 TO TabFields%
 3147        tabfieldlen%(I%)=VAL($FNtext(tableW%,I%*2+4))
 3148        Rec%+=tabfieldlen%(I%)+1
 3149      NEXT I%
 3150      tablen%=160+Rows%*Rec%
 3151      PROCcreate_named_sliding_block(tabanchor%(LastTable%),(tablen%+3) AND NOT 3)
 3152      tabptr%=!tabanchor%(LastTable%)
 3153      $tabptr%=STR$(Rows%):tabptr%+=LEN($tabptr%)+1
 3154      $tabptr%=STR$(TabFields%):tabptr%+=LEN($tabptr%)+1
 3155      FOR I%=0 TO TabFields%
 3156        $tabptr%=STR$(tabfieldlen%(I%)):tabptr%+=LEN($tabptr%)+1
 3157        head$=$FNtext(tableW%,I%*2+3)
 3158        title$+=head$+STRING$(tabfieldlen%(I%)-LEN(head$)+2," ")
 3159      NEXT I%
 3160      $tabptr%=title$:tabptr%=!tabanchor%(LastTable%)+160
 3161      FOR row%=1 TO Rows%
 3162        FOR I%=0 TO TabFields%
 3163          $tabptr%="":tabptr%+=tabfieldlen%(I%)+1
 3164        NEXT I%
 3165      NEXT row%
 3166      PROCshow_table(LastTable%)
 3167      Tablenumber%=LastTable%
 3168      TabsLoaded$+=","+name$
 3169      IF menu%(5)>0 THEN menu_ptr%=menu%(5)
 3170      menu%(5)=FNcreate_menu(menu_ptr%,140,TabsLoaded$)
 3171      ptr%=menu%(2)+52:ptr%!4=menu%(5):PROClit(menu%(2),1,TRUE)
 3172    ENDIF
 3173    PROCclose_window(tableW%)
 3174  ENDCASE
 3175ENDCASE
 3176ENDPROC
 3177:
 3178DEF PROCclear_table(T%)
 3179IF FNconfirm(FNmsg(47))=FALSE THEN ENDPROC
 3180LOCAL R%,F%,ind%,Rows%,TabFields%,start%,Rec%
 3181T$=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3182start%=!tabanchor%(T%)+160-Rec%
 3183FOR R%=1 TO Rows%
 3184  ind%=start%+R%*Rec%
 3185  FOR F%=0 TO TabFields%
 3186    $ind%="":ind%+=tabfieldlen%(F%)+1
 3187  NEXT F%
 3188NEXT R%
 3189PROCshow_table(T%)
 3190ENDPROC
 3191:
 3192DEF PROCshow_table(T%)
 3193LOCAL ind%,start%,iflags%,I%,pos%,p$
 3194IF T%<0 THEN ENDPROC
 3195PROCdelete_icons(datadicW%,0)
 3196name$=table$(T%)
 3197$Tablename%=name$
 3198$menu%(17)=name$
 3199SYS "OS_File",5,$database%+".ValTables."+name$ TO d%,,,,tablen%
 3200PROCextend_named_sliding_block(undoanchor%,tablen%+1)
 3201SYS "Wimp_TransferBlock",mytask%,!tabanchor%(T%),mytask%,!undoanchor%,tablen%+1
 3202$TabTitle%=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3203ind%=!tabanchor%(T%)+160
 3204iflags%=&07003531
 3205SYS "Hourglass_On"
 3206FOR row%=1 TO Rows%
 3207  pos%=80
 3208  FOR I%=0 TO TabFields%
 3209    R%=FNcreate_icon(datadicW%,pos%,-row%*36,(tabfieldlen%(I%)+1)*16,32,iflags%,"",ind%,writep%,tabfieldlen%(I%)+1)
 3210    pos%+=(tabfieldlen%(I%)+2)*16
 3211    ind%+=tabfieldlen%(I%)+1
 3212  NEXT I%
 3213  SYS "Hourglass_Percentage",row%*100 DIV Rows%
 3214NEXT row%
 3215SYS "Hourglass_Off"
 3216p$=printrel$(T%)
 3217IF p$<>"" THEN
 3218  FOR I%=1 TO LEN(p$)
 3219    PROCselect(datadicW%,VAL(MID$(p$,I%,1)))
 3220  NEXT I%
 3221ENDIF
 3222!block%=0:block%!4=-Rows%*36-4
 3223block%!8=(Rec%+10)*16:block%!12=0
 3224SYS "Wimp_SetExtent",datadicW%,block%
 3225!block%=datadicW%
 3226SYS "Wimp_GetWindowState",,block%
 3227block%!12=block%!4+(Rec%+10)*16
 3228IF Rows%<20 THEN
 3229  block%!16=block%!8+Rows%*36+4
 3230  ELSE
 3231  block%!16=block%!8+36*20+4
 3232ENDIF
 3233SYS "Wimp_OpenWindow",,block%
 3234PROCredraw(datadicW%)
 3235IF Access% THEN PROCset_caret(datadicW%,0)
 3236ENDPROC
 3237:
 3238DEF PROCrestore_table(T%,L%)
 3239SYS "Wimp_TransferBlock",mytask%,!undoanchor%,mytask%,!tabanchor%(T%),L%+1
 3240PROCredraw(datadicW%)
 3241ENDPROC
 3242:
 3243DEF PROCrestore_tabfield
 3244LOCAL source%,dest%
 3245SYS "Wimp_GetCaretPosition",,block%:wi%=!block%:ic%=block%!4
 3246IF wi%=datadicW% THEN
 3247  dest%=FNtext(datadicW%,ic%)
 3248  source%=!undoanchor%+dest%-!tabanchor%(Tablenumber%)
 3249  $dest%=$source%
 3250  PROCredraw_icon(datadicW%,ic%)
 3251ENDIF
 3252ENDPROC
 3253:
 3254DEF PROCsort_table(T%)
 3255title$=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3256ind%=!tabanchor%(T%)+160-Rec%
 3257FOR row%=0 TO Rows%-1
 3258  ind%+=Rec%
 3259  block%!(row%*4)=ind%
 3260  IF $ind%="" THEN $ind%="~"
 3261NEXT row%
 3262SYS "OS_HeapSort",Rows%,(block% OR (1<<30) OR (1<<31)),4,,!tabanchor%(T%)+160,Rec%
 3263ind%=!tabanchor%(T%)+160-Rec%
 3264FOR row%=0 TO Rows%-1
 3265  ind%+=Rec%
 3266  IF $ind%="~" THEN $ind%=""
 3267NEXT row%
 3268PROCredraw(datadicW%)
 3269ENDPROC
 3270:
 3271DEF PROCprint_table(T%)
 3272IF printing% OR indexing% THEN ENDPROC
 3273LOCAL start%,ptr%,Line$,title$,rowsused%
 3274PROCread_print_options
 3275format$="horiz"
 3276title$=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3277LenLine%=Lmargin%+LEN(title$)+2
 3278Heading$=margin$+title$+STRING$(Rec%-LEN(title$)," ")
 3279PROCextend_named_sliding_block(lineanchor%,LenLine%+4)
 3280PROCextend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
 3281PROCheap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
 3282Title$="Validation table"
 3283Title1$=table$(T%)
 3284Title2$=""
 3285reportdest$="Window"
 3286PROCclose_window(datadicW%)
 3287Count%=0
 3288PROClist_head(0)
 3289SYS "Hourglass_On"
 3290FOR I%=1 TO Rows%
 3291  start%=!tabanchor%(T%)+160-Rec%
 3292  Line$=margin$
 3293  ptr%=start%+I%*Rec%
 3294  FOR J%=0 TO TabFields%
 3295    IF $ptr%<>"" THEN Line$+=$ptr%+STRING$(tabfieldlen%(J%)-LEN($ptr%)+2," ")
 3296    ptr%+=tabfieldlen%(J%)+1
 3297  NEXT J%
 3298  IF Line$<>margin$ THEN
 3299    rowsused%+=1
 3300    $(!lineanchor%)=Line$:PROClist_line(-1,lineanchor%,LEN(Line$),32)
 3301  ENDIF
 3302  SYS "Hourglass_Percentage",I%*100 DIV Rows%
 3303NEXT I%
 3304SYS "Hourglass_Off"
 3305PROCrule_off(45)
 3306S$=margin$+STR$(Rows%)+" rows"
 3307$(!lineanchor%)=S$:PROClist_line(-1,lineanchor%,LEN(S$),32)
 3308S$=margin$+STR$(rowsused%)+" used"
 3309$(!lineanchor%)=S$:PROClist_line(-1,lineanchor%,LEN(S$),32)
 3310PROCrule_off(45)
 3311PROCscreen_list
 3312pitch$=FNpitch("0")
 3313PROClit(menu%(18),1,FALSE)
 3314ENDPROC
 3315:
 3316DEF FNtable_number(N$)
 3317LOCAL T%,P%
 3318IF N$="" THEN=-1
 3319T%=-1
 3320REPEAT
 3321  T%+=1
 3322UNTIL table$(T%)=N$ OR T%>LastTable%
 3323IF T%>LastTable% THEN=-1 ELSE=T%
 3324:
 3325DEF FNtable_info(T%,RETURN R%,RETURN F%,RETURN RL%,L%())
 3326LOCAL P%,I%
 3327P%=!tabanchor%(T%)
 3328R%=VAL($P%):P%+=LEN($P%)+1
 3329F%=VAL($P%):P%+=LEN($P%)+1
 3330RL%=0
 3331FOR I%=0 TO F%
 3332  L%(I%)=VAL($P%):P%+=LEN($P%)+1
 3333  RL%+=L%(I%)+1
 3334NEXT I%
 3335=$P%
 3336:
 3337DEF FNtable_field(F%,L%())
 3338LOCAL I%,P%
 3339WHILE I%<F%
 3340  P%+=L%(I%)+1
 3341  I%+=1
 3342ENDWHILE
 3343=P%
 3344:
 3345DEF PROCdrag_table(f$)
 3346LOCAL pos%,name$,d%
 3347Tablenumber%=-1
 3348name$=FNleaf(f$)
 3349IF INSTR(TabsLoaded$,name$)>0 THEN ENDPROC
 3350SYS "OS_File",5,f$ TO d%,,,,tablen%
 3351IF LastTable%=MaxTabs% THEN
 3352  IF INSTR(extratabs$,name$)=0 THEN extratabs$+=name$+","
 3353  ELSE
 3354  LastTable%+=1
 3355  PROCcreate_named_sliding_block(tabanchor%(LastTable%),(tablen%+3) AND NOT 3)
 3356  SYS "OS_File",255,f$,!tabanchor%(LastTable%)
 3357  table$(LastTable%)=name$
 3358  Tablenumber%=LastTable%
 3359  TabsLoaded$+=","+name$
 3360  IF menu%(5)>0 THEN menu_ptr%=menu%(5)
 3361  menu%(5)=FNcreate_menu(menu_ptr%,140,TabsLoaded$)
 3362  ptr%=menu%(2)+52:ptr%!4=menu%(5):PROClit(menu%(2),1,TRUE)
 3363  ENDIF
 3364ENDIF
 3365ENDPROC
 3366:
 3367DEF PROClink_to_table
 3368LOCAL icon%
 3369CASE b% AND %111 OF
 3370  WHEN 2,4:
 3371  IF ic%=13 THEN
 3372    PROCtick_one(menu%(5),0,LastTable%,Tablenumber%)
 3373    PROCshow_menu(menu%(5),oldx%+32,oldy%)
 3374  ENDIF
 3375ENDCASE
 3376CASE b% AND %111 OF
 3377  WHEN 1,4:
 3378  IF (b% AND %111)=4 THEN z%=1 ELSE z%=-1
 3379  CASE ic% OF
 3380    WHEN 5:PROCtcycle(z%)
 3381    WHEN 6:PROCtcycle(-z%)
 3382    WHEN 7:PROCfcycle(z%,fieldnum%)
 3383    WHEN 8:PROCfcycle(-z%,fieldnum%)
 3384    WHEN 11:PROCfcycle(z%,expand%)
 3385    WHEN 12:PROCfcycle(-z%,expand%)
 3386    WHEN 9:
 3387    FOR icon%=10 TO 12
 3388      PROCicon_bit(22,linkW%,icon%,FNselected(linkW%,9))
 3389    NEXT icon%
 3390    WHEN 3:
 3391    icon%=field%(Fieldnumber%)
 3392    IF FNselected(linkW%,4) AND $Tablename%<>"" THEN
 3393      link$(Fieldnumber%)=$Tablename%+$fieldnum%
 3394      PROCset_icon_cols(mainW%,icon%,fcol%(6))
 3395      IF FNselected(linkW%,9) THEN link$(Fieldnumber%)=$expand%+link$(Fieldnumber%)
 3396      ELSE
 3397      link$(Fieldnumber%)=""
 3398      PROCset_icon_cols(mainW%,icon%,7)
 3399    ENDIF
 3400    link$(0)="LOADED"
 3401    IF (b% AND %111)=4 THEN PROCclose_window(linkW%)
 3402  ENDCASE
 3403ENDCASE
 3404ENDPROC
 3405:
 3406DEF PROCtcycle(z%)
 3407IF LastTable%=-1 THEN ENDPROC
 3408Tablenumber%+=z%
 3409IF Tablenumber%>LastTable% THEN Tablenumber%=0
 3410IF Tablenumber%<0 THEN Tablenumber%=LastTable%
 3411$Tablename%=table$(Tablenumber%)
 3412PROCredraw_icon(linkW%,0)
 3413ENDPROC
 3414:
 3415DEF PROCfcycle(z%,column%)
 3416T$=FNtable_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3417field%=VAL($column%)
 3418field%+=z%
 3419IF field%>TabFields% THEN field%=0
 3420IF field%<0 THEN field%=TabFields%
 3421$column%=STR$(field%)
 3422PROCredraw_icon(linkW%,2)
 3423PROCredraw_icon(linkW%,10)
 3424ENDPROC
 3425:
 3426DEF PROClink_status
 3427LOCAL name$,name1$,field$,expand$,ic%
 3428name$=link$(Fieldnumber%)
 3429IF ASC(name$)<58 AND ASC(name$)<>-1 THEN expand$=LEFT$(name$,1):name$=MID$(name$,2)
 3430field$=RIGHT$(name$):name1$=LEFT$(name$)
 3431IF (name1$<>"" AND INSTR(TabsLoaded$,name1$)>0) THEN
 3432  $Tablename%=name1$:$fieldnum%=field$:$expand%=expand$
 3433  Tablenumber%=FNtable_number(name1$)
 3434  PROCselect(linkW%,4)
 3435  ELSE
 3436  Tablenumber%=0
 3437  $Tablename%=table$(Tablenumber%)
 3438  PROCdeselect(linkW%,4):$fieldnum%="0"
 3439ENDIF
 3440IF expand$<>"" THEN
 3441  PROCselect(linkW%,9):$expand%=expand$
 3442  ELSE PROCdeselect(linkW%,9):$expand%="0"
 3443ENDIF
 3444FOR ic%=10 TO 12
 3445  PROCicon_bit(22,linkW%,ic%,FNselected(linkW%,9))
 3446NEXT ic%
 3447PROCredraw_icon(linkW%,0):PROCredraw_icon(linkW%,2):PROCredraw_icon(linkW%,10)
 3448ENDPROC
 3449:
 3450REM End of Validation table routines ------------------------------------
 3451:
 3452DEF PROCchanges(key%)
 3453LOCAL M$,K%,index%
 3454Search$=FNparse($FNtext(changeW%,3),FNselected(changeW%,5))
 3455New$=$FNtext(changeW%,1)
 3456IF New$="" THEN n$="<null>" ELSE n$=New$
 3457IF New$<>"" AND INSTR("+-*/",LEFT$(New$,1))>0 THEN
 3458  numeric%=TRUE
 3459  ELSE numeric%=FALSE
 3460ENDIF
 3461K%=FNis_a_key(Fieldnumber%)
 3462IF K%=key% THEN PROCsofterror("",12):SYS "Wimp_CreateMenu",,-1:ENDPROC
 3463IF K%>=0 THEN M$=" NOTE! Index on this field will NO LONGER BE VALID and will be deleted." ELSE M$=""
 3464P%=INSTR(Title$,". "):Title$=MID$(Title$,P%+2)
 3465IF Title$<>"All records" THEN Title$=" when "+Title$ ELSE Title$=" for "+Title$
 3466Title$="Change "+Fieldname$+" to "+n$+Title$+". "+M$
 3467IF FNconfirm(Title$)=TRUE THEN
 3468  subtotal%=FNcount_recs(key%,zero%)
 3469  SYS "Hourglass_On"
 3470  dbasehandle%=OPENUP($database%+".Database")
 3471  P%=FNneighbour(key%,top,1)
 3472  PROCscan_file("P%<>top",key%,5)
 3473  PROCclose_file(dbasehandle%)
 3474  $Date%(file%)=FNdate
 3475  date%?file%=1
 3476  PROCdisplay(key%,addr)
 3477  SYS "Hourglass_Off"
 3478  IF K%>=0 THEN
 3479    FOR index%=K% TO Keys%
 3480      Index$(K%)=Index$(K%+1)
 3481    NEXT index%
 3482    PROCscrap_sliding_block(keyanchor%(K%))
 3483    Keys%-=1
 3484  ENDIF
 3485  IF FNselected(passW%,16) THEN BPUT#loghandle%,Title$
 3486ENDIF
 3487SYS "Wimp_CreateMenu",,-1
 3488ENDPROC
 3489:
 3490DEF FNis_a_key(F%)
 3491LOCAL key%,flag%
 3492flag%=-1
 3493FOR key%=0 TO Keys%
 3494  IF KF%(key%,0)=F% OR KF%(key%,1)=F% THEN flag%=key%
 3495NEXT key%
 3496=flag%
 3497:
 3498DEF PROCread(N%,K%,R%,f$)
 3499LOCAL I%,key%,dbasehandle%
 3500dbasehandle%=OPENIN(f$+".Database")
 3501$Rf%(0)="":field$(0)="":key$()=""
 3502PTR#dbasehandle%=ABS(R%)*Length%
 3503FOR I%=1 TO N%
 3504  field$(I%)=GET$#dbasehandle%
 3505  IF chartype%(I%)<>40 AND chartype%(I%)<>59 THEN $Rf%(I%)=field$(I%)
 3506  CASE chartype%(I%) OF
 3507    WHEN 36,37,38:PROCset_blob_sprite(R%,I%,chartype%(I%))
 3508    WHEN 39:PROCshow_text_block(I%)
 3509    WHEN 40:PROCshow_picture(I%)
 3510    WHEN 41,42,43,44,45:
 3511    IF field$(I%)=" " THEN PROCselect(mainW%,field%(I%)) ELSE PROCdeselect(mainW%,field%(I%))
 3512    WHEN 46:IF R%=RA% THEN $Rf%(I%)=STR$(nextrec%)
 3513    WHEN 47:IF R%=RA% THEN PROCsplit_link(I%,R$,V$):$Rf%(I%)=R$
 3514    WHEN 48:IF R%=RA% THEN $Rf%(I%)=RIGHT$(TIME$,8)
 3515    WHEN 49:IF R%=RA% THEN $Rf%(I%)=LEFT$(TIME$,15)
 3516    WHEN 50:IF R%=RA% THEN $Rf%(I%)=FNconvert_date(2)
 3517    WHEN 51:IF R%=RA% THEN $Rf%(I%)=FNconvert_date(4)
 3518    WHEN 52:IF R%=RA% THEN $Rf%(I%)=TIME$
 3519    WHEN 53:IF R%=RA% THEN $Rf%(I%)=LEFT$(TIME$,3)
 3520    WHEN 54:IF R%=RA% THEN $Rf%(I%)=MID$(TIME$,5,2)
 3521    WHEN 55:IF R%=RA% THEN $Rf%(I%)=MID$(TIME$,8,3)
 3522    WHEN 56:IF R%=RA% THEN M$=MID$(TIME$,8,3):P%=INSTR(months$,M$):$Rf%(I%)=STR$((P%+2) DIV 3)
 3523    WHEN 57:IF R%=RA% THEN $Rf%(I%)=MID$(TIME$,12,4)
 3524  ENDCASE
 3525NEXT I%
 3526IF K% THEN
 3527  FOR key%=0 TO Keys%
 3528    key$(key%)=FNkey(key%)
 3529  NEXT key%
 3530ENDIF
 3531PROCclose_file(dbasehandle%)
 3532ENDPROC
 3533:
 3534DEF PROCupdate_calcs(N%)
 3535IF design% THEN ENDPROC
 3536LOCAL I%,C%,L%,F,F$,Form$,S$,SF$
 3537Form$=update$(N%)
 3538IF LEN Form$=0 THEN ENDPROC
 3539FOR I%=1 TO LEN(Form$)-1 STEP 2
 3540  F%=FNfnum(MID$(Form$,I%,2))
 3541  PROCsplit_link(F%,real$,visible$)
 3542  LOCAL ERROR
 3543  ON ERROR LOCAL:RESTORE ERROR:PROCcalc_error:ENDPROC
 3544  CASE chartype%(F%) OF
 3545    WHEN 6:
 3546    F=EVAL(real$):F$=STR$(F):IF fix%(F%)>0 THEN F$=FNfix_point(F$,F%)
 3547    WHEN 7:
 3548    F$=EVAL(real$)
 3549    IF N%=0 THEN S$=FNexpand(F$,link$(F%),L%,SF$):F$=SF$
 3550  ENDCASE
 3551  RESTORE ERROR
 3552  IF LEN(F$)<=len%(F%) THEN $Rf%(F%)=F$:PROCredraw_icon(mainW%,field%(F%))
 3553  PROCupdate_calcs(F%)
 3554NEXT I%
 3555ENDPROC
 3556:
 3557DEF PROCcalc_error
 3558IF calcerror%=FALSE THEN
 3559  PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 3560  REM PROCsofterror(calc$(I%),73)
 3561  calcerror%=TRUE
 3562  ELSE calcerror=FALSE
 3563ENDIF
 3564ENDPROC
 3565;
 3566DEF PROCcheck_change
 3567LOCAL F%,flag%
 3568WHILE F%<fields% AND flag%=FALSE
 3569  F%+=1
 3570  CASE chartype%(F%) OF
 3571    WHEN 0,1,2,3,4,5,6,7,8,41,42,43,44,45:
 3572    IF $Rf%(F%)<>field$(F%) THEN flag%=TRUE
 3573  ENDCASE
 3574ENDWHILE
 3575IF flag% THEN PROCwrite(fields%,key%):warn%=TRUE
 3576ENDPROC
 3577:
 3578DEF PROCwrite(N%,k%)
 3579LOCAL key%,newrec%,alter%
 3580IF NOT Access% THEN PROCsofterror("",14):ENDPROC
 3581PROCclose_file(dbasehandle%)
 3582IF template%=2 THEN PROCwrite_dbase(RA%,N%):template%=0:ENDPROC
 3583PRI$=FNkey(0)
 3584IF PRI$<>"" THEN
 3585  kl%=KL%(0):val$=FNtype(0)
 3586  IF key$(0)="" THEN
 3587    PROCinsert(TRUE,PRI$,0)
 3588    IF PRI$<>"*Failed*" THEN
 3589      newrec%=TRUE
 3590      IF k%=0 THEN addr=F%
 3591    ENDIF
 3592    ELSE
 3593    IF PRI$=key$(0) THEN
 3594      alter%=TRUE
 3595      ELSE
 3596      IF FNconfirm(FNmsg(48))=TRUE THEN
 3597        alter%=TRUE
 3598        PROCdelete(key$(0),0)
 3599        PROCinsert(TRUE,PRI$,0)
 3600        IF k%=0 THEN addr=F%
 3601      ENDIF
 3602    ENDIF
 3603  ENDIF
 3604ENDIF
 3605IF NOT newrec% AND NOT alter% THEN ENDPROC
 3606WHILE key%<Keys%
 3607  key%+=1
 3608  KEY$=FNkey(key%)
 3609  IF KEY$<>key$(key%) OR key$(key%)="" THEN
 3610    kl%=KL%(key%):val$=FNtype(key%)
 3611    IF NOT newrec% THEN PROCdelete(key$(key%),key%)
 3612    PROCinsert(FALSE,KEY$,key%)
 3613    IF key%=k% THEN addr=F%
 3614  ENDIF
 3615ENDWHILE
 3616$Date%(file%)=FNdate
 3617date%?file%=1
 3618IF NOT newtree% THEN PROCwrite_dbase(REC%,N%)
 3619IF newrec% AND autobalance% THEN
 3620  added%+=1
 3621  IF added%=balint% THEN
 3622    FOR key%=0 TO Keys%
 3623      PROCbalance(key%)
 3624    NEXT key%
 3625    added%=0
 3626  ENDIF
 3627ENDIF
 3628ENDPROC
 3629:
 3630DEF PROCwrite_dbase(R%,N%)
 3631LOCAL I%,F$,dbasehandle%,flag%
 3632dbasehandle%=OPENUP($database%+".Database")
 3633PTR#dbasehandle%=R%*Length%
 3634IF FNselected(passW%,16) THEN
 3635  IF newrec% THEN
 3636    BPUT#loghandle%,"New record: Subfile "+STR$(file%)+"  "+$Rf%(KF%(0,0))+" "+$Rf%(KF%(0,1))
 3637    ELSE BPUT#loghandle%,logentry$:flag%=TRUE
 3638  ENDIF
 3639ENDIF
 3640FOR I%=1 TO N%
 3641  CASE chartype%(I%) OF
 3642    WHEN 39,40:F$=""
 3643    WHEN 47:F$=$Rf%(I%):PROCsplit_link(I%,R$,V$):S%=VAL(R$):S%+=1:calc$(I%)=V$+"|"+STR$(S%)
 3644    WHEN 58:F$=TIME$
 3645    OTHERWISE:F$=$Rf%(I%)
 3646  ENDCASE
 3647  BPUT#dbasehandle%,F$
 3648  IF flag% AND F$<> field$(I%) THEN
 3649    IF F$="" THEN D$="<null>" ELSE D$=F$
 3650    IF field$(I%)="" THEN S$="<null>" ELSE S$=field$(I%)
 3651    BPUT#loghandle%,Tag$(I%)+": "+S$+" ---> "+D$
 3652  ENDIF
 3653  field$(I%)=F$
 3654NEXT I%
 3655PROCclose_file(dbasehandle%)
 3656ENDPROC
 3657:
 3658DEF PROCsplit_link(F%,RETURN R$,RETURN V$)
 3659LOCAL L$,P%,F
 3660L$=calc$(F%)
 3661CASE TRUE OF
 3662  WHEN LEFT$(L$,1)="#":
 3663  P%=INSTR(L$,"#",2):V$=MID$(L$,P%+1):R$=MID$(L$,2,P%-2)
 3664  WHEN INSTR(L$,"|")>0:
 3665  P%=INSTR(L$,"|"):V$=LEFT$(L$,P%-1):R$=MID$(L$,P%+1)
 3666  OTHERWISE:R$="":V$=""
 3667ENDCASE
 3668ENDPROC
 3669:
 3670DEF FNkey(key%)
 3671=FNkey2(key%,0)
 3672:
 3673DEF FNkey2(key%,loc%)
 3674LOCAL I%,N%,P%,S%,S$,T$,f0%,f1%
 3675P%=1:f0%=KF%(key%,0):f1%=KF%(key%,1)
 3676CASE loc% OF
 3677  WHEN 0:
 3678  S$=$Rf%(f0%)+" "+$Rf%(f1%)
 3679  OTHERWISE
 3680  S$=F$(f0%)+" "+F$(f1%)
 3681ENDCASE
 3682IF S$=" " THEN=""
 3683IF RIGHT$(S$)<>" " THEN S$+=" "
 3684FOR I%=0 TO 3
 3685  N%=KW%(key%,I%)
 3686  IF N%<>0 AND P%<>LEN(S$) THEN
 3687    S%=INSTR(S$," ",P%+1)
 3688    IF S%-P%<N% THEN N%=S%-P%
 3689    T$+=MID$(S$,P%,N%)
 3690    P%=S%+1
 3691  ENDIF
 3692NEXT I%
 3693T$+=STRING$(KL%(key%)-LEN(T$),"#")
 3694CASE chartype%(f0%) OF
 3695  WHEN 5,51,52:T$=FNreverse_date(T$)
 3696ENDCASE
 3697IF case%(key%) THEN=T$ ELSE=FNu(T$)
 3698:
 3699DEF FNu(N$)
 3700LOCAL I%,B%
 3701$key=N$
 3702FOR I%=0 TO LEN(N$)-1
 3703  B%=key?I%
 3704  IF B%>96 AND B%<123 THEN key?I%=B% AND 223
 3705NEXT I%
 3706=$key
 3707:
 3708DEF FNdate
 3709LOCAL Y$,M$,D$,M%,date$
 3710Y$=MID$(TIME$,14,2)
 3711D$=MID$(TIME$,5,2)
 3712M$=MID$(TIME$,8,3)
 3713M%=(INSTR("JanFebMarAprMayJunJulAugSepOctNovDec",M$)+2) DIV 3
 3714IF M%<10 THEN M$="0"+STR$(M%) ELSE M$=STR$(M%)
 3715date$=D$+"-"+M$+"-"+Y$
 3716=date$
 3717:
 3718DEF PROCdate(key%)
 3719IF !keyanchor%(key%)=0 THEN ENDPROC
 3720LOCAL I%
 3721FOR I%=0 TO 5
 3722  IF date%?I%=1 THEN
 3723    $(!keyanchor%(key%)+8+9*I%)=FNdate
 3724    $Date%(I%)=FNdate
 3725  ENDIF
 3726NEXT I%
 3727ENDPROC
 3728:
 3729DEF FNcheck_date(D$,place%,RETURN date$)
 3730LOCAL I%,D%,M%,Y%,L%,P%,Q%,U$,d$,m$,y$
 3731L%=LEN(D$)
 3732IF L%=0 THEN=TRUE
 3733FOR I%=1 TO L%
 3734  C$=MID$(D$,I%,1)
 3735  IF C$<"0" OR C$>"9" THEN
 3736    IF P%=0 THEN P%=I% ELSE Q%=I%
 3737  ENDIF
 3738NEXT I%
 3739IF P%=0 OR Q%=0 THEN PROCrestore(Fieldnumber%," (day, month & year must be separated by non-numeral)",4):=FALSE
 3740D%=VAL(LEFT$(D$,P%-1))
 3741M%=VAL(MID$(D$,P%+1,Q%-P%-1))
 3742Y%=VAL(MID$(D$,Q%+1))
 3743IF Y%<0 OR D%<1 THEN PROCrestore(Fieldnumber%,"",4):=FALSE
 3744IF M%<1 OR M%>12 THEN PROCrestore(Fieldnumber%," (month out of range)",4):=FALSE
 3745CASE TRUE OF
 3746  WHEN Y% MOD 400=0:U$="312931303130313130313031"
 3747  WHEN Y% MOD 100<>0 AND Y% MOD 4=0:U$="312931303130313130313031"
 3748  OTHERWISE:U$="312831303130313130313031"
 3749ENDCASE
 3750DM$=MID$(U$,2*M%-1,2)
 3751IF D%>VAL(DM$) THEN PROCrestore(Fieldnumber%," (day out of range - max="+DM$+")",4):=FALSE
 3752d$=STR$(D%):IF LEN(d$)=1 THEN d$="0"+d$
 3753m$=STR$(M%):IF LEN(m$)=1 THEN m$="0"+m$
 3754y$=STR$(Y%):IF LEN(y$)=1 THEN y$="0"+y$
 3755IF LEN(y$)<>2 AND LEN(y$)<>4 THEN PROCrestore(Fieldnumber%," (year not 2 or 4 digits)",4):=FALSE
 3756IF LEN(y$)=4 AND len%(Fieldnumber%)<10 THEN y$=RIGHT$(y$,2)
 3757date$=d$+datesep$+m$+datesep$+y$
 3758IF place%=0 AND LEN(date$)>len%(Fieldnumber%) THEN PROCrestore(Fieldnumber%," (too long for field)",4):=FALSE
 3759CASE place% OF
 3760  WHEN 0:
 3761  $Rf%(Fieldnumber%)=date$:PROCredraw_icon(mainW%,field%(Fieldnumber%))
 3762  WHEN 1:
 3763  $FNtext(keypadW%,27)=date$:PROCredraw_icon(keypadW%,27)
 3764ENDCASE
 3765=TRUE
 3766:
 3767DEF FNconvert_date(L%)
 3768LOCAL d$,m$,y$,M$,M%
 3769d$=MID$(TIME$,5,2)
 3770M$=MID$(TIME$,8,3)
 3771P%=INSTR(months$,M$)
 3772M%=(P%+2) DIV 3
 3773m$=STR$(M%):IF M%<10 THEN m$="0"+m$
 3774y$=MID$(TIME$,16-L%,L%)
 3775=d$+datesep$+m$+datesep$+y$
 3776:
 3777DEF FNreverse_date(K$)
 3778LOCAL sep$
 3779CASE LEN(K$) OF
 3780  WHEN 8:
 3781  sep$=MID$(K$,3,1)
 3782  K$=RIGHT$(K$,2)+sep$+MID$(K$,4,2)+sep$+LEFT$(K$,2) ELSE=K$
 3783  WHEN 10:
 3784  IF VAL(K$)<100 THEN
 3785    sep$=MID$(K$,3,1)
 3786    K$=RIGHT$(K$,4)+sep$+MID$(K$,4,2)+sep$+LEFT$(K$,2)
 3787    ELSE
 3788    sep$=MID$(K$,5,1)
 3789    K$=RIGHT$(K$,2)+sep$+MID$(K$,6,2)+sep$+LEFT$(K$,4)
 3790  ENDIF
 3791ENDCASE
 3792=K$
 3793:
 3794DEF FNseconds(time$,place%)
 3795LOCAL I%,L%,P%,Q%,H%,M%,S%,secs%,h$,m$,s$,C$
 3796L%=LEN(time$)
 3797IF L%=0 THEN=0
 3798FOR I%=1 TO L%
 3799  C$=MID$(time$,I%,1)
 3800  IF C$<"0" OR C$>"9" THEN
 3801    IF P%=0 THEN P%=I% ELSE Q%=I%
 3802  ENDIF
 3803NEXT I%
 3804IF P%=0 OR Q%=0 THEN PROCrestore(Fieldnumber%," (hours, minutes and seconds must be separated by a non-numeral).",94):=-1
 3805H%=VAL(LEFT$(time$,P%-1)):IF H%<0 OR H%>23 THEN PROCrestore(Fieldnumber%," (hours out of range).",94):=-1
 3806M%=VAL(MID$(time$,P%+1,Q%-P%-1)):IF M%<0 OR M%>59 THEN PROCrestore(Fieldnumber%," (minutes out of range).",94):=-1
 3807S%=VAL(MID$(time$,Q%+1)):IF S%<0 OR S%>59 THEN PROCrestore(Fieldnumber%," (seconds out of range).",94):=-1
 3808h$=STR$(H%):IF LEN(h$)=1 THEN h$="0"+h$
 3809m$=STR$(M%):IF LEN(m$)=1 THEN m$="0"+m$
 3810s$=STR$(S%):IF LEN(s$)=1 THEN s$="0"+s$
 3811time$=h$+timesep$+m$+timesep$+s$
 3812secs%=H%*3600+M%*60+S%
 3813IF place%=0 THEN $Rf%(Fieldnumber%)=time$:PROCredraw_icon(mainW%,field%(Fieldnumber%))
 3814=secs%
 3815:
 3816DEF FNtime(secs%)
 3817LOCAL H%,M%,S%,h$,m$,s$
 3818H%=secs% DIV 3600:secs%=secs% MOD 3600
 3819M%=secs% DIV 60
 3820S%=secs% MOD 60
 3821h$=STR$(H%):IF LEN(h$)=1 THEN h$="0"+h$
 3822m$=STR$(M%):IF LEN(m$)=1 THEN m$="0"+m$
 3823s$=STR$(S%):IF LEN(s$)=1 THEN s$="0"+s$
 3824=h$+timesep$+m$+timesep$+s$
 3825:
 3826DEF FNvalidate(F%,RETURN TabFields%,RETURN name$)
 3827IF NOT validate% THEN=TRUE
 3828LOCAL row%,field%,Rows%,Rec%,ind%,eind%,pos%,start%,rel%,exp%,epos%,date$
 3829IF fix%(F%)>0 THEN $Rf%(F%)=FNfix_point($Rf%(F%),F%):PROCredraw_icon(mainW%,field%(F%))
 3830IF chartype%(F%)=3 THEN=FNcheck_val(calc$(F%),$Rf%(F%))
 3831IF chartype%(F%)=5 THEN=FNcheck_date($Rf%(F%),0,date$)
 3832IF chartype%(F%)=8 THEN=(FNseconds($Rf%(F%),0)>=0)
 3833IF $Rf%(F%)=field$(F%) AND TabFields%=0 THEN=TRUE
 3834name$=link$(F%):Tablenumber%=-1:rel%=TabFields%
 3835IF name$="" OR LEFT$(name$,1)="#" THEN=TRUE
 3836field%=VAL(RIGHT$(name$)):name$=LEFT$(name$)
 3837exp%=-1:IF ASC(name$)<58 AND ASC(name$)<>-1 THEN exp%=VAL(name$):name$=MID$(name$,2)
 3838T%=FNtable_number(name$):IF T%<0 THEN=TRUE
 3839T$=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 3840pos%=FNtable_field(field%,tabfieldlen%())
 3841IF exp%<0 THEN epos%=pos% ELSE epos%=FNtable_field(exp%,tabfieldlen%())
 3842start%=!tabanchor%(T%)+160-Rec%
 3843ind%=start%+pos%:eind%=start%+epos%
 3844REPEAT row%+=1
 3845  ind%+=Rec%:eind%+=Rec%
 3846UNTIL row%>Rows% OR $ind%=$Rf%(F%) OR $eind%=$Rf%(F%)
 3847IF row%>Rows% AND rel%=0 THEN PROCrestore(F%," ("+name$+")",5):=FALSE ELSE IF row%>Rows% THEN=FALSE
 3848ind%=start%+row%*Rec%
 3849FOR I%=0 TO TabFields%
 3850  rel%(I%)=ind%:ind%+=tabfieldlen%(I%)+1
 3851NEXT I%
 3852IF exp%>=0 THEN expand$=$eind%:IF LEN(expand$)<=len%(F%) THEN $Rf%(F%)=expand$:PROCredraw_icon(mainW%,field%(F%))
 3853=row%
 3854:
 3855DEF FNcheck_val(C$,N$)
 3856LOCAL min$,max$,P%,V,ok%
 3857ok%=TRUE
 3858IF N$="" THEN=ok%
 3859IF C$<>"" THEN
 3860  V=VAL(N$)
 3861  P%=INSTR(C$,"|")
 3862  IF P%>0 THEN
 3863    min$=LEFT$(C$,P%-1)
 3864    max$=MID$(C$,P%+1)
 3865    IF min$<>"" AND V<VAL(min$) THEN ok%=FALSE:PROCrestore(F%," (min="+min$+")",58)
 3866    IF max$<>"" AND V>VAL(max$) THEN ok%=FALSE:PROCrestore(F%," (max="+max$+")",59)
 3867  ENDIF
 3868ENDIF
 3869=ok%
 3870:
 3871DEF PROCrestore_rec
 3872LOCAL F%
 3873FOR F%=1 TO fields%
 3874  $Rf%(F%)=field$(F%)
 3875NEXT F%
 3876PROCredraw(mainW%)
 3877ENDPROC
 3878:
 3879DEF PROCrestore(F%,E$,E%)
 3880IF E%>=0 THEN PROCsofterror(E$,E%)
 3881$Rf%(F%)=field$(F%)
 3882PROCredraw_icon(mainW%,field%(F%))
 3883PROCset_caret(mainW%,field%(F%))
 3884ENDPROC
 3885:
 3886DEF PROCrelations(menu%)
 3887LOCAL F%,I%,W%,L%,N$,row%,col%,flags%
 3888F%=-1
 3889row%=FNvalidate(Fieldnumber%,F%,N$)
 3890col%=VAL(RIGHT$(link$(Fieldnumber%)))
 3891IF row%>0 THEN
 3892  PROCdelete_icons(relateW%,0)
 3893  FOR I%=0 TO F%
 3894    IF I%=col% THEN flags%=&0B000531 ELSE flags%=&07000531
 3895    L%=LEN($rel%(I%))
 3896    R%=FNcreate_icon(relateW%,0,-I%*36-36,L%*16+16,32,flags%,"",rel%(I%),-1,L%+1)
 3897    IF L%>W% THEN W%=L%
 3898  NEXT I%
 3899  $RelTitle%=N$
 3900  IF menu% THEN
 3901    xmax%=x%-32:ymax%=y%
 3902    ELSE
 3903    !block%=keypadW%:SYS "Wimp_GetWindowState",,block%
 3904    xmax%=block%!12+2:ymax%=block%!16
 3905  ENDIF
 3906  !block%=relateW%:SYS "Wimp_GetWindowState",,block%
 3907  width%=W%*16+16:height%=F%*36+36
 3908  block%!4=xmax%:block%!12=xmax%+width%
 3909  block%!8=ymax%-height%:block%!16=ymax%
 3910  block%!28=-1
 3911  IF menu% THEN
 3912    SYS "Wimp_OpenWindow",,block%
 3913    SYS "Wimp_CreateMenu",,relateW%,x%-32,y%
 3914    ELSE
 3915    SYS "Wimp_OpenWindow",,block%
 3916    PROCredraw(relateW%)
 3917  ENDIF
 3918  ELSE PROCclose_window(relateW%)
 3919ENDIF
 3920ENDPROC
 3921:
 3922DEF FNfix_point(F$,F%)
 3923IF F$="" THEN=""
 3924@%=&01020009+fix%(F%)*256
 3925F$=STR$(VAL(F$))
 3926@%=&90A
 3927=LEFT$(F$,len%(F%))
 3928:
 3929DEF FNmoveto(key%,P%,D%)
 3930D%=(D%+1) DIV 2
 3931IF filter% THEN
 3932  P%=FNnext_match(P%,D%,Filter$)
 3933  ELSE
 3934  P%=FNneighbour(key%,P%,D%)
 3935  IF P%=top THEN VDU 7:P%=FNneighbour(key%,P%,D%)
 3936ENDIF
 3937PROCdisplay(key%,P%)
 3938=P%
 3939:
 3940DEF FNnext_match(P%,D%,S$)
 3941LOCAL REC%
 3942dbasehandle%=OPENIN($database%+".Database")
 3943REPEAT
 3944  P%=FNneighbour(key%,P%,D%)
 3945  IF P%<>top THEN
 3946    REC%=FNrec_no(k$,key%,P%)
 3947    PROCreadsmarray(dbasehandle%,REC%)
 3948  ENDIF
 3949UNTIL EVAL(S$)=TRUE OR P%=top
 3950IF P%=top THEN PROCsofterror("",38)
 3951PROCclose_file(dbasehandle%)
 3952=P%
 3953:
 3954DEF PROCdisplay(key%,P%)
 3955PROCcheck_change
 3956IF template%=1 THEN template%=2 ELSE template%=0
 3957LOCAL I%,L%,S%,S$,k$,ok%,nextrec%
 3958CASE P% OF
 3959  WHEN -1:
 3960  keybase%=!keyanchor%(key%):A%=!keybase%:nextrec%=!(keybase%+A%+8+KL%(0)+1)
 3961  CASE TRUE OF
 3962    WHEN !(keybase%+A%)>0,template%=2,design%=TRUE:ok%=TRUE
 3963    OTHERWISE:
 3964    incr%=VAL($Increment%)
 3965    IF incr%>0 THEN
 3966      PROCchange_length(RA%+incr%,FALSE):ok%=TRUE
 3967      ELSE PROCsofterror("",2)
 3968    ENDIF
 3969  ENDCASE
 3970  IF ok% THEN
 3971    CASE TRUE OF
 3972      WHEN design%:$RecInfo%="Make adjustments to fields"
 3973      WHEN template%=2:$RecInfo%="Enter data which you want to appear by default on new records"
 3974      OTHERWISE:$RecInfo%="New record"
 3975    ENDCASE
 3976    REC%=RA%:PROCread(fields%,FALSE,REC%,$database%)
 3977  ENDIF
 3978  WHEN top:
 3979  REC%=RA%:PROCread(fields%,FALSE,REC%,$database%)
 3980  $RecInfo%="Subfile="+STR$(file%)
 3981  IF NOT filter% THEN VDU 7:$RecInfo%+=". (Empty)"
 3982  OTHERWISE:
 3983  REC%=FNrec_no(k$,key%,P%)
 3984  PROCread(fields%,TRUE,REC%,$database%)
 3985  key$(key%)=k$
 3986  $RecInfo%="Subfile="+STR$(file%)+". Record="+STR$(REC%)+". Key="+key$(key%)
 3987ENDCASE
 3988L%=FNtext_length(mainW%,starthere%)
 3989IF Access% THEN PROCset_caret(mainW%,starthere%)
 3990PROCidentify_field(starthere%)
 3991PROCupdate_calcs(0)
 3992IF FNselected(passW%,16) THEN logentry$="Subfile "+STR$(file%)+"  "+$Rf%(KF%(0,0))+" "+$Rf%(KF%(0,1))
 3993PROCredraw(mainW%)
 3994ENDPROC
 3995:
 3996:
 3997REM -------------------- Icon colours -------------------------------
 3998:
 3999DEF PROCcolour(key%,type%)
 4000PROCchange_field_cols(key%,type%,0)
 4001IF KF%(key%,1)>0 THEN PROCchange_field_cols(key%,type%,1)
 4002ENDPROC
 4003:
 4004DEF PROCchange_field_cols(key%,type%,fld%)
 4005col%=fcol%(type%*2)
 4006IF type%=0 OR key%>0 OR (key%=0 AND fcol%(0)=&17) THEN PROCset_icon_cols(mainW%,desc%(KF%(key%,fld%)),col%)
 4007col%=fcol%(type%*2+1)
 4008col2%=FNget_icon_cols(mainW%,field%(KF%(key%,fld%)))
 4009IF (col2% AND %1111)<>fcol%(6) THEN
 4010  IF type%=0 OR key%>0 OR (key%=0 AND fcol%(1)=&07) THEN PROCset_icon_cols(mainW%,field%(KF%(key%,fld%)),col%)
 4011ENDIF
 4012ENDPROC
 4013:
 4014DEF FNget_icon_cols(wi%,ic%)
 4015!block%=wi%:block%!4=ic%:SYS "Wimp_GetIconState",,block%
 4016=block%?27
 4017:
 4018DEF PROCset_icon_cols(wi%,ic%,col%)
 4019!block%=wi%:block%!4=ic%:block%!8=(col%<<24):block%!12=&FF000000
 4020SYS "Wimp_SetIconState",,block%
 4021ENDPROC
 4022:
 4023DEF PROCdcolour(wi%,ic%,col%,fb%)
 4024!block%=wi%:block%!4=ic%:SYS "Wimp_GetIconState",,block%
 4025CASE fb% OF
 4026  WHEN 0:block%!8=col%<<28:block%!12=&F0000000
 4027  WHEN 1:block%!8=col%<<24:block%!12=&0F000000
 4028ENDCASE
 4029SYS "Wimp_SetIconState",,block%
 4030ENDPROC
 4031:
 4032DEF PROCread_colours(f$)
 4033LOCAL ic%
 4034F=OPENIN(f$)
 4035FOR ic%=0 TO 6
 4036  INPUT#F,fcol%(ic%)
 4037NEXT ic%
 4038ncol%()=fcol%()
 4039PROCclose_file(F)
 4040ENDPROC
 4041:
 4042DEF PROCwrite_colours
 4043LOCAL ic%
 4044F=OPENUP($database%+".Colours")
 4045FOR ic%=0 TO 6
 4046  PRINT#F,fcol%(ic%)
 4047NEXT ic%
 4048PROCclose_file(F)
 4049ENDPROC
 4050:
 4051DEF FNfind(S$,key%,m%,disp%)
 4052LOCAL P%,F%,H%,num%,abort%,cond$
 4053IF NOT case%(key%) THEN S$=FNu(S$)
 4054IF LEFT$(S$,1)="#" THEN
 4055  PROCcheck_change
 4056  REC%=VAL(MID$(S$,2))
 4057  IF REC%>=0 AND REC%<RA% THEN
 4058    PROCread(fields%,TRUE,REC%,$database%)
 4059    S$=key$(key%):H%=1:num%=TRUE
 4060    PROCselect(keypadW%,25):PROCdeselect(keypadW%,24)
 4061    ELSE PROCsofterror(" ("+S$+")",56):abort%=TRUE
 4062  ENDIF
 4063ENDIF
 4064IF abort% THEN=addr
 4065val$=FNtype(key%)
 4066IF val$="VAL" THEN
 4067  kl%=KL%(key%)
 4068  ELSE
 4069  P%=INSTR(S$," ")
 4070  IF P%>0 THEN S$=LEFT$(S$,P%-1)
 4071  kl%=LEN(S$)
 4072ENDIF
 4073P%=FNsearch(S$,key%,1+H%)
 4074IF P%<0 AND FNselected(keypadW%,25) THEN
 4075  F%=file%
 4076  REPEAT
 4077    file%=(file%+1) MOD 6
 4078    top=8*file%+LH%
 4079    P%=FNsearch(S$,key%,1+H%)
 4080  UNTIL P%>0 OR file%=F%
 4081ENDIF
 4082IF val$="VAL" THEN cond$="VAL($(!keyanchor%(key%)+P%+8))=VAL(S$)" ELSE cond$="LEFT$($(!keyanchor%(key%)+P%+8),kl%)=S$"
 4083matches%=0
 4084CASE TRUE OF
 4085  WHEN P%>=0 AND num%:RecF%=TRUE:addr=P%
 4086  WHEN P%>=0:RecF%=TRUE
 4087  WHILE EVAL(cond$)
 4088    P%=FNneighbour(key%,P%,0)
 4089  ENDWHILE
 4090  P%=FNneighbour(key%,P%,1):addr=P%:REM ### Scan back to FIRST match & point addr at it ###
 4091  WHILE EVAL(cond$)
 4092    matches%+=1
 4093    P%=FNneighbour(key%,P%,1)
 4094  ENDWHILE
 4095  WHEN num%:PROCsofterror(" (#"+STR$(REC%)+")",55)
 4096  OTHERWISE:VDU 7:flash%=KF%(key%,0):addr=ABS(P%)
 4097ENDCASE
 4098$FNtext(keypadW%,36)=STR$(matches%)+" found":PROCredraw_icon(keypadW%,36)
 4099IF disp% THEN PROCdisplay(key%,addr)
 4100=addr
 4101:
 4102DEF PROCget_it_in(filename$)
 4103SYS "OS_File",5,filename$ TO d%,,ftype%
 4104ftype%=(ftype%>>8) AND &FFF:wi%=block%!20:ic%=block%!24
 4105CASE ftype% OF
 4106  WHEN &7f1:IF LastTable%=MaxTabs% THEN PROCsofterror(STR$(MaxTabs%+1),32) ELSE PROCdrag_table(filename$):PROCshow_table(Tablenumber%)
 4107  WHEN &7f3:PROCdrag_selection(filename$)
 4108  WHEN &7f4:PROCdrag_query(filename$)
 4109  WHEN &7f5:PROCdrag_options(filename$)
 4110  WHEN &dfe:PROCstart_import("CSV",block%!20)
 4111  WHEN &ff9,&aff:PROCtransfer_blob(block%!20,block%!24,REC%,filename$,ftype%)
 4112  WHEN &fff:
 4113  F=OPENIN(filename$):header$=GET$#F:PROCclose_file(F)
 4114  CASE wi% OF
 4115    WHEN mainW%,-1:
 4116    CASE TRUE OF
 4117      WHEN header$="!SCRIPT POWERBASE":
 4118      IF present%=7:PROCexecute_file(filename$)
 4119      WHEN ic%>0:PROCtransfer_blob(block%!20,block%!24,REC%,filename$,ftype%)
 4120      OTHERWISE:PROCstart_import("text",wi%)
 4121    ENDCASE  
 4122    OTHERWISE:IF customise% THEN PROCspecial_drop
 4123  ENDCASE
 4124  OTHERWISE:
 4125  CASE wi% OF
 4126    WHEN reformW%:
 4127    CASE reform$ OF
 4128      WHEN "Merge":PROCmerge_files(filename$,file%)
 4129      WHEN "Reformat":PROCreformat(filename$)
 4130    ENDCASE
 4131    OTHERWISE:
 4132    IF d%=2 THEN
 4133      CASE LEFT$(FNleaf(filename$),1) OF
 4134        WHEN "!":
 4135        REM ### Is it an Impression document? ###
 4136        SYS "OS_File",5,filename$+".!DocData" TO d%
 4137        IF d%=1 THEN
 4138          document$=FNleaf(filename$)
 4139          IF LEFT$(document$,1)="!" THEN document$=MID$(document$,2)
 4140          block%!0=256:block%!12=0:block%!16=5:block%!20=0
 4141          block%!24=0:block%!28=0:block%!32=0:block%!36=0
 4142          block%!40=&2000:$(block%+44)=filename$
 4143          SYS "Wimp_SendMessage",18,block%,0
 4144          mergewith$="Impression":Impref%=block%!8
 4145          $MergeTitle%="Data merge with "+mergewith$
 4146          ELSE
 4147          REM ### Is it a Powerbase application? ###
 4148          SYS "OS_File",5,filename$+".Indices" TO d%
 4149          IF d%=2 THEN
 4150            IF present%>0 THEN PROCexit(0)
 4151            $Title%=FNleaf(filename$)
 4152            PROCopen_files(filename$)
 4153          ENDIF
 4154        ENDIF
 4155        OTHERWISE:
 4156        REM ### It's an ordinary directory folder ###
 4157        PROCtransfer_blob(block%!20,block%!24,REC%,filename$,-1)
 4158      ENDCASE
 4159    ENDIF
 4160  ENDCASE
 4161ENDCASE
 4162ENDPROC
 4163:
 4164DEF PROCopen_files(f$)
 4165LOCAL I%,J%,F%,A$
 4166SYS "OS_File",5,f$+".Dbase" TO d%
 4167IF d%=1 THEN ERROR fatal_err%,FNmsg(42)
 4168SYS "OS_File",5,f$+".Database" TO d%
 4169IF d%=1 THEN present%=present% OR 4
 4170SYS "OS_File",5,f$+".PrimaryKey" TO d%
 4171IF d%=1 THEN present%=present% OR 2
 4172SYS "OS_File",5,f$+".Form" TO d%
 4173IF d%=1 THEN present%=present% OR 1
 4174SYS "OS_File",5,f$+".UsrSprites" TO d%,,,,len%
 4175IF d%=1 THEN
 4176  PROCcreate_named_sliding_block(logoanchor%,len%+8)
 4177  base%=!logoanchor%:!base%=len%+4
 4178  SYS "OS_File",255,f$+".UsrSprites",base%+4
 4179  logosloaded%=TRUE
 4180ENDIF
 4181SYS "OS_CLI","Set DBase$Dir "+f$
 4182$database%=f$
 4183CASE present% OF
 4184  WHEN 0,1,5:Access%=TRUE:Modify%=TRUE:PROCresume_opening
 4185  WHEN 7:PROCaccess(f$)
 4186  OTHERWISE:PROCwimp_error(TRUE,254,0,FNmsg(24))
 4187ENDCASE
 4188ENDPROC
 4189:
 4190DEF PROCaccess(f$)
 4191LOCAL L%,P%,keybase%
 4192F=OPENIN(f$+".Colours")
 4193IF F=0 THEN ERROR fatal_err%,f$+"."+FNmsg(18)
 4194PTR#F=35
 4195INPUT#F,S$:$Read%=FNencrypt(S$,FALSE)
 4196INPUT#F,S$:$Write%=FNencrypt(S$,FALSE)
 4197INPUT#F,S$:$Manager%=FNencrypt(S$,FALSE)
 4198FOR I%=9 TO 15
 4199  PROCselect(passW%,I%)
 4200NEXT I%
 4201PROCdeselect(passW%,16)
 4202I%=9
 4203WHILE I%<17 AND NOT EOF#F
 4204  INPUT#F,Z%:PROCset_icon(passW%,I%,Z%)
 4205  I%+=1
 4206ENDWHILE
 4207IF NOT EOF#F THEN INPUT#F,logpath$
 4208PROCclose_file(F)
 4209IF $Manager%="" THEN
 4210  Access%=TRUE:Modify%=TRUE:pw%=0
 4211  PROCresume_opening
 4212  ELSE
 4213  $AccessTitle%="!Powerbase opening "+FNleaf($database%)
 4214  PROCopen_window(accessW%)
 4215  $Password%=""
 4216  PROCset_caret(accessW%,0)
 4217  SYS "Wimp_GetWindowState",,block%
 4218  MOUSE RECTANGLE block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
 4219  REPEAT
 4220  act%=0
 4221  REPEAT
 4222    PROCpoll
 4223  UNTIL accessbutton%>0
 4224  CASE accessbutton% OF
 4225    WHEN 2:PROCclose_window(accessW%)
 4226    present%=FALSE:accessbutton%=0:act%=1
 4227    WHEN 3:
 4228    password$=FNu($Password%)
 4229    CASE password$ OF
 4230      WHEN $Manager%:Access%=TRUE:Modify%=TRUE:act%=2:pw%=3
 4231      WHEN $Write%:Access%=TRUE:Modify%=FALSE:act%=2:pw%=2
 4232      WHEN $Read%:Access%=FALSE:Modify%=FALSE:act%=2:pw%=1
 4233      OTHERWISE:accessbutton%=0:VDU 7
 4234      $FNtext(accessW%,1)="Password not known"
 4235      PROCdcolour(accessW%,1,11,1)
 4236      delay%=TIME+150
 4237      REPEAT
 4238        PROCpoll
 4239      UNTIL TIME>delay%
 4240      $Password%="":PROCredraw_icon(accessW%,0):PROCset_caret(accessW%,0)
 4241      $FNtext(accessW%,1)="Type in your password"
 4242      PROCdcolour(accessW%,1,7,1)
 4243    ENDCASE
 4244  ENDCASE
 4245  UNTIL act%>0
 4246  PROCclose_window(accessW%)
 4247  PROCgetscreensize(W%,H%)
 4248  MOUSE RECTANGLE 0,0,W%,H%
 4249  IF act%=2 THEN PROCresume_opening
 4250ENDIF
 4251ENDPROC
 4252:
 4253DEF PROCresume_opening
 4254SYS "Hourglass_On"
 4255IF FNselected(passW%,16) THEN PROCopen_log
 4256SYS "OS_File",5,f$+".UserFuncs" TO d%
 4257IF d%=1 THEN LIBRARY f$+".UserFuncs"
 4258PROCread_colours($database%+".Colours")
 4259SYS "OS_File",5,f$+".PrintRes.PrintOpts" TO d%
 4260IF d%=1 THEN
 4261  PROCdrag_options(f$+".PrintRes.PrintOpts")
 4262  ELSE PROCdrag_options("<Pbase$Dir>.Resources.PrintOpts")
 4263ENDIF
 4264IF LEFT$(f$,3)="RAM" THEN ram%=TRUE
 4265*Set Alias$Tables Filer_OpenDir <Dbase$Dir>.ValTables
 4266*Set Alias$Resources Filer_OpenDir <Dbase$Dir>.PrintRes
 4267*Set Alias$JobsDone Filer_OpenDir <Dbase$Dir>.PrintJobs
 4268PROClit(menu%(0),1,FALSE)
 4269PROClit(menu%(0),3,TRUE)
 4270PROClit(menu%(0),4,TRUE)
 4271PROClit(menu%(1),6,FNselected(passW%,9))
 4272PROClit(menu%(3),8,FNselected(passW%,15))
 4273PROClit(menu%(7),0,Access%)
 4274PROClit(menu%(7),1,Modify%)
 4275PROClit(menu%(7),2,Access%)
 4276PROClit(menu%(7),3,Access%)
 4277PROClit(menu%(7),4,Access%)
 4278PROClit(menu%(2),0,Access%)
 4279PROClit(menu%(0),2,Modify%)
 4280PROClit(menu%(10),0,Access%)
 4281PROClit(menu%(10),2,Access%)
 4282PROClit(menu%(10),3,Access%)
 4283PROClit(menu%(13),0,Access%)
 4284PROClit(menu%(17),0,Modify%)
 4285PROClit(menu%(3),0,((present% AND 4)>0))
 4286PROClit(menu%(9),1,((present% AND 4)=0))
 4287FOR I%=1 TO 6
 4288  PROClit(menu%(3),I%,(present%=7))
 4289NEXT I%
 4290PROClimit_actions(Access%)
 4291IF present%<4 THEN design%=TRUE
 4292IF present%=5 THEN PROCadjust_on(TRUE)
 4293PROClit(menu%(9),5,FALSE)
 4294fields%=FNget_form(Fptr%)
 4295IF fields%>0 THEN
 4296  starthere%=field%(FNfirst_field)
 4297  PROCfield_menu(fieldmenu%,fields%)
 4298  PROCcreate_named_sliding_block(transanchor%,Length%+1)
 4299ENDIF
 4300IF NOT adjust% THEN PROClit(menu%(9),2,(fields%>0))
 4301PROCload_calcs
 4302CASE present% OF
 4303  WHEN 0:
 4304  $RecInfo%="No record design exists yet"
 4305  FOR I%=1 TO 4
 4306    PROClit(menu%(9),I%,FALSE)
 4307  NEXT I%
 4308  PROCopen_window(mainW%)
 4309  IF !formanchor%=0 THEN
 4310    PROCextend_named_sliding_block(formanchor%,0)
 4311    Fptr%=!formanchor%
 4312    fields%=0:Fieldnumber%=0
 4313  ENDIF
 4314  WHEN 1:
 4315  $RecInfo%="Record design exists, but no datafiles"
 4316  IF FNfirst_field>0 THEN
 4317    PROClit(menu%(9),3,TRUE)
 4318    PROClit(menu%(9),4,TRUE)
 4319  ENDIF
 4320  PROCopen_window(mainW%)
 4321  WHEN 5:
 4322  $RecInfo%="No primary key index file exists yet"
 4323  SYS "OS_File",5,$database%+".Database" TO ,,,,len%
 4324  RA%=(len% DIV Length%)-1:$Records%=STR$(RA%)
 4325  IF FNfirst_field>0 THEN PROCopen_window(mainW%)
 4326  WHEN 7:
 4327  PROClit(menu%(1),7,FNselected(passW%,13))
 4328  PROClit(menu%(1),8,FNselected(passW%,13))
 4329  PROClit(menu%(1),2,FNselected(passW%,14))
 4330  SYS "OS_File",5,$database%+".Database" TO ,,,,len%
 4331  RA%=(len% DIV Length%)-1:$Records%=STR$(RA%)
 4332  PROCopen_index($database%+".PrimaryKey",0)
 4333  key%=0:file%=0:top=8*file%+LH%
 4334  PROCset_keydata(key%)
 4335  keybase%=!keyanchor%(0):IF keybase%!4<=100 AND keybase%!4>0 THEN $Increment%=STR$(keybase%!4) ELSE $Increment%="0"
 4336  f$=$database%+".Indices":R4%=0:Keys%=0
 4337  WHILE R4%<>-1
 4338    Keys%+=1
 4339    SYS "OS_GBPB",9,f$,block%,1,R4%,11 TO ,,K$,,R4%
 4340    IF R4%<>-1 THEN PROCopen_index(f$+"."+K$,Keys%):PROCcolour(Keys%,2)
 4341  ENDWHILE
 4342  Keys%-=1
 4343  IF extrakeys$<>"" THEN PROCsofterror(LEFT$(extrakeys$),96)
 4344  PROCcolour(0,0):PROCcolour(0,1)
 4345  PROCget_tables
 4346  key%=0
 4347  PROCcount(key%,RU%)
 4348  PROCjoke
 4349  PROCshow_windows
 4350ENDCASE
 4351SYS "Hourglass_Off"
 4352$dbase%=MID$($Title%,2)
 4353PROCredraw_icon(-2,pbaseicon%)
 4354f$=$database%+".Choices"
 4355SYS "OS_File",5,f$ TO d%
 4356IF d%=1 THEN PROCget_choices(f$)
 4357SYS "OS_File",5,$database%+".Special" TO d%
 4358IF d%=1 THEN LIBRARY $database%+".Special":PROCcustomise
 4359ENDPROC
 4360:
 4361DEF PROCjoke
 4362S$=$FNval(keypadW%,17)
 4363IF MID$(TIME$,5,6)="01 Apr" AND MID$(TIME$,17,2)<"12" THEN
 4364  S$="Stoilet"+MID$($block%!32,8)
 4365  ELSE S$="Sdelete"+MID$($block%!32,8)
 4366ENDIF
 4367$FNval(keypadW%,17)=S$
 4368ENDPROC
 4369:
 4370DEF PROCget_choices(f$)
 4371LOCAL F,S$,C$,P%
 4372F=OPENIN(f$)
 4373REPEAT
 4374  S$=GET$#F:P%=INSTR(S$," "):C$=MID$(S$,P%+1):S$=LEFT$(S$,P%-1)
 4375  CASE S$ OF
 4376    WHEN "Validate":validate%=(C$="ON"):PROCtick(menu%(2),3,validate%)
 4377    WHEN "Relations":relations%=(C$="ON"):PROCtick(menu%(2),4,relations%)
 4378    WHEN "Warning":delwarn%=(C$="ON"):PROCtick(menu%(10),7,delwarn%)
 4379    WHEN "Autosave":
 4380    CASE LEFT$(C$,4) OF
 4381      WHEN "OFF ":mode%=0:$Interval%="10 min"
 4382      WHEN "WARN":mode%=1:$Interval%=MID$(C$,5)
 4383      WHEN "AUTO":mode%=2:$Interval%=MID$(C$,5)
 4384    ENDCASE
 4385    PROCset_auto(mode%)
 4386    WHEN "Autobalance":
 4387    CASE LEFT$(C$,4) OF
 4388      WHEN "OFF ":PROCset_autobalance(FALSE)
 4389      WHEN "AUTO":$Every%=MID$(C$,5):PROCset_autobalance(TRUE)
 4390    ENDCASE
 4391    WHEN "Separator":
 4392    $Delim%=""
 4393    CASE C$ OF
 4394      WHEN "Comma":sep$=",":P%=0
 4395      WHEN "TAB":sep$=CHR$(9):P%=1
 4396      WHEN "CR":sep$=CHR$(13):P%=2
 4397      WHEN "LF":sep$=CHR$(10):P%=3
 4398      OTHERWISE $Delim%=C$:sep$=C$:P%=4
 4399    ENDCASE
 4400    PROCtick_one(menu%(15),0,3,P%)
 4401    $FNtext(csvW%,14)=C$:PROCredraw_icon(csvW%,14)
 4402    WHEN "Terminator":
 4403    $Termin%=""
 4404    CASE C$ OF
 4405      WHEN "CR":term$=CHR$(13):P%=0
 4406      WHEN "LF":term$=CHR$(10):P%=1
 4407      WHEN "CR LF":term$=CHR$(13)+CHR$(10):P%=2
 4408      WHEN "LF CR":term$=CHR$(10)+CHR$(13):P%=3
 4409      WHEN "CR CR":term$=CHR$(13)+CHR$(13):P%=4
 4410      WHEN "LF LF":term$=CHR$(10)+CHR$(10):P%=5
 4411      OTHERWISE: $Termin%=C$:term$=C$:P%=6
 4412    ENDCASE
 4413    PROCtick_one(menu%(20),0,5,P%)
 4414    $FNtext(csvW%,15)=C$:PROCredraw_icon(csvW%,15)
 4415    WHEN "Quotes":PROCset_icon(csvW%,0,C$="ON")
 4416    WHEN "Header":PROCset_icon(csvW%,1,C$="ON")
 4417    WHEN "Blanks":PROCset_icon(csvW%,2,C$="ON")
 4418    WHEN "Key":PROCset_icon(csvW%,3,C$="ON")
 4419    WHEN "Data":PROCset_icon(csvW%,4,(C$="ON" AND FNselected(csvW%,1)))
 4420    WHEN "Display":PROCset_icon(csvW%,11,C$="ON")
 4421    WHEN "Strip":PROCset_icon(csvW%,16,C$="ON")
 4422    WHEN "CaseSpecific":
 4423    PROCset_icon(matchW%,16,(C$="ON"))
 4424    PROCset_icon(savesubW%,5,(C$="ON"))
 4425    PROCset_icon(changeW%,5,(C$="ON"))
 4426    PROCset_icon(moveW%,9,(C$="ON"))
 4427    PROCset_icon(mergeW%,12,(C$="ON"))
 4428    PROCset_icon(keypadW%,32,(C$="ON"))
 4429    WHEN "Duplication":
 4430    dup%=(C$="ON"):PROCtick(menu%(3),8,dup%)
 4431  ENDCASE
 4432UNTIL EOF#F
 4433PROCicon_bit(22,csvW%,4,(FNselected(csvW%,1)))
 4434PROCclose_file(F)
 4435ENDPROC
 4436:
 4437DEF PROCsave_choices(f$)
 4438LOCAL F,C$
 4439F=OPENOUT(f$)
 4440IF validate%=TRUE THEN C$="ON" ELSE C$="OFF"
 4441BPUT#F,"Validate "+C$
 4442IF relations%=TRUE THEN C$="ON" ELSE C$="OFF"
 4443BPUT#F,"Relations "+C$
 4444IF delwarn%=TRUE THEN C$="ON" ELSE C$="OFF"
 4445BPUT#F,"Warning "+C$
 4446CASE autosave% OF
 4447  WHEN 0:C$="OFF "
 4448  WHEN 1:C$="WARN"+$Interval%
 4449  WHEN 2:C$="AUTO"+$Interval%
 4450ENDCASE
 4451BPUT#F,"Autosave "+C$
 4452CASE autobalance% OF
 4453  WHEN 0:C$="OFF "
 4454  WHEN 1:C$="AUTO"+$Every%
 4455ENDCASE
 4456BPUT#F,"Autobalance "+C$
 4457IF FNselected(csvW%,0) THEN C$="ON" ELSE C$="OFF"
 4458BPUT#F,"Quotes "+C$
 4459IF FNselected(csvW%,1) THEN C$="ON" ELSE C$="OFF"
 4460BPUT#F,"Header "+C$
 4461IF FNselected(csvW%,2) THEN C$="ON" ELSE C$="OFF"
 4462BPUT#F,"Blanks "+C$
 4463IF FNselected(csvW%,3) THEN C$="ON" ELSE C$="OFF"
 4464BPUT#F,"Key "+C$
 4465IF FNselected(csvW%,4) THEN C$="ON" ELSE C$="OFF"
 4466BPUT#F,"Data "+C$
 4467CASE sep$ OF
 4468  WHEN ",":C$="Comma"
 4469  WHEN CHR$(9):C$="TAB"
 4470  WHEN CHR$(10):C$="LF"
 4471  WHEN CHR$(13):C$="CR"
 4472  OTHERWISE:C$=sep$
 4473ENDCASE
 4474BPUT#F,"Separator "+C$
 4475CASE term$ OF
 4476  WHEN CHR$(13):C$="CR"
 4477  WHEN CHR$(10):C$="LF"
 4478  WHEN CHR$(13)+CHR$(10):C$="CR LF"
 4479  WHEN CHR$(10)+CHR$(13):C$="LF CR"
 4480  WHEN CHR$(13)+CHR$(13):C$="CR CR"
 4481  WHEN CHR$(10)+CHR$(10):C$="LF LF"
 4482  OTHERWISE:C$=term$
 4483ENDCASE
 4484BPUT#F,"Terminator "+C$
 4485IF FNselected(csvW%,11) THEN C$="ON" ELSE C$="OFF"
 4486BPUT#F,"Display "+C$
 4487IF FNselected(csvW%,16) THEN C$="ON" ELSE C$="OFF"
 4488BPUT#F,"Strip "+C$
 4489CASE TRUE OF
 4490  WHEN FNselected(matchW%,16),FNselected(savesubW%,5),FNselected(changeW%,5),FNselected(moveW%,9),FNselected(mergeW%,12),FNselected(keypadW%,32):C$="ON"
 4491  OTHERWISE:C$="OFF"
 4492ENDCASE
 4493BPUT#F,"CaseSpecific "+C$
 4494IF dup% THEN C$="ON" ELSE C$="OFF"
 4495BPUT#F,"Duplication "+C$
 4496PROCclose_file(F)
 4497SYS "OS_File",18,f$,&fff
 4498ENDPROC
 4499:
 4500DEF PROCopen_index(f$,key%)
 4501LOCAL keybase%,I%
 4502IF key%>MaxKeys% THEN extrakeys$+=FNleaf(f$)+",":Keys%-=1:ENDPROC
 4503IF keyanchor%(key%) THEN PROCscrap_sliding_block(keyanchor%(key%))
 4504SYS "OS_File",5,f$ TO ,,,,len%
 4505PROCcreate_named_sliding_block(keyanchor%(key%),len%)
 4506SYS "OS_File",255,f$,!keyanchor%(key%)
 4507Index$(key%)=FNleaf(f$)
 4508keybase%=!keyanchor%(key%)
 4509IF key%=0 THEN
 4510  FOR I%=0 TO 5
 4511    $Date%(I%)=$(keybase%+8+9*I%)
 4512  NEXT I%
 4513ENDIF
 4514KF%(key%,0)=keybase%!62
 4515KF%(key%,1)=keybase%!66
 4516KL%(key%)=keybase%?70
 4517case%(key%)=(keybase%?71=255)
 4518FOR I%=0 TO 3
 4519  KW%(key%,I%)=!(keybase%+74+I%*4)
 4520NEXT I%
 4521ENDPROC
 4522:
 4523DEF PROCget_tables
 4524LOCAL lk,F%,d%,R4%,f$,name$
 4525f$=$database%+".ValTables":R4%=0
 4526SYS "OS_File",5,$database%+".Tables" TO d%
 4527IF d%=2 THEN ERROR fatal_err%,FNmsg(18)
 4528LOCAL ERROR
 4529ON ERROR LOCAL:PROCclose_file(lk):PROCwimp_error(FALSE,ERR,ERL,REPORT$)
 4530lk=OPENIN($database%+".Link")
 4531IF lk>0 THEN
 4532  !block%=mainW%
 4533  WHILE NOT EOF#lk
 4534    F%+=1
 4535    INPUT#lk,link$(F%)
 4536    name$=LEFT$(link$(F%))
 4537    IF LEFT$(name$,1)<>"@" THEN
 4538      IF name$<>"" THEN
 4539        IF ASC(name$)<58 THEN name$=MID$(name$,2)
 4540        PROCset_icon_cols(mainW%,field%(F%),fcol%(6))
 4541        IF d%=0 THEN PROCdrag_table(f$+"."+name$)
 4542      ENDIF
 4543    ENDIF
 4544  ENDWHILE
 4545  link$(0)="LOADED"
 4546  PROCclose_file(lk)
 4547ENDIF
 4548REM ### Force loading of unlinked but flagged tables ###
 4549WHILE R4%<>-1
 4550  SYS "OS_GBPB",9,f$,block%,1,R4%,11 TO ,,name$,,R4%
 4551  IF R4%<>-1 THEN IF RIGHT$(name$)="!" THEN PROCdrag_table(f$+"."+name$)
 4552ENDWHILE
 4553RESTORE ERROR
 4554IF extratabs$<>"" THEN PROCsofterror(LEFT$(extratabs$),97)
 4555ENDPROC
 4556:
 4557DEF PROCload_calcs
 4558LOCAL F%,F1%,P%,calc$
 4559update$()=""
 4560cl=OPENIN($database%+".Calc")
 4561IF cl>0 THEN
 4562  WHILE NOT EOF#cl
 4563    F%+=1:F$=STR$~(F%):IF F%<16 THEN F$="0"+F$
 4564    INPUT#cl,calc$:calc$(F%)=calc$
 4565    CASE chartype%(F%) OF
 4566      WHEN 6,7:
 4567      REPEAT
 4568        P%=INSTR(calc$,"$Rf%(",P%)
 4569        IF P%>0 THEN F1%=VAL(MID$(calc$,P%+5)):update$(F1%)+=F$:P%+=5
 4570      UNTIL P%=0
 4571      REPEAT
 4572        P%=INSTR(calc$,"FNn(",P%)
 4573        IF P%>0 THEN F1%=VAL(MID$(calc$,P%+4)):update$(F1%)+=F$:P%+=4
 4574      UNTIL P%=0
 4575      IF INSTR(calc$,"TIME$")>0 THEN update$(0)+=F$
 4576    ENDCASE
 4577  ENDWHILE
 4578  calc$(0)="LOADED"
 4579  PROCclose_file(cl)
 4580ENDIF
 4581ENDPROC
 4582:
 4583DEF FNget_form(RETURN Fptr%)
 4584LOCAL F,L%,N%,I%,V%,x%,y%,xlim%,ylim%,text%
 4585buttonfield%()=0
 4586IF design% THEN dflg%=(winback%<<28)+&7016731:dval%=hand%:func%=1 ELSE dflg%=(winback%<<28)+&7010731:dval%=-1:func%=0
 4587F=OPENIN($database%+".Form")
 4588IF F>0 THEN
 4589  INPUT#F,N%
 4590  IF N%>127 THEN ERROR fatal_err%,FNmsg(98)
 4591  formlen%=&100:forminc%=formlen%:form_incs%=0
 4592  PROCextend_named_sliding_block(formanchor%,formlen%)
 4593  Fptr%=!formanchor%:Rf%(0)=Fptr%:$Rf%(0)="":Fptr%+=1
 4594  Length%=0
 4595  FOR I%=1 TO N%
 4596    INPUT#F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%,char%,fix%,bbox%
 4597    CASE TRUE OF
 4598      WHEN bbox%=0 AND len%=0:width%=0:height%=0
 4599      WHEN bbox%=0:width%=len%*16+16:height%=48
 4600      WHEN bbox%<&10000:width%=bbox%*16+16:height%=48
 4601      OTHERWISE:width%=bbox% AND &FFFF:height%=bbox%>>16
 4602    ENDCASE
 4603    IF design% THEN
 4604      CASE char% OF
 4605        WHEN 0,1,2,3,4,5,6,7,8,39,40:fval%=hand%
 4606        OTHERWISE:fval%=hvalid%(char%)
 4607      ENDCASE
 4608      ELSE
 4609      CASE TRUE OF
 4610        WHEN char%>8 AND char%<32:fval%=FNval(keypadW%,char%-9)
 4611        OTHERWISE:fval%=valid%(char%)
 4612      ENDCASE
 4613    ENDIF
 4614    x%=xf%+width%+32:y%=yf%-16
 4615    IF x%>xlim% THEN xlim%=x%
 4616    IF y%<ylim% THEN ylim%=y%
 4617    y%=yd%-16:IF y%<ylim% THEN ylim%=y%
 4618    Length%+=len%+1
 4619    IF design%=FALSE AND char%=39 THEN len%=(height% DIV 40)*((width% DIV 16)-4)
 4620    len%(I%)=len%:chartype%(I%)=char%:fix%(I%)=fix%
 4621    L%=LEN(Desc$)
 4622    IF Fptr%-!formanchor%+L%+len%+2>formlen% THEN
 4623      form_incs%+=1:formlen%+=forminc%
 4624      PROCextend_named_sliding_block(formanchor%,formlen%)
 4625    ENDIF
 4626    $Fptr%=Desc$
 4627    desc%(I%)=FNcreate_icon(mainW%,xd%,yd%,L%*16+8,48,dflg%,"",Fptr%,dval%,L%)
 4628    Fptr%+=L%+1:Rf%(I%)=Fptr%:$Rf%(I%)=""
 4629    PROCicon_design(char%,func%,width%,height%)
 4630    IF char%=59 AND NOT design% THEN $Fptr%=Tag$(I%):len%=LEN(Tag$(I%)):fval%=!logoanchor%
 4631    field%(I%)=FNcreate_icon(mainW%,xf%,yf%,width%,height%,iflags%,"",Fptr%,fval%,len%+1)
 4632    CASE char% OF
 4633      WHEN 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:buttonfield%(char%-9)=I%
 4634      WHEN 40:Rf%(I%)=FNcreate_anchor("Picture"+STR$(I%))
 4635      WHEN 3,6,46,47,54,56,57:PROCicon_bit(9,mainW%,field%(I%),FALSE)
 4636    ENDCASE
 4637    Fptr%+=len%+1
 4638  NEXT I%
 4639  PROCclose_file(F)
 4640  PROCextend_named_sliding_block(formanchor%,Fptr%-!formanchor%):form_incs%+=1
 4641  PROCsetup_select(N%)
 4642  ELSE N%=0
 4643ENDIF
 4644IF (present% AND 4)=0 THEN xlim%=1279:ylim%=-1023
 4645!block%=0:block%!4=ylim%
 4646block%!8=xlim%:block%!12=0
 4647SYS "Wimp_SetExtent",mainW%,block%
 4648!block%=mainW%
 4649SYS "Wimp_GetWindowState",,block%
 4650block%!4=0
 4651IF ylim%>-840 THEN block%!8=900+ylim% ELSE block%!8=184
 4652IF xlim%<1240 THEN block%!12=xlim% ELSE block%!12=1240
 4653block%!16=900
 4654SYS "Wimp_OpenWindow",,block%
 4655=N%
 4656:
 4657DEF PROCsetup_select(fields%)
 4658LOCAL S$,I%,J%,Fptr%,rows%
 4659selectlen%=&200:selinc%=selectlen%
 4660PROCcreate_named_sliding_block(selanchor%,selectlen%)
 4661Fptr%=!selanchor%
 4662FOR I%=1 TO fields%
 4663  IF Fptr%-!selanchor%+144>selectlen% THEN
 4664    selectlen%+=selinc%
 4665    PROCextend_named_sliding_block(selanchor%,selectlen%)
 4666  ENDIF
 4667  CASE chartype%(I%) OF
 4668    WHEN 3,6,8,46,47,54,56,57:
 4669    rows%+=1:PROClit(menu%(6),6,TRUE)
 4670    handle%=FNcreate_icon(pselectW%,16,-rows%*48-56,240,48,&17000531,"",Fptr%,-1,15)
 4671    S$=$FNtext(mainW%,desc%(I%))
 4672    IF LEN(S$)>8 THEN S$=LEFT$(S$,8)+"  " ELSE S$+=STRING$(10-LEN(S$)," ")
 4673    $Fptr%=S$+Tag$(I%):Fptr%+=LEN($Fptr%)+1
 4674    FOR J%=0 TO 3
 4675      handle%=FNcreate_icon(pselectW%,278+J%*112,-rows%*48-52,44,44,&0740B13B,"",Fptr%,tick%,1)
 4676      $Fptr%="":Fptr%+=1
 4677    NEXT J%
 4678    calcrow%?I%=rows%
 4679    OTHERWISE:calcrow%?I%=0
 4680  ENDCASE
 4681NEXT I%
 4682!block%=0:block%!4=-rows%*48-56
 4683block%!8=700:block%!12=0
 4684SYS "Wimp_SetExtent",pselectW%,block%
 4685ENDPROC
 4686:
 4687DEF PROCenable_row(R%,on%)
 4688LOCAL I%
 4689IF R%>0 THEN
 4690  FOR I%=R%*5-3 TO R%*5
 4691    PROCicon_bit(22,pselectW%,I%,on%)
 4692  NEXT I%
 4693ENDIF
 4694ENDPROC
 4695:
 4696DEF PROCsave_form(f$)
 4697LOCAL F,I%,xd%,yd%,xf%,yf%,w%,h%,bbox%,type%
 4698IF fields%=0 THEN ENDPROC
 4699Length%=0
 4700!block%=mainW%
 4701F=OPENOUT(f$)
 4702PRINT#F,fields%
 4703FOR I%=1 TO fields%
 4704  dicon%=desc%(I%):ficon%=field%(I%)
 4705  block%!4=dicon%:SYS "Wimp_GetIconState",,block%
 4706  xd%=block%!8:yd%=block%!12
 4707  Desc$=$(block%!28)
 4708  block%!4=ficon%:SYS "Wimp_GetIconState",,block%
 4709  xf%=block%!8:yf%=block%!12
 4710  w%=block%!16-block%!8:h%=block%!20-block%!12
 4711  bbox%=(h%<<16)+w%
 4712  PRINT#F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%(I%),chartype%(I%),fix%(I%),bbox%
 4713  Length%+=len%(I%)+1
 4714  field$(I%)="":IF Rf%(I%)>0 AND chartype%(I%)<>40 THEN $Rf%(I%)=""
 4715NEXT I%
 4716PROCclose_file(F)
 4717SYS "OS_File",18,f$,&7f2
 4718PROClit(menu%(0),3,TRUE)
 4719PROClit(menu%(0),4,TRUE)
 4720ENDPROC
 4721:
 4722DEF PROCmake_empty_index(RA%,key%,Z%)
 4723LOCAL I%,K%,P%,KLM%,S$
 4724SYS "Hourglass_On"
 4725S$=STRING$(KL%(key%),".")
 4726KLM%=KL%(key%)+13
 4727P%=LH%+48+(RA%+1)*KLM%
 4728IF Z% THEN PROCcreate_named_sliding_block(keyanchor%(key%),P%)
 4729keybase%=!keyanchor%(key%)
 4730keybase%!0=138
 4731keybase%!4=VAL($Increment%)
 4732$date%=STRING$(6,CHR$(1)):PROCdate(key%)
 4733keybase%!62=KF%(key%,0)
 4734keybase%!66=KF%(key%,1)
 4735keybase%?70=KL%(key%)
 4736keybase%?71=FNselected(keyW%,20)
 4737keybase%?72=0:keybase%?73=0
 4738FOR I%=0 TO 3
 4739  !(keybase%+74+(I%*4))=KW%(key%,I%)
 4740NEXT I%
 4741FOR I%=0 TO 5
 4742  P%=I%*8+LH%
 4743  !(keybase%+P%)=-P%
 4744  !(keybase%+P%+4)=P%
 4745NEXT I%
 4746P%=!keybase%
 4747FOR I%=0 TO RA%-1
 4748  SYS "Hourglass_Percentage",(I%*100) DIV RA%
 4749  !(keybase%+P%)=P%+KLM%
 4750  !(keybase%+P%+4)=0
 4751  $(keybase%+P%+8)=S$
 4752  !(keybase%+P%+KL%(key%)+9)=I%
 4753  P%+=KLM%
 4754NEXT I%
 4755!(keybase%+P%)=0
 4756!(keybase%+P%+4)=0
 4757$(keybase%+P%+8)=S$
 4758!(keybase%+P%+KL%(key%)+9)=0
 4759SYS "Hourglass_Off"
 4760ENDPROC
 4761:
 4762DEF PROCsave_recs(f$,RA%)
 4763LOCAL dbasehandle%,I%,J%,rec$
 4764rec$=STRING$(fields%-1,CHR$(10))
 4765SYS "Hourglass_On"
 4766dbasehandle%=OPENOUT(f$)
 4767FOR I%=0 TO RA%
 4768  PTR#dbasehandle%=I%*Length%
 4769  BPUT#dbasehandle%,rec$
 4770  SYS "Hourglass_Percentage",(I%*100) DIV RA%
 4771NEXT I%
 4772EXT#dbasehandle%=(RA%+1)*Length%
 4773PROCclose_file(dbasehandle%)
 4774SYS "OS_File",18,f$,&7f2
 4775SYS "Hourglass_Off"
 4776ENDPROC
 4777:
 4778DEF PROCclear
 4779LOCAL REC%,action$,ex%,ptr%
 4780Search$=FNparse($FNtext(moveW%,7),FNselected(moveW%,9))
 4781SYS "Wimp_WhichIcon",moveW%,block%,&003F0000,&00210000
 4782movetype%=!block%-1
 4783P%=INSTR(Title$,". ")+2:Title$=MID$(Title$,P%)
 4784IF Title$<>"All records" THEN Title$=" when "+Title$ ELSE Title$=" "+Title$
 4785action$=MID$("Move �DeleteMove �",movetype%*6+7,6)+Title$
 4786IF NOT FNconfirm(action$) THEN ENDPROC
 4787SYS "Hourglass_On"
 4788dbasehandle%=OPENIN($database%+".Database")
 4789PROCearmark
 4790PROCclose_file(dbasehandle%)
 4791ptr%=!tempanchor%
 4792subtotal%=FNcount_recs(key%,zero%)
 4793FOR REC%=0 TO RA%-1
 4794  ex%+=1:SYS "Hourglass_Percentage",(ex%*100) DIV subtotal%
 4795  IF ptr%?REC%=255 THEN
 4796    PROCread(fields%,TRUE,REC%,$database%)
 4797    addr=FNshift(movetype%,key%,0)
 4798  ENDIF
 4799NEXT REC%
 4800PROCscrap_sliding_block(tempanchor%)
 4801SYS "Hourglass_Off"
 4802SYS "Wimp_CreateMenu",,-1
 4803addr=FNmoveto(key%,top,1)
 4804ENDPROC
 4805:
 4806DEF PROCexport_subset(f$)
 4807LOCAL I%,F,R%,recs%,ptr%,count%,subtotal%,blobs%,ex%,Z%,len%,source$,dest$,O$
 4808SYS "OS_CLI","Copy "+$database%+".Form "+f$+".Form ~C~V"
 4809IF link$(0)="LOADED" THEN SYS "OS_CLI","Copy "+$database%+".Link "+f$+".Link ~C~V"
 4810IF calc$(0)="LOADED" THEN SYS "OS_CLI","Copy "+$database%+".Calc "+f$+".Calc ~C~V"
 4811SYS "OS_CLI","Copy "+$database%+".ValTables "+f$+".Valtables ~C~VR"
 4812SYS "OS_CLI","Copy "+$database%+".Colours "+f$+".Colours ~CF~V"
 4813SYS "OS_File",5,$database%+".UserFuncs" TO d%
 4814IF d%=1 THEN SYS "OS_CLI","Copy "+$database%+".UserFuncs "+f$+".UserFuncs ~CF~V"
 4815SYS "OS_File",5,$database%+".UsrSprites" TO d%
 4816IF d%=1 THEN SYS "OS_CLI","Copy "+$database%+".UsrSprites "+f$+".UsrSprites ~CF~V"
 4817SYS "Hourglass_On"
 4818blobs%=FNfind_blobs($database%)
 4819Search$=FNparse($FNtext(savesubW%,0),FNselected(savesubW%,5))
 4820dbasehandle%=OPENIN($database%+".Database")
 4821PROCearmark
 4822F=OPENOUT(f$+".Database")
 4823ptr%=!tempanchor%
 4824subtotal%=FNcount_recs(key%,zero%)
 4825FOR I%=0 TO RA%-1
 4826  IF ptr%?I%=255 THEN
 4827    ex%=-1
 4828    WHILE ex%<blobs%
 4829      ex%+=1:F%=Ext%(ex%)
 4830      PROCcopy_blob($database%,f$,I%,recs%,F%,F%,chartype%(F%))
 4831    ENDWHILE
 4832    PROCreadsmarray(dbasehandle%,I%):PROCwritesmarray(F,recs%)
 4833    count%+=1
 4834    SYS "Hourglass_Percentage",(count%*100) DIV subtotal%
 4835  ENDIF
 4836NEXT I%
 4837PROCscrap_sliding_block(tempanchor%)
 4838F$()="":PROCwritesmarray(F,recs%):EXT#F=Length%*recs%:recs%-=1
 4839FOR K%=0 TO Keys%
 4840  KL%(MaxKeys%+1)=KL%(K%):val$=FNtype(K%)
 4841  KF%(MaxKeys%+1,0)=KF%(K%,0)
 4842  KF%(MaxKeys%+1,1)=KF%(K%,1)
 4843  FOR I%=0 TO 3
 4844    KW%(MaxKeys%+1,I%)=KW%(K%,I%)
 4845  NEXT I%
 4846  PROCmake_empty_index(recs%,MaxKeys%+1,TRUE)
 4847  FOR I%=0 TO recs%-1
 4848    PROCreadsmarray(F,I%)
 4849    KEY$=FNkey2(K%,1)
 4850    PROCinsert(TRUE,KEY$,MaxKeys%+1)
 4851    SYS "Hourglass_Percentage",(I%*100) DIV recs%
 4852  NEXT I%
 4853  keybase%=!keyanchor%(MaxKeys%+1)
 4854  SYS "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(MaxKeys%+1) TO ,,filelength%
 4855  IF K%>0 THEN index$="Indices." ELSE index$=""
 4856  SYS "OS_File",10,f$+"."+index$+Index$(K%),&7f0,,keybase%,keybase%+filelength%
 4857  PROCscrap_sliding_block(keyanchor%(MaxKeys%+1))
 4858NEXT K%
 4859PROCclose_file(F)
 4860PROCclose_file(dbasehandle%)
 4861SYS "OS_File",18,f$+".Database",&7f2
 4862export%=FALSE
 4863SYS "Hourglass_Off"
 4864ENDPROC
 4865:
 4866DEF FNfind_blobs(f$)
 4867LOCAL N%,R4%,S$
 4868N%=-1
 4869WHILE R4%<>-1
 4870  SYS "OS_GBPB",9,f$,block%,1,R4%,11 TO ,,S$,,R4%
 4871  CASE LEFT$(S$,4) OF
 4872    WHEN "Memo":N%+=1:Ext%(N%)=VAL(MID$(S$,5))
 4873    WHEN "Draw":N%+=1:Ext%(N%)=VAL(MID$(S$,5))
 4874    WHEN "Spri":N%+=1:Ext%(N%)=VAL(MID$(S$,7))
 4875  ENDCASE
 4876ENDWHILE
 4877=N%
 4878:
 4879DEF PROCearmark
 4880LOCAL I%,P%
 4881IF tempanchor% THEN PROCscrap_sliding_block(tempanchor%)
 4882PROCcreate_named_sliding_block(tempanchor%,RA%)
 4883ptr%=!tempanchor%
 4884FOR I%=0 TO RA%-1
 4885  ptr%?I%=0
 4886NEXT I%
 4887P%=FNneighbour(key%,top,1)
 4888PROCscan_file("P%<>top",key%,2)
 4889ENDPROC
 4890:
 4891DEF PROCrotate
 4892IF NOT Access% THEN ENDPROC
 4893IF FNconfirm(FNmsg(49))=FALSE THEN ENDPROC
 4894LOCAL keybase%
 4895LOCAL I%,L%,Z%,Q%,R%,S%,key%
 4896FOR key%=0 TO Keys%
 4897  keybase%=!keyanchor%(key%)
 4898  S%=LH%+40
 4899  Z%=keybase%!S%
 4900  FOR I%=S%-8 TO S%-40 STEP-8
 4901    L%=keybase%!I%:R%=keybase%!(I%+4)
 4902    IF L%>0 THEN keybase%!(I%+8)=L% ELSE keybase%!(I%+8)=-(I%+8)
 4903  NEXT I%
 4904  IF Z%>0 THEN keybase%!(S%-40)=Z% ELSE keybase%!(S%-40)=-(S%-40)
 4905  FOR I%=S%-40 TO S% STEP 8
 4906    Q%=I%-8
 4907    IF Q%=S%-48 THEN Q%=S%
 4908    PR%=FNneighbour(key%,I%,0)
 4909    SU%=FNneighbour(key%,I%,1)
 4910    IF PR%>S% THEN keybase%!(PR%+4)=-I%
 4911    IF SU%>S% THEN keybase%!SU%=-I%
 4912  NEXT I%
 4913NEXT key%
 4914$date%=STRING$(6,CHR$(1))
 4915warn%=TRUE
 4916ENDPROC
 4917:
 4918DEF PROCcreate_index
 4919IF indexing% OR printing% THEN ENDPROC
 4920IF Keys%=MaxKeys% THEN PROCsofterror(STR$(Keys%),95):ENDPROC
 4921LOCAL file%,top,P%,KEY$,REC%,val$,zero%,abort%,replace%
 4922newkey%=0
 4923f$=Tag$(Keyfld0%):IF Keyfld1%>0 THEN f$+="+"+Tag$(Keyfld1%)
 4924REPEAT
 4925  newkey%+=1
 4926UNTIL Index$(newkey%)=f$ OR newkey%>Keys%
 4927CASE TRUE OF
 4928  WHEN newkey%<=Keys%:
 4929    IF FNconfirm(FNmsg(50))=TRUE THEN
 4930      PROCscrap_sliding_block(keyanchor%(newkey%))
 4931      replace%=TRUE
 4932      ELSE abort%=TRUE
 4933    ENDIF
 4934  WHEN Keys%>MaxKeys%:Keys%-=1:PROCsofterror("",31):abort%=TRUE
 4935  OTHERWISE:Keys%=newkey%
 4936ENDCASE
 4937IF abort% THEN ENDPROC
 4938block%!8=0:block%!12=keyW%:block%!16=7
 4939SYS "Interface_SlabButton",,block%
 4940PROCcopy_keydata(newkey%)
 4941Index$(newkey%)=f$
 4942f$=$database%+".Indices."+Index$(newkey%)
 4943PROCmake_empty_index(RA%,newkey%,TRUE)
 4944PROClit(menu%(0),2,FALSE)
 4945PROClimit_actions(FALSE)
 4946LOCAL ERROR
 4947ON ERROR LOCAL:RESTORE ERROR:PROCabort_index(f$):ENDPROC
 4948dbasehandle%=OPENIN($database%+".Database")
 4949indexing%=TRUE
 4950PROCupdate_stats
 4951FOR file%=0 TO 5
 4952  top=file%*8+LH%
 4953  P%=FNneighbour(key%,top,1)
 4954  val$=FNtype(newkey%)
 4955  SYS "Hourglass_On"
 4956  PROCscan_file("P%<>top",key%,4)
 4957NEXT file%
 4958PROCend_index
 4959PROCcolour(newkey%,2)
 4960warn%=TRUE
 4961RESTORE ERROR
 4962IF FNselected(passW%,16) THEN BPUT#loghandle%,"Index "+Index$(newkey%)+" created"
 4963ENDPROC
 4964:
 4965DEF PROCabort_index(f$)
 4966PROCend_index
 4967IF replace% THEN
 4968  PROCopen_index(f$,newkey%)
 4969  ELSE
 4970  FOR index%=newkey% TO Keys%
 4971    Index$(newkey%)=Index$(newkey%+1)
 4972  NEXT index%
 4973  PROCscrap_sliding_block(keyanchor%(newkey%))
 4974  Keys%-=1
 4975  newkey%=0
 4976ENDIF
 4977IF ERR=17 THEN
 4978  PROCsofterror("",43)
 4979  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 4980ENDIF
 4981ENDPROC
 4982:
 4983DEF PROCend_index
 4984SYS "Hourglass_Smash"
 4985indexing%=FALSE
 4986PROClimit_actions(Access%)
 4987SYS "Wimp_CreateMenu",,-1
 4988PROClit(menu%(0),2,Modify%)
 4989PROCclose_file(dbasehandle%)
 4990ENDPROC
 4991:
 4992DEF FNshift(t%,k%,m%)
 4993LOCAL a%,key%,fi%,I%,F$
 4994IF NOT Access% THEN=addr
 4995IF REC%=RA% THEN=addr
 4996IF t%=0 AND m%=1 THEN IF FNconfirm(FNmsg(51))=FALSE THEN=addr
 4997FOR key%=0 TO Keys%
 4998  N$=FNkey(key%):kl%=KL%(key%):val$=FNtype(key%)
 4999  PROCdelete(N$,key%)
 5000  IF N$="*Failed*" THEN=addr
 5001  IF key%=k% THEN a%=SU%
 5002  IF t%=1 THEN fi%=(file%+1) MOD 6
 5003  IF t%=-1 THEN fi%=(file%-1-6*(file%=0))
 5004  top=8*fi%+LH%
 5005  CASE t% OF
 5006    WHEN 0:
 5007    FOR I%=1 TO fields%
 5008      V%=chartype%(I%)
 5009      CASE V% OF
 5010        WHEN 36,39:
 5011        IF FNblob_path(FALSE,$database%,REC%,I%,V%,F$)>=0 THEN:SYS "OS_CLI","Delete "+F$
 5012        WHEN 9,37:
 5013        IF FNblob_path(FALSE,$database%,REC%,I%,V%,F$)>=0 THEN:SYS "OS_CLI","Delete "+F$
 5014        WHEN 38:
 5015        IF FNblob_path(FALSE,$database%,REC%,I%,V%,F$)>=0 THEN:SYS "OS_CLI","Delete "+F$
 5016      ENDCASE
 5017    NEXT I%
 5018    OTHERWISE:
 5019    PROCinsert(FALSE,N$,key%):date%?fi%=1:$Date%(fi%)=FNdate
 5020  ENDCASE
 5021  top=8*file%+LH%
 5022  date%?file%=1
 5023  $Date%(file%)=FNdate
 5024NEXT key%
 5025IF FNselected(passW%,16) THEN
 5026  IF t%=0 THEN
 5027    BPUT#loghandle%,logentry$+" Deleted"
 5028    ELSE BPUT#loghandle%,logentry$+" ===> subfile "+STR$(fi%)
 5029  ENDIF
 5030ENDIF
 5031warn%=TRUE
 5032=a%
 5033:
 5034DEF FNtype(key%)
 5035LOCAL F%,V$
 5036IF key%>=0 THEN F%=KF%(key%,0) ELSE F%=-key%
 5037CASE chartype%(F%) OF
 5038  WHEN 3,6,46,47,54,56,57:V$="VAL"
 5039ENDCASE
 5040=V$
 5041:
 5042DEF FNconfirm(string$)
 5043!block%=255
 5044$(block%+4)=string$
 5045SYS "Wimp_ReportError",block%,(1<<0)+(1<<1)+(1<<4),"Powerbase: please confirm:" TO ,result%
 5046=result%=1
 5047:
 5048DEF PROCgetscreensize(RETURN S_Width%,RETURN S_Height%)
 5049LOCAL H1%,V1%,H2%,V2%,End%
 5050H1%=0:V1%=4:H2%=8:V2%=12:End%=16
 5051Mi%!H1%=4:Mi%!V1%=5:Mi%!H2%=11:Mi%!V2%=12:Mi%!End%=-1
 5052SYS "OS_ReadVduVariables",Mi%,Mo%
 5053S_Width%=(1<<(Mo%!H1%))*((Mo%!H2%)+1)
 5054S_Height%=(1<<(Mo%!V1%))*((Mo%!V2%)+1)
 5055ENDPROC
 5056:
 5057DEF PROCmatch
 5058PROCcheck_change
 5059IF NOT common% THEN $FNtext(matchW%,0)=""
 5060PROCredraw_icon(matchW%,0)
 5061PROCopen_window(matchW%)
 5062PROCset_caret(matchW%,0)
 5063$FNtext(matchW%,3)=Tag$(Match_tag%)
 5064PROCtick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
 5065PROCredraw_icon(matchW%,3)
 5066$FNtext(matchW%,14)=""
 5067PROCredraw_icon(matchW%,14)
 5068IF FNselected(matchW%,27) THEN $FNtext(matchW%,25)="Number found" ELSE $FNtext(matchW%,25)="Time taken"
 5069PROCredraw_icon(matchW%,25)
 5070fieldfunc$="match":matching%=TRUE
 5071ENDPROC
 5072:
 5073REM List printing -----------------------------------------------------
 5074:
 5075DEF PROCprint_this
 5076f$=$database%+".PrintRes.Default"
 5077SYS "OS_File",5,f$ TO d%
 5078IF d%=1 THEN PROCdrag_selection(f$)
 5079old%=FNselected_esg(printW%,3)
 5080PROCdeselect(printW%,old%)
 5081PROCselect(printW%,24)
 5082PROCmouse(0,0,4,matchW%,24)
 5083PROCclear_selection
 5084PROCdeselect(printW%,24)
 5085PROCselect(printW%,old%)
 5086ENDPROC
 5087:
 5088DEF PROCdo_it(Search$,displayed%)
 5089IF printing% THEN ENDPROC
 5090LOCAL zero%,P%,rec%
 5091LOCAL ERROR
 5092Form$=printorder$
 5093IF Form$="" THEN
 5094  FOR W%=0 TO 1
 5095    IF KF%(0,W%)>0 THEN
 5096      F$=STR$~(KF%(0,W%)):IF LEN(F$)=1 THEN F$="0"+F$:Form$+=F$
 5097      IF NOT FNselected(matchW%,27) THEN PROCselect(mainW%,field%(KF%(0,W%))):printorder$+=F$:PROClit(menu%(6),7,TRUE):PROClit(menu%(6),8,TRUE)
 5098    ENDIF
 5099  NEXT W%
 5100ENDIF
 5101Heading$="":Hlongest%=0:Sum()=0
 5102Count%=0:examined%=0:printed%=0:sums%=0
 5103PROCread_print_options
 5104IF FNselected(printW%,40) THEN PROCfind_max_lengths(displayed%) ELSE maxlen%()=len%()
 5105LenLine%=FNinclude_fields
 5106numfirst%=FNmargin_warn:IF numfirst%<0 THEN ENDPROC
 5107PROClist_head(0)
 5108SYS "Wimp_GetPointerInfo",,block%
 5109PROClimit_actions(FALSE)
 5110PROClit(menu%(0),2,0)
 5111printing%=TRUE
 5112SYS "OS_ReadMonotonicTime" TO stime%
 5113ON ERROR LOCAL:RESTORE ERROR:PROCabort_printing:ENDPROC
 5114dbasehandle%=OPENIN($database%+".Database")
 5115SYS "Hourglass_On"
 5116CASE TRUE OF
 5117  WHEN displayed%:
 5118  PROCreadsmarray(dbasehandle%,REC%)
 5119  PROCprint_record(REC%)
 5120  WHEN usekey%=-1 OR FNselected(matchW%,23)=FALSE:
 5121  P%=FNneighbour(key%,top,1):PROCscan_file("P%<>top",key%,1)
 5122  OTHERWISE:
 5123  P%=FNsearch(useval$,usekey%,1)
 5124  IF P%>=0 THEN k$=useval$:PROCscan_file("P%<>top AND k$=useval$",usekey%,1)
 5125ENDCASE
 5126RESTORE ERROR
 5127PROCend_printing
 5128ENDPROC
 5129:
 5130DEF PROCabort_printing
 5131PROCend_printing
 5132IF ERR=17 THEN
 5133  PROCsofterror("",29)
 5134  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 5135ENDIF
 5136ENDPROC
 5137:
 5138DEF PROCend_printing
 5139LOCAL time%
 5140IF format$="label" AND thislab%>0 THEN PROCprint_labels
 5141SYS "OS_ReadMonotonicTime" TO etime%
 5142time%=etime%-stime%
 5143IF FNselected(matchW%,27) THEN $FNtext(matchW%,14)=STR$(printed%) ELSE $FNtext(matchW%,14)=STR$(time% DIV 100)+"."+STR$(time% MOD 100)+" sec"
 5144PROCredraw_icon(matchW%,14)
 5145SYS "Hourglass_Smash"
 5146IF format$<>"label" AND displayed%=FALSE THEN PROCtotal_list
 5147CASE reportdest$ OF
 5148  WHEN "Window":
 5149  IF (NOT scripton%) AND (NOT FNselected(matchW%,27)) THEN PROCscreen_list
 5150  PROCextend_named_sliding_block(textanchor%,Count%*LenLine%)
 5151  WHEN "File":
 5152  PROCclose_file(texthandle%):SYS "OS_File",18,f$,&fff
 5153  PROCclose_window(saveW%)
 5154  WHEN "Printer":
 5155  PROCextend_named_sliding_block(textanchor%,Count%*LenLine%+1)
 5156  Start%=!textanchor%:End%=Start%+Count%*LenLine%+1:Type%=&fff
 5157  $Start%=pitch$:?(End%-1)=0:?End%=12
 5158  block%!0=256:block%!12=0:block%!16=&80142:block%!20=0
 5159  block%!24=0:block%!28=0:block%!32=0:block%!36=0:block%!40=&fff
 5160  $(block%+44)="List"
 5161  SYS "Wimp_SendMessage",18,block%,0
 5162ENDCASE
 5163printing%=FALSE:scripton%=FALSE:savetofile%=FALSE
 5164PROClit(menu%(0),2,Modify%)
 5165PROClimit_actions(Access%)
 5166PROCclose_file(dbasehandle%)
 5167ENDPROC
 5168:
 5169DEF PROCfind_max_lengths(displayed%)
 5170LOCAL P%,k$
 5171LOCAL ERROR
 5172ON ERROR LOCAL:RESTORE ERROR:PROCend_find_max:ENDPROC
 5173maxlen%()=0
 5174dbasehandle%=OPENIN($database%+".Database")
 5175SYS "Hourglass_On"
 5176SYS "Hourglass_LEDs",%11
 5177IF displayed% THEN
 5178  PROCreadsmarray(dbasehandle%,REC%)
 5179  PROCget_lengths
 5180  ELSE
 5181  IF usekey%=-1 OR FNselected(matchW%,23)=FALSE THEN
 5182    P%=FNneighbour(key%,top,1)
 5183    PROCscan_file("P%<>top",key%,0)
 5184    ELSE
 5185    P%=FNsearch(useval$,usekey%,1)
 5186    IF P%>=0 THEN
 5187      k$=useval$
 5188      PROCscan_file("P%<>top AND k$=useval$",usekey%,0)
 5189    ENDIF
 5190  ENDIF
 5191ENDIF
 5192SYS "Hourglass_LEDs",%00
 5193SYS "Hourglass_Off"
 5194PROCclose_file(dbasehandle%)
 5195ENDPROC
 5196:
 5197DEF PROCget_lengths
 5198LOCAL I%,L%,F%,l%,F$
 5199I%=-1:L%=LEN(Form$)-1
 5200WHILE I%<L%
 5201  I%+=2:F%=FNfnum(MID$(Form$,I%,2)):F$=F$(F%):l%=LEN(F$)
 5202  IF l%>maxlen%(F%) THEN maxlen%(F%)=l%
 5203ENDWHILE
 5204ENDPROC
 5205:
 5206DEF PROCend_find_max
 5207SYS "Hourglass_Smash"
 5208PROCclose_file(dbasehandle%)
 5209maxlen%()=len%()
 5210IF ERR=17 THEN
 5211  PROCsofterror("",70)
 5212  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 5213ENDIF
 5214ENDPROC
 5215:
 5216DEF PROCprint_record(REC%)
 5217LOCAL I%,F%,N%,F$,SF$,Tab%,n$,y$,base%,pos%
 5218IF format$<>"label" THEN printed%+=1
 5219IF FNselected(matchW%,27) THEN ENDPROC
 5220thisrow%=-1:base%=!lineanchor%:pos%=base%
 5221PROCheap_store(lineanchor%,LenLine%,0,pos%,0,margin$)
 5222FOR I%=1 TO LEN(Form$)-1 STEP 2
 5223  F%=FNfnum(MID$(Form$,I%,2))
 5224  IF format$="label" THEN newline%=NOT newline%
 5225  N%+=1
 5226  IF FNselected(printW%,11) THEN
 5227    F$=FNexpand(F$(F%),link$(F%),Len%,SF$)
 5228    ELSE
 5229    F$=F$(F%):Len%=len%(F%)+2
 5230    CASE chartype%(F%) OF
 5231      WHEN 41,42,43,44,45:
 5232      Z%=FNno_yes(F%,n$,y$)
 5233      IF F$=" " THEN F$=y$ ELSE F$=n$
 5234      WHEN 3,6,8,46,47,54,56,57:
 5235      PROCsums(F$,calcrow%?F%,chartype%(F%))
 5236      IF format$="vert" THEN
 5237        F$=STRING$(len%(F%)-LEN(F$)," ")+F$
 5238        ELSE F$=FNjustify(F$,N%,N%-1)
 5239      ENDIF
 5240    ENDCASE
 5241  ENDIF
 5242  IF FNselected(printW%,12) THEN F$=FNu(F$)
 5243  CASE chartype%(F%) OF
 5244    WHEN 37:F$="<Sprite>"
 5245    WHEN 38:F$="<Drawfile>"
 5246  ENDCASE
 5247  CASE format$ OF
 5248    WHEN "horiz","table":
 5249    PROCheap_store(lineanchor%,LenLine%,0,pos%,0,FNtab(F$,N%))
 5250    WHEN "vert":
 5251    IF FNselected(printW%,2) THEN Head$=$FNtext(mainW%,(desc%(F%))) ELSE Head$=Tag$(F%)
 5252    Head$=margin$+STRING$(Tab%(1)-LEN(Head$)," ")+Head$+" : "
 5253    pos%=base%:L%=LEN(Head$)+LEN(F$)
 5254    PROCheap_store(lineanchor%,LenLine%,0,pos%,0,Head$)
 5255    PROCheap_store(lineanchor%,LenLine%,0,pos%,0,F$)
 5256    PROClist_line(REC%,lineanchor%,L%,32)
 5257    IF chartype%(F%)=36 OR chartype%(F%)=39 THEN PROCprint_memo(REC%,F%)
 5258    PROCextra_lines(linefeed%-1,0)
 5259    WHEN "label":
 5260    IF newline% THEN
 5261      IF (F$<>"" OR FNselected(labelW%,16)=FALSE) AND thisrow%<=labrepl% THEN thisrow%+=1:Label$(thisrow%,thislab%)=F$
 5262      ELSE
 5263      Label$(thisrow%,thislab%)+=spacer$+F$
 5264    ENDIF
 5265  ENDCASE
 5266NEXT I%
 5267CASE format$ OF
 5268  WHEN "horiz":
 5269  PROClist_line(REC%,lineanchor%,pos%-base%,32)
 5270  PROCextra_lines(linefeed%-1,0)
 5271  WHEN "vert":
 5272  PROCrule_off(45)
 5273  WHEN "table":
 5274  colpos%=pos%-base%
 5275  PROCheap_store(lineanchor%,LenLine%,0,pos%,0,column$)
 5276  PROClist_line(REC%,lineanchor%,pos%-base%,32)
 5277  PROCextra_lines(linefeed%-1,colpos%)
 5278  WHEN "label":
 5279  Label$(labrepl%+1,thislab%)=FNkey2(0,1)
 5280  thislab%+=1:IF thislab%>labup% THEN PROCprint_labels
 5281ENDCASE
 5282IF format$<>"label" THEN
 5283  IF (printed% MOD LinesPerPage%)=0 AND FNselected(printW%,10)=FALSE AND displayed%=FALSE THEN
 5284    $(!lineanchor%)=margin$+CHR$(12):PROClist_line(-1,lineanchor%,Lmargin%+1,32)
 5285    PROClist_head(1)
 5286  ENDIF
 5287ENDIF
 5288ENDPROC
 5289:
 5290DEF PROCextra_lines(ex%,tab%)
 5291LOCAL base%,pos%
 5292WHILE ex%>0
 5293  CASE tab% OF
 5294    WHEN 0:PROCrule_off(32)
 5295    OTHERWISE:
 5296    base%=!lineanchor%:pos%=base%
 5297    FOR I%=0 TO tab%-1
 5298      pos%?I%=32
 5299    NEXT I%
 5300    pos%+=tab%
 5301    PROCheap_store(lineanchor%,LenLine%,0,pos%,0,column$)
 5302    PROClist_line(REC%,lineanchor%,pos%-base%,32)
 5303  ENDCASE
 5304  ex%-=1
 5305ENDWHILE
 5306ENDPROC
 5307:
 5308DEF PROCprint_memo(R%,F%)
 5309LOCAL text%,B%,F$,sp%,L%,rem$,base%,pos%,Line$
 5310IF FNblob_path(FALSE,$database%,R%,F%,36,F$)>=0 THEN
 5311  text%=OPENIN(F$)
 5312  WHILE NOT EOF#text%
 5313    Line$=margin$+rem$:L%=LEN(Line$)
 5314    REPEAT
 5315      B%=BGET#text%
 5316      Line$+=CHR$(B%):L%+=1
 5317      IF B%=32 THEN sp%=L%
 5318    UNTIL B%=10 OR L%=LenLine%-3 OR EOF#text%
 5319    CASE TRUE OF
 5320      WHEN B%=10:rem$="":Line$=LEFT$(Line$)
 5321      WHEN EOF#text%:rem$=""
 5322      OTHERWISE:rem$=MID$(Line$,sp%+1):Line$=LEFT$(Line$,sp%-1)
 5323    ENDCASE
 5324    pos%=!lineanchor%
 5325    PROCheap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
 5326    PROClist_line(REC%,lineanchor%,LEN(Line$),32)
 5327  ENDWHILE
 5328  PROCclose_file(text%)
 5329ENDIF
 5330ENDPROC
 5331:
 5332DEF PROCprint_labels
 5333LOCAL I%,Line$,S$,linesprinted%,pos%
 5334FOR I%=0 TO labrepl%-1
 5335  Line$=margin$
 5336  FOR K%=0 TO thislab%-1
 5337    S$=Label$(I%,K%)
 5338    IF FNselected(labelW%,11) THEN
 5339      IF I%=labsubst% AND S$="" THEN S$=Label$(labrepl%,K%)
 5340    ENDIF
 5341    IF K%=thislab%-1 THEN W%=longestfield% ELSE W%=labwidth%
 5342    IF LEN(S$)>W% THEN S$=LEFT$(S$,W%)
 5343    Line$+=S$+STRING$(W%-LEN(S$)," ")
 5344  NEXT K%
 5345  pos%=!lineanchor%
 5346  PROCheap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
 5347  PROClist_line(REC%,lineanchor%,LEN(Line$),32)
 5348  linesprinted%+=1
 5349NEXT I%
 5350IF FNselected(labelW%,13) THEN
 5351  PROCrule_off(32)
 5352  Line$=""
 5353  FOR K%=0 TO thislab%-1
 5354    S$="("+Label$(labrepl%+1,K%)+")"
 5355    Line$+=S$+STRING$(labwidth%-LEN(S$)," ")
 5356  NEXT K%
 5357  pos%=!lineanchor%
 5358  PROCheap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
 5359  PROClist_line(REC%,lineanchor%,LEN(Line$),32)
 5360  linesprinted%+=1
 5361ENDIF
 5362rows_printed%+=1
 5363IF rows_printed%=labrows% THEN
 5364  $(!lineanchor%)=margin$+CHR$(12):PROClist_line(-1,lineanchor%,Lmargin%+1,32)
 5365  PROClist_head(1)
 5366  rows_printed%=0
 5367  ELSE
 5368  REPEAT
 5369    PROCrule_off(32)
 5370    linesprinted%+=1
 5371  UNTIL linesprinted%=labdepth%
 5372ENDIF
 5373thislab%=0:thisrow%=-1:Label$()=""
 5374ENDPROC
 5375:
 5376DEF PROCread_print_options
 5377LOCAL S$
 5378thislab%=0:LinesPerPage%=0
 5379IF usekey%=-1 THEN S$=Index$(key%) ELSE S$=Index$(usekey%)+" index"
 5380Title1$="Ordered by "+S$
 5381IF FNselected(printW%,19) THEN Title1$+=" ("+TIME$+")"
 5382Title2$=$FNtext(printW%,18)
 5383PROClit(menu%(18),1,FNselected(printW%,10))
 5384CASE FNselected_esg(printW%,2) OF
 5385  WHEN 4:cpi%=5:p$="3"
 5386  WHEN 7:cpi%=10:p$="0"
 5387  WHEN 8:cpi%=12:p$="1"
 5388  WHEN 6:cpi%=17:p$="2"
 5389ENDCASE
 5390pitch$=FNpitch(p$)
 5391Lmargin%=VAL($FNtext(printW%,30)):Tab%(0)=Lmargin%
 5392margin$=STRING$(Lmargin%," ")
 5393Tmargin%=VAL($FNtext(printW%,32))
 5394TextLine%=VAL($FNtext(printW%,34))
 5395linefeed%=VAL($FNtext(printW%,17))
 5396colwidth%=VAL($FNtext(printW%,45))
 5397s$=$FNtext(printW%,43):s%=VAL(s$):c$=RIGHT$(s$)
 5398CASE TRUE OF
 5399  WHEN s%=0:spacer$=s$
 5400  WHEN c$<"0" OR c$>"9":spacer$=STRING$(s%,c$)
 5401  OTHERWISE:spacer$=STRING$(s%," ")
 5402ENDCASE
 5403IF linefeed%=0 THEN linefeed%=1:$FNtext(printW%,17)=STR$(linefeed%)
 5404pagelength%=VAL($FNtext(printW%,16))
 5405IF pagelength%=0 THEN pagelength%=70:$FNtext(printW%,16)=STR$(pagelength%)
 5406CASE FNselected_esg(printW%,3) OF
 5407  WHEN 23:
 5408  format$="horiz"
 5409  LinesPerPage%=(pagelength%-Tmargin%-15) DIV linefeed%
 5410  WHEN 24:format$="vert"
 5411  LinesPerPage%=(pagelength%-Tmargin%-15) DIV (linefeed%*(LEN(Form$) DIV 2))
 5412  WHEN 25:
 5413  format$="table"
 5414  columns%=VAL($FNtext(printW%,15))
 5415  column$=STRING$(columns%,"|"+STRING$(colwidth%," "))+"|"
 5416  LinesPerPage%=(pagelength%-Tmargin%-15) DIV linefeed%
 5417  WHEN 26:
 5418  format$="label"
 5419  labwidth%=VAL($FNtext(labelW%,4))*cpi%
 5420  labdepth%=VAL($FNtext(labelW%,6))*6
 5421  labrows%=(pagelength%-Tmargin%) DIV labdepth%
 5422  rows_printed%=0
 5423  labup%=FNselected_esg(labelW%,1)
 5424  labrepl%=VAL($FNtext(labelW%,10))
 5425  labsubst%=VAL($FNtext(labelW%,12))-1
 5426  Title$="":Title1$="":Title2$=""
 5427ENDCASE
 5428CASE FNselected_esg(printW%,4) OF
 5429  WHEN 38:reportdest$="Window"
 5430  WHEN 39:reportdest$="File"
 5431  WHEN 41:reportdest$="Printer"
 5432ENDCASE
 5433IF LinesPerPage%=0 THEN LinesPerPage%=1
 5434ENDPROC
 5435:
 5436DEF FNpitch(p$)
 5437IF FNselected(printW%,42) THEN=CHR$(31)+"9"+p$+"01" ELSE=""
 5438:
 5439DEF PROClist_head(place%)
 5440IF place%=0 THEN
 5441  CASE reportdest$ OF
 5442    WHEN "Window","Printer":
 5443    RU%=VAL($used%)
 5444    IF RU%<5 THEN textblocksize%=5*LenLine% ELSE textblocksize%=(RU% DIV 5)*LenLine%
 5445    textblockinc%=textblocksize%
 5446    PROCextend_named_sliding_block(textanchor%,textblocksize%)
 5447    TextPtr%=!textanchor%
 5448    recblocksize%=400
 5449    PROCextend_named_sliding_block(recanchor%,recblocksize%)
 5450    WHEN "File"::BPUT#texthandle%,pitch$
 5451  ENDCASE
 5452ENDIF
 5453PROCextra_lines(Tmargin%,0)
 5454IF NOT displayed% THEN
 5455  PROCsend_title(Title$)
 5456  PROCsend_title(Title1$)
 5457  PROCsend_title(Title2$)
 5458ENDIF
 5459CASE format$ OF
 5460  WHEN "horiz":
 5461  CASE FNselected(printW%,29) OF
 5462    WHEN TRUE:
 5463    IF FNselected(printW%,42) THEN $(!lineanchor%)=uon$:PROClist_line(-1,lineanchor%,2,32)
 5464    PROClist_line(-1,headanchor%,LenLine%,32)
 5465    WHEN FALSE:
 5466    PROCrule_off(45)
 5467    PROClist_line(-1,headanchor%,LenLine%,32)
 5468    PROCrule_off(45)
 5469  ENDCASE
 5470  WHEN "table":
 5471  PROCrule_off(32):$(TextPtr%-3)=uon$
 5472  PROCrule_off(32)
 5473  PROClist_line(-1,headanchor%,LenLine%,32)
 5474  PROCrule_off(32)
 5475  WHEN "vert":PROCrule_off(45)
 5476ENDCASE
 5477header_lines%=Count%
 5478ENDPROC
 5479:
 5480DEF PROClist_line(REC%,anchor%,length%,char%)
 5481Count%+=1
 5482CASE reportdest$ OF
 5483  WHEN "Window","Printer":
 5484  PROCpad_line(LenLine%-length%-1,char%)
 5485  PROCheap_store(textanchor%,textblocksize%,textblockinc%,TextPtr%,LenLine%,"")
 5486  SYS "Wimp_TransferBlock",mytask%,!anchor%,mytask%,TextPtr%,LenLine%
 5487  IF Count%*4>=recblocksize% THEN
 5488    recblocksize%+=400
 5489    PROCextend_named_sliding_block(recanchor%,recblocksize%)
 5490  ENDIF
 5491  !(!recanchor%+Count%*4)=REC%
 5492  TextPtr%+=LenLine%
 5493  WHEN "File":
 5494  PROCpad_line(LenLine%-length%-1,char%)
 5495  SYS "OS_GBPB",2,texthandle%,!anchor%,LenLine%
 5496ENDCASE
 5497PROCpoll
 5498ENDPROC
 5499:
 5500DEF PROCpad_line(bytes%,char%)
 5501LOCAL base%,ptr%,I%
 5502base%=!anchor%:ptr%=base%+LenLine%-bytes%-1
 5503IF bytes%>0 THEN
 5504  FOR I%=0 TO bytes%-2
 5505    ptr%?I%=char%
 5506  NEXT I%
 5507ENDIF
 5508ptr%?(bytes%-1)=32
 5509ptr%?bytes%=10
 5510ENDPROC
 5511:
 5512DEF PROCrule_off(char%)
 5513LOCAL base%
 5514base%=!lineanchor%
 5515$base%=margin$
 5516PROClist_line(-1,lineanchor%,Lmargin%,char%)
 5517ENDPROC
 5518:
 5519DEF PROCtotal_list
 5520LOCAL C%,L%,base%,pos%,L$
 5521L$=margin$+"Total "+STR$(printed%)
 5522base%=!lineanchor%:pos%=base%
 5523CASE format$ OF
 5524  WHEN "horiz":
 5525  IF NOT FNselected(printW%,29) THEN PROCrule_off(45)
 5526  PROCctotals(numfirst%)
 5527  IF LEN(L$)>LenLine%-2 THEN L$=margin$+STR$(printed%)
 5528  PROCheap_store(lineanchor%,LenLine%,0,pos%,0,L$)
 5529  PROClist_line(REC%,lineanchor%,pos%-base%,32)
 5530  IF NOT FNselected(printW%,29) THEN PROCrule_off(45)
 5531  WHEN "table":
 5532  PROCrule_off(32)
 5533  PROCextra_lines(linefeed%,colpos%)
 5534  PROCctotals(numfirst%)
 5535ENDCASE
 5536PROClit(menu%(6),7,TRUE)
 5537ENDPROC
 5538:
 5539DEF PROCsend_title(T$)
 5540LOCAL C$,L$,P%,L%
 5541IF T$="" THEN ENDPROC
 5542L%=LenLine%-Lmargin%-1
 5543WHILE LEN(T$)>=L%
 5544  P%=LEN(T$)
 5545  REPEAT
 5546    P%-=1:C$=MID$(T$,P%,1)
 5547  UNTIL (INSTR("= ,.;:",C$)>0 AND P%<L%) OR P%=0
 5548  IF P%=0 THEN
 5549    L$=margin$+LEFT$(T$,L%-1):T$=MID$(T$,L%)
 5550    ELSE L$=margin$+LEFT$(T$,P%):T$=MID$(T$,P%+1)
 5551  ENDIF
 5552  $(!lineanchor%)=L$
 5553  PROClist_line(-1,lineanchor%,LEN(L$),32)
 5554ENDWHILE
 5555$(!lineanchor%)=margin$+T$
 5556PROClist_line(-1,lineanchor%,Lmargin%+LEN(T$),32)
 5557ENDPROC
 5558:
 5559DEF PROCscreen_list
 5560!block%=0:block%!4=-Count%*32
 5561block%!8=(LenLine%-1)*16:block%!12=0
 5562SYS "Wimp_SetExtent",listW%,block%
 5563!block%=listW%
 5564SYS "Wimp_GetWindowState",,block%
 5565x%=(block%!12+block%!4) DIV 2:y%=(block%!16+block%!8) DIV 2
 5566block%!12=block%!4+LenLine%*16
 5567IF Count%<28 THEN
 5568  block%!16=block%!8+Count%*32
 5569  ELSE
 5570  block%!16=block%!8+32*28
 5571ENDIF
 5572SYS "Wimp_CloseWindow",,block%
 5573PROCopen_window(listW%)
 5574Listed%=TRUE
 5575PROCshow_menu(menu%(18),x%,y%)
 5576ENDPROC
 5577:
 5578DEF PROCsort_list
 5579LOCAL I%
 5580ind%=!textanchor%+LenLine%*header_lines%-1
 5581FOR I%=0 TO printed%-1
 5582  ind%+=LenLine%
 5583  block%!(I%*4)=ind%
 5584NEXT I%
 5585SYS "OS_HeapSort",printed%,(block% OR (1<<30) OR (1<<31)),4,,!textanchor%+LenLine%*header_lines%,LenLine%
 5586PROCredraw(listW%)
 5587ENDPROC
 5588:
 5589DEF PROClose_list
 5590PROCclose_window(listW%)
 5591PROCscrap_sliding_block(textanchor%)
 5592PROCscrap_sliding_block(recanchor%)
 5593Listed%=FALSE
 5594ENDPROC
 5595:
 5596DEF FNparse(S$,case%)
 5597LOCAL val%,I%,P%,F%,f%,t%,flag%,left%,right%,search$,field$,op$,bo$,target$,targ$,f$,t$,E$,E1$,TitFd$,TitTg$,simple%,date$,SF$
 5598usekey%=-1:useval$=""
 5599IF S$="" OR FNu(S$)="ALL" THEN Title$=MID$(FNleaf($database%),2)+". All records":="TRUE"
 5600simple%=FNsimple(S$)
 5601S$+=" ":Title$=""
 5602WHILE LEN(S$)>0
 5603  W$=FNword(S$," ")
 5604  IF W$="NOT" AND LEFT$(S$,1)<>"(" THEN ERROR moan_err%,FNmsg(60)
 5605  PROCstrip_brackets
 5606  IF LEN(W$)>0 THEN
 5607    flag%=FALSE:TitFd$="":TitTg$="":op$=""
 5608    CASE W$ OF
 5609      WHEN "AND","OR","NOT":E$=W$:Title$+=" "+E$+" "
 5610      WHEN "&":E$="AND":Title$+=" "+E$+" "
 5611      OTHERWISE:
 5612      E$=""
 5613      PROCsplit
 5614      WHILE LEN(field$)>0
 5615        f$=FNu(FNword(field$,","))
 5616        f%=FNfield(f$,TRUE)
 5617        f$="F$("+STR$(f%)+")"
 5618        IF NOT case% THEN f$="FNu("+f$+")"
 5619        IF val% THEN f$="VAL("+f$+")"
 5620        CASE chartype%(f%) OF
 5621          WHEN 5,51,52:f$="FNreverse_date("+f$+")"
 5622        ENDCASE
 5623        targ$=target$
 5624        WHILE LEN(targ$)>0
 5625          t$=FNword(targ$,","):u$=t$
 5626          IF NOT flag% THEN TitTg$+=FNexpand(t$,link$(f%),L%,SF$)+","
 5627          IF chartype%(f%)>40 THEN t$=FNpos_neg(t$)
 5628          CASE chartype%(f%) OF
 5629            WHEN 5,51,52:
 5630            IF FNcheck_date(t$,2,date$)=TRUE THEN t$=FNreverse_date(date$):u$=t$
 5631          ENDCASE
 5632          t$=""""+t$+""""
 5633          IF val% THEN t$="VAL("+t$+")"
 5634          IF f%=0 THEN
 5635            CASE op$ OF
 5636              WHEN "{","=":E1$="FNany("+t$+","""+op$+""")"
 5637              WHEN "}{":ERROR moan_err%,FNmsg(100)
 5638              WHEN "<>":ERROR moan_err%,FNmsg(101)
 5639              OTHERWISE:ERROR moan_err%,""""+op$+""""+FNmsg(102)
 5640            ENDCASE
 5641            ELSE
 5642            CASE op$ OF
 5643              WHEN "{":E1$="INSTR("+f$+","+t$+")>0"
 5644              WHEN "}{":E1$="INSTR("+f$+","+t$+")=0"
 5645              WHEN "=":
 5646              E1$=f$+op$+t$
 5647              IF simple%=TRUE AND usekey%=-1 THEN
 5648                foundkey%=FNis_a_key(f%)
 5649                IF foundkey%>=0 THEN IF KL%(foundkey%)=len%(f%) THEN
 5650                  usekey%=foundkey%:useval$=u$
 5651                ENDIF
 5652              ENDIF
 5653              OTHERWISE:E1$=f$+op$+t$
 5654            ENDCASE
 5655          ENDIF
 5656          IF LEN(E$)+LEN(E1$)>255 THEN ERROR moan_err%,FNmsg(6) ELSE E$+=E1$
 5657          IF LEN(E$)+LEN(bo$)>255 THEN ERROR moan_err%,FNmsg(6) ELSE E$+=bo$
 5658        ENDWHILE
 5659        flag%=TRUE
 5660      ENDWHILE
 5661      E$=LEFT$(E$,LEN(E$)-LEN(bo$))
 5662      IF INSTR(E$,bo$)>0 THEN
 5663        IF LEN(E$)>253 THEN ERROR moan_err%,FNmsg(6) ELSE E$="("+E$+")"
 5664      ENDIF
 5665    ENDCASE
 5666  ENDIF
 5667  PROCadd_brackets
 5668  E$+=" "
 5669  IF LEN(search$)+LEN(E$)>255 THEN
 5670    ERROR moan_err%,FNmsg(6)
 5671    ELSE search$+=E$
 5672    PROCbuild_title
 5673  ENDIF
 5674ENDWHILE
 5675Title$=MID$(FNleaf($database%),2)+". "+Title$
 5676IF usekey%>=0 THEN
 5677  kl%=KL%(usekey%):val$=FNtype(usekey%)
 5678  ELSE PROCdeselect(matchW%,23)
 5679ENDIF
 5680=search$
 5681:
 5682DEF FNpos_neg(s$)
 5683CASE s$ OF
 5684  WHEN "+","y","Y","*","�","T","t":s$=" "
 5685  WHEN "-","n","N","x","X","F","f":s$=""
 5686ENDCASE
 5687=s$
 5688:
 5689DEF FNsimple(S$)
 5690IF INSTR(S$,"=")>0 AND (INSTR(S$,",")=0 AND INSTR(S$,"-")=0 AND INSTR(S$,"OR")=0 AND INSTR(S$,"NOT")=0) THEN=TRUE ELSE=FALSE
 5691:
 5692DEF FNword(RETURN S$,sep$)
 5693LOCAL P%,W$,Q1%,Q2%
 5694REPEAT
 5695  Q1%=INSTR(S$,""""):Q2%=INSTR(S$,"""",Q1%+1)
 5696  P%=INSTR(S$,sep$,P%)
 5697  CASE TRUE OF
 5698    WHEN (P%>Q1% AND P%<Q2%),(P%>Q2% AND Q2%>0):
 5699    S$=LEFT$(S$,Q1%-1)+MID$(S$,Q1%+1,Q2%-Q1%-1)+MID$(S$,Q2%+1)
 5700    P%=Q2%-2:REM ### S$ is now 2 characters shorter ###
 5701    WHEN Q1%>0 AND Q2%=0:PROCsofterror("",93)
 5702    S$=LEFT$(S$,Q1%-1)+MID$(S$,Q1%+1)
 5703  ENDCASE
 5704UNTIL Q1%+Q2%=0 OR P%<Q1%
 5705W$=LEFT$(S$,P%-1)
 5706S$=MID$(S$,P%+1)
 5707=W$
 5708:
 5709DEF FNany(targ$,op$)
 5710LOCAL F%,found%,case%,F$
 5711case%=FNselected(matchW%,16)
 5712REPEAT
 5713  F%+=1:F$=F$(F%)
 5714  IF NOT case% THEN F$=FNu(F$)
 5715  CASE op$ OF
 5716    WHEN "{":IF INSTR(F$,targ$)>0 THEN found%=TRUE
 5717    WHEN "=":IF F$=targ$ THEN found%=TRUE
 5718  ENDCASE
 5719UNTIL found% OR F%=fields%
 5720=found%
 5721:
 5722DEF PROCsplit
 5723LOCAL X$,Q%,I%
 5724X$=">=>=,<=<=,<>,}{,>=,<=,==,>>,<<,{{,=,<,>,{,":P%=0
 5725WHILE LEN(X$)>0 AND P%=0
 5726  Q%=INSTR(X$,","):op$=LEFT$(X$,Q%-1):X$=MID$(X$,Q%+1)
 5727  P%=INSTR(W$,op$)
 5728ENDWHILE
 5729IF P%>0 THEN
 5730  field$=LEFT$(W$,P%-1)
 5731  target$=MID$(W$,P%+LEN(op$))+","
 5732  IF NOT case% THEN target$=FNu(target$)
 5733  field$=FNexp_field
 5734  CASE op$ OF
 5735    WHEN "<>","}{":bo$="AND"
 5736    WHEN "<=",">=":bo$="OR"
 5737    WHEN "<=<=",">=>=":
 5738    op$=LEFT$(op$,2):bo$="AND"
 5739    WHEN "==","<<",">>","{{":
 5740    op$=LEFT$(op$,1):bo$="AND"
 5741    OTHERWISE:bo$="OR"
 5742  ENDCASE
 5743  ELSE ERROR moan_err%,FNmsg(40)
 5744ENDIF
 5745ENDPROC
 5746:
 5747DEF FNexp_field
 5748LOCAL P%,I%,F1%,F2%,F$
 5749P%=INSTR(field$,"-")
 5750IF P%=0 THEN
 5751  F$=field$+","
 5752  ELSE
 5753  F1%=FNfield(LEFT$(field$,P%-1),FALSE)
 5754  F2%=FNfield(MID$(field$,P%+1),FALSE)
 5755  IF F1%>F2% THEN SWAP F1%,F2%
 5756  FOR I%=F1% TO F2%
 5757    F$+=Tag$(I%)+","
 5758  NEXT I%
 5759ENDIF
 5760=F$
 5761:
 5762DEF FNfnum(S$)
 5763LOCAL N%
 5764N%=EVAL("&"+S$)
 5765newline%=((N% AND 128)>0)
 5766=(N% AND 127)
 5767:
 5768DEF FNfield(f$,Z%)
 5769LOCAL I%,F%,desc$
 5770IF f$="@" THEN TitFd$="Any field ":=0
 5771val%=FALSE
 5772IF LEFT$(f$,1)="[" AND RIGHT$(f$)="]" THEN f$=MID$(LEFT$(f$),2):val%=TRUE
 5773WHILE I%<fields%
 5774  I%+=1
 5775  IF FNu(Tag$(I%))=FNu(f$) THEN F%=I%
 5776ENDWHILE
 5777IF F%>0 AND Z%=TRUE THEN
 5778  desc$=$FNtext(mainW%,desc%(F%))
 5779  IF desc$<>"" THEN TitFd$+=desc$+"," ELSE TitFd$+=f$+","
 5780  ELSE IF F%=0 THEN ERROR moan_err%,FNmsg(8)+" ("+f$+")"+CHR$(0)
 5781ENDIF
 5782CASE chartype%(F%) OF
 5783  WHEN 3,6,46,47,54,56,57:val%=TRUE
 5784ENDCASE
 5785=F%
 5786:
 5787DEF FNfind_fields(S$,sep$,RETURN length%)
 5788LOCAL f$,F$,C$,P%,Q%,F%
 5789Q%=1:length%=0
 5790REPEAT
 5791  P%=INSTR(S$,sep$,Q%)
 5792  IF P%>0 THEN f$=MID$(S$,Q%,P%-Q%)
 5793  F%=FNfield(f$,FALSE)
 5794  length%+=len%(F%)+1
 5795  F$=STR$~(F%)
 5796  IF LEN(F$)=1 THEN F$="0"+F$
 5797  C$+=F$
 5798  Q%=P%+1
 5799UNTIL P%=LEN(S$)
 5800length%+=LEN(STR$(RA%))+1
 5801=C$
 5802:
 5803DEF PROCstrip_brackets
 5804WHILE LEFT$(W$,1)="("
 5805  left%+=1:W$=MID$(W$,2)
 5806ENDWHILE
 5807WHILE RIGHT$(W$)=")"
 5808  right%+=1:W$=LEFT$(W$)
 5809ENDWHILE
 5810ENDPROC
 5811:
 5812DEF PROCadd_brackets
 5813WHILE left%>0
 5814  E$="("+E$:left%-=1
 5815ENDWHILE
 5816WHILE right%>0
 5817  E$+=")":right%-=1
 5818ENDWHILE
 5819ENDPROC
 5820:
 5821DEF PROCbuild_title
 5822LOCAL change%
 5823TitFd$=LEFT$(TitFd$):TitTg$=LEFT$(TitTg$)
 5824IF INSTR(TitFd$,",")>0 THEN
 5825  CASE bo$ OF
 5826    WHEN "OR":TitFd$="One of:"+TitFd$
 5827    WHEN "AND":
 5828    CASE op$ OF
 5829      WHEN "<>":TitFd$="None of:"+TitFd$:op$="=":change%=TRUE
 5830      WHEN "}{":TitFd$="None of:"+TitFd$:op$="{":change%=TRUE
 5831      OTHERWISE:TitFd$="All of:"+TitFd$
 5832    ENDCASE
 5833  ENDCASE
 5834ENDIF
 5835IF INSTR(TitTg$,",")>0 THEN
 5836  CASE bo$ OF
 5837    WHEN "OR":TitTg$="One of:"+TitTg$
 5838    WHEN "AND":
 5839    CASE op$ OF
 5840      WHEN "<>":TitTg$="None of:"+TitTg$:op$="="
 5841      WHEN "}{":TitTg$="None of:"+TitTg$:op$="{"
 5842      OTHERWISE:IF change% THEN TitTg$="Any of:"+TitTg$ ELSE TitTg$="All of:"+TitTg$
 5843    ENDCASE
 5844  ENDCASE
 5845ENDIF
 5846CASE op$ OF
 5847  WHEN "{":op$=" contains "
 5848  WHEN "}{":op$=" does not contain "
 5849ENDCASE
 5850Title$+=TitFd$+op$+TitTg$
 5851ENDPROC
 5852:
 5853DEF FNexpand(string$,table$,RETURN ExpLen%,RETURN subst$)
 5854LOCAL p$,s$,start%,F%,I%,T%,ind%,row%,Rec%,Rows%,TabFields%,field%,sfield%,pos%,spos%
 5855subst$=string$
 5856IF table$="" THEN ExpLen%=0:=string$:REM ### Not linked ###
 5857field%=VAL(RIGHT$(table$)):table$=LEFT$(table$)
 5858IF ASC(table$)<58 AND ASC(table$)<>-1 THEN sfield%=VAL(table$):table$=MID$(table$,2) ELSE sfield%=-1
 5859T%=FNtable_number(table$)
 5860IF T%<0 THEN ExpLen%=0:=string$:REM ### Table not found ###
 5861p$=printrel$(T%)
 5862T$=FNtable_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
 5863pos%=FNtable_field(field%,tabfieldlen%())
 5864IF sfield%>=0 THEN spos%=FNtable_field(sfield%,tabfieldlen%())
 5865IF p$<>"" THEN
 5866  ExpLen%=0
 5867  FOR I%=1 TO LEN(p$)
 5868    F%=VAL(MID$(p$,I%,1))
 5869    ExpLen%+=tabfieldlen%(F%)+2
 5870  NEXT I%
 5871  ExpLen%-=2
 5872  ELSE ExpLen%=tabfieldlen%(1)
 5873ENDIF
 5874start%=!tabanchor%(T%)+160-Rec%:ind%=start%+pos%
 5875REPEAT
 5876  row%+=1:ind%+=Rec%
 5877UNTIL row%>Rows% OR $ind%=string$
 5878IF row%>Rows% THEN subst$="":=string$:REM ## String not in table ###
 5879ind%=start%+row%*Rec%:IF sfield%>=0 THEN subst$=$(ind%+spos%)
 5880IF p$<>"" THEN
 5881  FOR I%=1 TO LEN(p$)
 5882    F%=VAL(MID$(p$,I%,1))
 5883    pos%=FNtable_field(F%,tabfieldlen%())
 5884    s$+=FNpad($(ind%+pos%),tabfieldlen%(F%))+"  "
 5885  NEXT I%
 5886  s$=LEFT$(LEFT$(s$))
 5887  ELSE ind%+=tabfieldlen%(0)+1:s$=$ind%:REM ### Return 2nd field ###
 5888ENDIF
 5889=s$
 5890:
 5891DEF FNn(F%)
 5892LOCAL T%,row%,ind%,start%,Rows%,Rec%,TabFields%,pos%,valpos%,N%,field%,name$,table$,S$
 5893IF link$(F%)="" THEN=0
 5894S$=$Rf%(F%)
 5895name$=link$(F%)
 5896field%=VAL(RIGHT$(name$)):table$=LEFT$(name$)
 5897IF ASC(table$)<58 AND ASC(table$)<>-1 THEN table$=MID$(table$,2)
 5898table%=FNtable_number(table$):IF table%<0 THEN=0
 5899T$=FNtable_info(table%,Rows%,TabFields%,Rec%,tabfieldlen%())
 5900IF TabFields%=field% THEN PROCsofterror("",54):=0
 5901pos%=FNtable_field(field%,tabfieldlen%())
 5902valpos%=FNtable_field(field%+1,tabfieldlen%())
 5903start%=!tabanchor%(table%)+160-Rec%
 5904REPEAT row%+=1
 5905  ind%=start%+row%*Rec%+pos%
 5906UNTIL row%>Rows% OR S$=$ind%
 5907IF row%<=Rows% THEN
 5908  ind%=start%+row%*Rec%+valpos%
 5909  N%=VAL($ind%)
 5910  ELSE N%=0
 5911ENDIF
 5912=N%
 5913:
 5914DEF FNpad(s$,L%)
 5915WHILE LEN(s$)<L%
 5916  s$+=" "
 5917ENDWHILE
 5918=s$
 5919:
 5920DEF FNinclude_fields
 5921LOCAL Hdlen%,Datlen%,hlm%,dlm%,I%,F%,f$,Head$,limit%,pad%,col%,fail%,n$,y$,SF$,memo%,base%,pos%,blocksize%,blockinc%
 5922blocksize%=256:blockinc%=blocksize%
 5923PROCextend_named_sliding_block(headanchor%,blocksize%)
 5924base%=!headanchor%:pos%=base%
 5925PROCheap_store(headanchor%,blocksize%,blockinc%,pos%,0,margin$)
 5926FOR I%=1 TO LEN(Form$)-1 STEP 2
 5927  F%=FNfnum(MID$(Form$,I%,2))
 5928  CASE chartype%(F%) OF
 5929    WHEN 36,39:dlm%=TextLine%:memo%=TRUE:PROCset_vert
 5930    WHEN 41,42,43,44,45:
 5931    Datlen%=FNno_yes(F%,n$,y$)
 5932    REM ### Get data length for strings printed for check boxes ###
 5933  ENDCASE
 5934  IF FNselected(printW%,11) THEN
 5935    f$=FNexpand("@#*",link$(F%),Datlen%,SF$)
 5936    IF Datlen%=0 THEN Datlen%=maxlen%(F%)
 5937    ELSE
 5938    Datlen%=maxlen%(F%)
 5939  ENDIF
 5940  IF Datlen%>dlm% THEN dlm%=Datlen%
 5941  IF FNselected(printW%,2) THEN Head$=$FNtext(mainW%,(desc%(F%))) ELSE Head$=Tag$(F%)
 5942  Hdlen%=LEN(Head$)
 5943  IF Hdlen%>hlm% THEN hlm%=Hdlen%
 5944  CASE format$ OF
 5945    WHEN "horiz","table":
 5946    pad%=Datlen%-Hdlen%:IF pad%<0 THEN pad%=0
 5947    CASE chartype%(F%) OF
 5948      WHEN 3,6,46,47,54,56,57:IF FNselected(printW%,11) THEN Head$+=STRING$(pad%," ") ELSE Head$=STRING$(pad%," ")+Head$
 5949      REM ### Right justify numbers unless Expand option on ###
 5950      OTHERWISE:Head$+=STRING$(pad%," ")
 5951    ENDCASE
 5952    PROCheap_store(headanchor%,blocksize%,blockinc%,pos%,0,Head$+spacer$)
 5953    Tab%((I%+1) DIV 2)=pos%-base%
 5954  ENDCASE
 5955NEXT I%
 5956CASE format$ OF
 5957  WHEN "horiz":L%=pos%-base%+2
 5958  WHEN "vert":
 5959  IF memo% THEN
 5960    L%=TextLine%+5
 5961    ELSE L%=Lmargin%+hlm%+dlm%+6
 5962  ENDIF
 5963  Tab%(1)=hlm%
 5964  WHEN "table":
 5965  col%=LEN(column$)
 5966  PROCheap_store(headanchor%,blocksize%,blockinc%,pos%,0,column$+" ")
 5967  ?pos%=10:L%=pos%-base%+1
 5968  WHEN "label":
 5969  longestfield%=dlm%
 5970  L%=labup%*labwidth%+dlm%+Lmargin%+1
 5971ENDCASE
 5972PROCextend_named_sliding_block(lineanchor%,L%+8)
 5973=L%
 5974:
 5975DEF FNno_yes(F%,RETURN no$,RETURN yes$)
 5976LOCAL P%,V$,L%
 5977V$=$FNval(mainW%,field%(F%))
 5978P%=INSTR(V$,"Q")
 5979IF P%>0 THEN
 5980  V$=MID$(V$,P%+1)
 5981  P%=INSTR(V$,",")
 5982  no$=LEFT$(V$,P%-1)
 5983  yes$=MID$(V$,P%+1)
 5984  ELSE no$="N":yes$="Y"
 5985ENDIF
 5986L%=LEN(no$)
 5987IF LEN(yes$)>L% THEN L%=LEN(yes$)
 5988=L%
 5989:
 5990DEF PROCheap_store(anchor%,RETURN size%,inc%,RETURN ptr%,L%,string$)
 5991IF string$<>"" THEN L%=LEN(string$)
 5992IF ptr%-!anchor%+L%+1>size% THEN
 5993  size%+=inc%
 5994  PROCextend_named_sliding_block(anchor%,size%)
 5995ENDIF
 5996IF string$<>"" THEN $ptr%=string$:ptr%+=L%:?ptr%=10
 5997ENDPROC
 5998:
 5999DEF PROCset_vert
 6000PROCdeselect(printW%,23)
 6001PROCdeselect(printW%,25)
 6002PROCdeselect(printW%,26)
 6003PROCselect(printW%,24)
 6004format$="vert"
 6005LinesPerPage%=(pagelength%-10) DIV (linefeed%*(LEN(Form$) DIV 2))
 6006IF LinesPerPage%=0 THEN LinesPerPage%=1
 6007ENDPROC
 6008:
 6009DEF PROCdrag_selection(f$)
 6010LOCAL F%,I%,T%,F
 6011F=OPENIN(f$)
 6012printorder$=GET$#F
 6013T%=-1
 6014WHILE NOT EOF#F
 6015  T%+=1
 6016  printrel$(T%)=GET$#F
 6017ENDWHILE
 6018PROCclose_file(F)
 6019FOR F%=1 TO fields%
 6020  IF chartype%(F%)>40 THEN
 6021    col%=FNget_icon_cols(mainW%,field%(F%))
 6022    IF (col% AND %1111)<2 THEN col%=((col%>>4) OR (col%<<4)) AND %11111111
 6023    PROCset_icon_cols(mainW%,field%(F%),col%)
 6024    ELSE PROCdeselect(mainW%,field%(F%))
 6025  ENDIF
 6026NEXT F%
 6027FOR I%=1 TO LEN(printorder$)-1 STEP 2
 6028  F%=FNfnum(MID$(printorder$,I%,2))
 6029  IF chartype%(F%)>40 THEN
 6030    col%=FNget_icon_cols(mainW%,field%(F%))
 6031    col%=((col%>>4) OR (col%<<4)) AND %11111111
 6032    PROCset_icon_cols(mainW%,field%(F%),col%)
 6033    ELSE PROCselect(mainW%,field%(F%))
 6034  ENDIF
 6035NEXT I%
 6036PROClit(menu%(6),7,TRUE)
 6037PROClit(menu%(6),8,TRUE)
 6038ENDPROC
 6039:
 6040DEF PROCselect_all
 6041LOCAL F%,T%,F$
 6042printorder$=""
 6043FOR F%=1 TO fields%
 6044  CASE chartype%(F%) OF
 6045    WHEN 41,42,43,44,45:
 6046    col%=FNget_icon_cols(mainW%,field%(F%))
 6047    IF (col% AND %1111)>=2 THEN col%=((col%>>4) OR (col%<<4)) AND %11111111
 6048    PROCset_icon_cols(mainW%,field%(F%),col%)
 6049    F$=STR$~(F%):IF LEN(F$)=1 THEN F$="0"+F$
 6050    printorder$+=F$
 6051    WHEN 0,1,2,4,5,7,8:
 6052    IF len%(F%)>0 THEN
 6053      F$=STR$~(F%):IF LEN(F$)=1 THEN F$="0"+F$
 6054      printorder$+=F$
 6055      PROCselect(mainW%,field%(F%))
 6056    ENDIF
 6057    WHEN 36,39,48,49,50,51,52,53,55,58:
 6058    F$=STR$~(F%):IF LEN(F$)=1 THEN F$="0"+F$
 6059    printorder$+=F$
 6060    PROCselect(mainW%,field%(F%))
 6061    WHEN 3,6,46,47,54,56,57:
 6062    F$=STR$~(F%):IF LEN(F$)=1 THEN F$="0"+F$
 6063    printorder$+=F$
 6064    PROCselect(mainW%,field%(F%))
 6065    PROCenable_row(calcrow%?F%,TRUE)
 6066  ENDCASE
 6067NEXT F%
 6068PROClit(menu%(6),7,TRUE)
 6069PROClit(menu%(6),8,TRUE)
 6070ENDPROC
 6071:
 6072DEF PROCclear_selection
 6073LOCAL F%,T%
 6074FOR F%=1 TO fields%
 6075  CASE chartype%(F%) OF
 6076    WHEN 41,42,43,44,45:
 6077    col%=FNget_icon_cols(mainW%,field%(F%))
 6078    IF (col% AND %1111)<2 THEN col%=((col%>>4) OR (col%<<4)) AND %11111111
 6079    PROCset_icon_cols(mainW%,field%(F%),col%)
 6080    WHEN 3,6,8,46,47,54,56,57:PROCenable_row(calcrow%?F%,FALSE):PROCdeselect(mainW%,field%(F%))
 6081    OTHERWISE:PROCdeselect(mainW%,field%(F%))
 6082  ENDCASE
 6083NEXT F%
 6084printorder$=""
 6085FOR T%=0 TO LastTable%
 6086  printrel$(T%)=""
 6087NEXT T%
 6088PROClit(menu%(6),7,FALSE)
 6089PROClit(menu%(6),8,FALSE)
 6090ENDPROC
 6091:
 6092DEF PROCdrag_query(f$)
 6093LOCAL F%,I%,Q$
 6094IF FNselected(keypadW%,22) THEN
 6095  SYS "OS_File",255,f$,FNtext(keypadW%,29)
 6096  PROCset_caret(keypadW%,29)
 6097  PROCredraw_icon(keypadW%,29)
 6098  ELSE
 6099  SYS "OS_File",255,f$,FNtext(matchW%,0)
 6100  PROCopen_window(matchW%)
 6101  PROCset_caret(matchW%,0)
 6102  PROCredraw_icon(matchW%,0)
 6103ENDIF
 6104ENDPROC
 6105:
 6106DEF PROCdrag_options(f$)
 6107LOCAL F,I%,set%,ic%
 6108F=OPENIN(f$)
 6109LOCAL ERROR
 6110ON ERROR LOCAL:RESTORE ERROR:PROCend_load:ENDPROC
 6111RESTORE +0
 6112FOR I%=1 TO 13
 6113  READ ic%
 6114  INPUT#F,set%:PROCset_icon(printW%,ic%,set%)
 6115NEXT I%
 6116FOR I%=1 TO 9
 6117  READ ic%
 6118  INPUT#F,$FNtext(printW%,ic%)
 6119  PROCredraw_icon(printW%,ic%)
 6120NEXT I%
 6121FOR I%=1 TO 7
 6122  READ ic%
 6123  INPUT#F,set%:PROCset_icon(printW%,ic%,set%)
 6124NEXT I%
 6125FOR I%=1 TO 3
 6126  READ ic%
 6127  INPUT#F,set%:PROCset_icon(labelW%,ic%,set%)
 6128NEXT I%
 6129FOR I%=1 TO 4
 6130  READ ic%
 6131  INPUT#F,$FNtext(labelW%,ic%)
 6132NEXT I%
 6133FOR I%=1 TO 3
 6134  READ ic%
 6135  INPUT#F,set%:PROCset_icon(labelW%,ic%,set%)
 6136NEXT I%
 6137PROCclose_file(F)
 6138PROCicon_bit(22,printW%,15,FNselected(printW%,25))
 6139PROCicon_bit(22,printW%,45,FNselected(printW%,25))
 6140PROCicon_bit(22,labelW%,12,FNselected(labelW%,11))
 6141:
 6142DATA 1,2,4,6,7,8,23,24,25,26,38,39,41:REM Radio buttons
 6143DATA 15,16,17,18,30,32,34,43,45:REM Writable fields
 6144DATA 10,11,12,19,29,40,42:REM Option switches
 6145REM In Label Definition window
 6146DATA 0,1,2:REM Radio buttons
 6147DATA 4,6,10,12:REM Writeable fields
 6148DATA 11,13,16:REM Option switches
 6149:
 6150ENDPROC
 6151:
 6152DEF PROCend_load
 6153PROCclose_file(F)
 6154CASE ERR OF
 6155  WHEN 222:PROCwimp_error(TRUE,fatal_err%,ERL,f$+" not found")
 6156  WHEN 6:
 6157  PROCwimp_error(TRUE,moan_err%,ERL,f$+" is too old and is being deleted")
 6158  SYS "OS_CLI","Delete "+f$
 6159  IF FNleaf(f$)="PrintOpts" THEN PROCdrag_options("<Pbase$Dir>.Resources.PrintOpts")
 6160  OTHERWISE:PROCwimp_error(TRUE,moan_err%,ERL,REPORT$)
 6161ENDCASE
 6162ENDPROC
 6163:
 6164DEF PROCdesign_field
 6165LOCAL w%,h%
 6166posx%=x%:posy%=y%
 6167!block%=mainW%:SYS "Wimp_GetWindowState",,block%
 6168x%+=block%!20-block%!4
 6169y%+=block%!24-block%!16
 6170CASE b% AND %1111111 OF
 6171  WHEN 16:
 6172  IF (ic% MOD 2)=1 THEN drag%=6:dragbutt%=16 ELSE drag%=5:dragbutt%=64
 6173  PROCinit_drag(mainW%,ic%,drag%)
 6174  WHEN 2:
 6175  $InsText%=""
 6176  PROCdeselect(createW%,FNselected_esg(createW%,1))
 6177  IF ic%>=0 THEN
 6178    PROClit(menu%(9),0,TRUE)
 6179    !block%=mainW%:block%!4=ic%:SYS "Wimp_GetIconState",,block%
 6180    x%=block%!8:y%=block%!12:w%=block%!16-block%!8:h%=block%!20-block%!12
 6181    Fieldnumber%=FNget_field(ic%)
 6182    type%=chartype%(Fieldnumber%)
 6183    CASE type% OF
 6184      WHEN 0,1,2,3,4,5,6,7,8:
 6185      PROCselect(createW%,21)
 6186      PROCset_limits(1,0,8,8)
 6187      WHEN 36,37,38,39,40:
 6188      PROCselect(createW%,22)
 6189      PROCset_limits(36,36,40,11)
 6190      WHEN 41,42,43,44,45:
 6191      PROCselect(createW%,24)
 6192      PROCset_limits(41,41,45,14)
 6193      WHEN 46,47,48,49,50,51,52,53,54,55,56,57,58,59:
 6194      PROCselect(createW%,35)
 6195      PROCset_limits(46,46,59,16)
 6196      OTHERWISE:
 6197      PROCselect(createW%,23)
 6198      PROCset_limits(9,9,35,19)
 6199    ENDCASE
 6200    fieldtype%=type%
 6201    PROCtick_one(menu%(menunumber%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
 6202    $FtitleText%="Modify field "+STR$(Fieldnumber%)
 6203    $DescText%=$FNtext(mainW%,desc%(Fieldnumber%))
 6204    $TagText%=Tag$(Fieldnumber%)
 6205    $LenText%=STR$(len%(Fieldnumber%))
 6206    $ValText%=vname$(fieldtype%)
 6207    IF fix%(Fieldnumber%)>0 THEN $Fixpt%=STR$(fix%(Fieldnumber%)):PROCselect(createW%,14) ELSE PROCdeselect(createW%,14)
 6208    PROCicon_bit(22,createW%,13,(FNselected(createW%,14)))
 6209    PROCicon_bit(22,createW%,14,(fieldtype%=3 OR fieldtype%=6))
 6210    PROCicon_bit(22,createW%,18,FALSE)
 6211    PROCicon_bit(22,createW%,6,(fieldtype%<9 OR fieldtype%=46 OR fieldtype%=47) AND NOT adjust%)
 6212    PROCicon_bit(22,createW%,30,NOT adjust%)
 6213    PROCicon_bit(22,createW%,29,TRUE)
 6214    PROCicon_bit(22,createW%,15,(fieldtype%=3 OR fieldtype%=47))
 6215    PROCicon_bit(22,createW%,25,(fieldtype%=3))
 6216    C$=calc$(Fieldnumber%):P%=INSTR(C$,"|")
 6217    IF P%>0 THEN $mintext%=LEFT$(C$,P%-1):$maxtext%=MID$(C$,P%+1)
 6218    FOR I%=21 TO 24
 6219      PROCicon_bit(22,createW%,I%,NOT adjust%)
 6220    NEXT I%
 6221    PROCicon_bit(22,createW%,35,NOT adjust%)
 6222    PROCicon_bit(22,createW%,39,NOT adjust%)
 6223    PROCicon_bit(22,createW%,40,NOT adjust%)
 6224    ELSE
 6225    PROClit(menu%(9),0,NOT adjust%)
 6226    PROCselect(createW%,21)
 6227    PROCset_limits(1,0,8,8)
 6228    $FtitleText%="New field "+STR$(fields%+1)
 6229    $DescText%="":$TagText%="":$LenText%=""
 6230    $Fixpt%="2":$mintext%="":$maxtext%=""
 6231    PROCdeselect(createW%,14)
 6232    PROCicon_bit(22,createW%,13,FALSE)
 6233    PROCicon_bit(22,createW%,14,FALSE)
 6234    PROCicon_bit(22,createW%,15,FALSE)
 6235    PROCicon_bit(22,createW%,25,FALSE)
 6236    PROCicon_bit(22,createW%,29,FALSE)
 6237    PROCicon_bit(22,createW%,30,FALSE)
 6238    PROCicon_bit(22,createW%,39,FALSE)
 6239    PROCicon_bit(22,createW%,40,FALSE)
 6240    PROCicon_bit(22,createW%,18,NOT adjust%)
 6241  ENDIF
 6242  $boxX%=STR$(x%):$boxY%=STR$(y%):$boxW%=STR$(w%):$boxH%=STR$(h%)
 6243  PROCclose_window(createW%)
 6244  PROCshow_menu(menu%(9),posx%-64,posy%-20)
 6245  WHEN 64:PROCinit_drag(mainW%,ic%,5):dragbutt%=64
 6246ENDCASE
 6247ENDPROC
 6248:
 6249DEF PROCremove_field(Field%,con%,RETURN Calc$)
 6250LOCAL F%
 6251IF con% THEN IF FNconfirm(FNmsg(53))=FALSE THEN ENDPROC
 6252!block%=mainW%:block%!4=desc%(Field%)
 6253SYS "Wimp_GetIconState",,block%
 6254posx%=block%!8:posy%=block%!12
 6255SYS "Wimp_DeleteIcon",,block%
 6256block%!4=field%(Field%):SYS "Wimp_DeleteIcon",,block%
 6257fields%-=1
 6258Calc$=calc$(Field%)
 6259FOR F%=Field% TO fields%
 6260  desc%(F%)=desc%(F%+1):field%(F%)=field%(F%+1):Tag$(F%)=Tag$(F%+1):len%(F%)=len%(F%+1):chartype%(F%)=chartype%(F%+1):fix%(F%)=fix%(F%+1):calc$(F%)=calc$(F%+1)
 6261NEXT F%
 6262!block%=mainW%
 6263SYS "Wimp_GetWindowState",,block%
 6264posx%-=block%!20-block%!4:posy%-=block%!24-block%!16-48
 6265SYS "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
 6266ENDPROC
 6267:
 6268DEF PROCcreate_field(Before%,x%,y%,Calc$)
 6269LOCAL Desc%,Field%,F%,tag$,Len%,Char%,F%,L%,LF%,x%,y%,width%,height%
 6270IF fields%=MaxFields% THEN PROCsofterror(STR$(MaxFields%),23):ENDPROC
 6271IF $DescText%="" AND $TagText%="" AND fieldtype%<=8 THEN ENDPROC
 6272L%=LEN($DescText%):LF%=VAL($LenText%)
 6273IF LF%>246 THEN PROCsofterror("",64):ENDPROC
 6274x%=VAL($boxX%):y%=VAL($boxY%):width%=VAL($boxW%):height%=VAL($boxH%)
 6275CASE fieldtype% OF
 6276  WHEN 39,40,59:
 6277  LF%=0
 6278  IF width%=0 THEN width%=48
 6279  IF height%=0 THEN height%=48
 6280  WHEN 41,42,43,44,45:LF%=1
 6281  WHEN 8,48,50:LF%=8
 6282  WHEN 49:LF%=15
 6283  WHEN 51:LF%=10
 6284  WHEN 52,58:LF%=24
 6285  WHEN 53,55:LF%=3
 6286  WHEN 54,56:LF%=2
 6287  WHEN 57:LF%=4
 6288ENDCASE
 6289IF LF%>0 AND $TagText%="" THEN PROCsofterror("",16):ENDPROC
 6290REPEAT F%+=1
 6291UNTIL $TagText%=Tag$(F%) OR F%>fields%
 6292IF F%<=fields% AND $TagText%<>"" THEN PROCsofterror("",20):ENDPROC
 6293fields%+=1:Tag$(fields%)=$TagText%:len%(fields%)=LF%
 6294IF width%=0 AND $TagText%<>"" THEN
 6295  IF len%(fields%)<70 THEN width%=len%(fields%)*16+16 ELSE width%=70*16+16
 6296ENDIF
 6297IF height%=0 AND width%>0 THEN height%=48
 6298chartype%(fields%)=fieldtype%
 6299IF FNselected(createW%,14) THEN fix%(fields%)=VAL($Fixpt%) ELSE fix%(fields%)=0
 6300PROCextend_named_sliding_block(formanchor%,Fptr%-!formanchor%+L%+6)
 6301desc%(fields%)=FNcreate_icon(mainW%,x%-L%*16-16,y%,L%*16+8,48,(winback%<<28)+&7016731,"",Fptr%,hand%,L%)
 6302$Fptr%=$DescText%:Fptr%+=L%+1
 6303$Fptr%=""
 6304CASE fieldtype% OF
 6305  WHEN 3:
 6306  min$=$FNtext(createW%,15)
 6307  max$=$FNtext(createW%,25)
 6308  IF min$<>"" OR max$<>"" THEN calc$(fields%)=min$+"|"+max$:calc$(0)="LOADED"
 6309  WHEN 47:
 6310  min$=$FNtext(createW%,15):IF min$="" THEN min$="0"
 6311  calc$(fields%)=min$+"|"+min$:calc$(0)="LOADED"
 6312ENDCASE
 6313CASE fieldtype% OF
 6314  WHEN 0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57:valptr%=hand%
 6315  OTHERWISE:valptr%=hvalid%(fieldtype%)
 6316ENDCASE
 6317PROCicon_design(fieldtype%,1,width%,height%)
 6318field%(fields%)=FNcreate_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
 6319IF fieldtype%=40 THEN Rf%(fields%)=FNcreate_anchor("Picture"+STR$(fields%))
 6320Fptr%+=5
 6321PROCredraw_icon(mainW%,desc%(fields%)):PROCredraw_icon(mainW%,field%(fields%))
 6322IF Before%<fields% AND Before%>0 THEN PROCre_sequence(fields%,Before%,-1)
 6323ENDPROC
 6324:
 6325DEF PROCadjust_field(b%)
 6326LOCAL Dptr%,Fptr%
 6327SYS "Wimp_GetPointerInfo",,block%
 6328newx%=!block%:newy%=block%!4
 6329Fieldnumber%=FNget_field(ficon%)
 6330IF (ficon% MOD 2)=0 THEN
 6331  !block%=mainW%:block%!4=ficon%:SYS "Wimp_GetIconState",,block%
 6332  Dptr%=block%!28:Desc$=$Dptr%:L%=LEN(Desc$)
 6333  SYS "Wimp_DeleteIcon",,block%
 6334  SYS "Wimp_GetWindowState",,block%
 6335  x%=block%!20-block%!4+newx%-oldx%+minx%
 6336  y%=block%!24-block%!16+miny%+newy%-oldy%
 6337  desc%(Fieldnumber%)=FNcreate_icon(mainW%,x%,y%,L%*16+8,48,&17016731,"",Dptr%,hand%,L%)
 6338  ELSE
 6339  !block%=mainW%:block%!4=ficon%:SYS "Wimp_GetIconState",,block%
 6340  Fptr%=block%!28
 6341  CASE b% OF
 6342    WHEN 16:
 6343    SYS "Wimp_DeleteIcon",,block%
 6344    SYS "Wimp_GetWindowState",,block%
 6345    x%=block%!20-block%!4+minx%
 6346    y%=block%!24-block%!16+miny%+newy%-oldy%
 6347    width%=maxx%-minx%+newx%-oldx%:height%=maxy%-miny%+oldy%-newy%
 6348    WHEN 64:
 6349    !block%=mainW%:block%!4=ficon%-1:SYS "Wimp_GetIconState",,block%
 6350    Dptr%=block%!28:Desc$=$Dptr%:L%=LEN(Desc$)
 6351    SYS "Wimp_DeleteIcon",,block%
 6352    !block%=mainW%:block%!4=ficon%:SYS "Wimp_DeleteIcon",,block%
 6353    SYS "Wimp_GetWindowState",,block%
 6354    x%=block%!20-block%!4+newx%-oldx%+minx%-L%*16-16
 6355    y%=block%!24-block%!16+miny%+newy%-oldy%
 6356    desc%(Fieldnumber%)=FNcreate_icon(mainW%,x%,y%,L%*16+8,48,(winback%<<28)+&7016731,"",Dptr%,hand%,L%)
 6357    SYS "Wimp_GetWindowState",,block%
 6358    x%=block%!20-block%!4+newx%-oldx%+minx%
 6359    y%=block%!24-block%!16+miny%+newy%-oldy%
 6360    width%=maxx%-minx%:height%=maxy%-miny%
 6361  ENDCASE
 6362  fieldtype%=chartype%(Fieldnumber%)
 6363  CASE fieldtype% OF
 6364    WHEN 0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57,58:valptr%=hand%
 6365    WHEN 59:valptr%=!logoanchor%
 6366    OTHERWISE:valptr%=hvalid%(fieldtype%)
 6367  ENDCASE
 6368  PROCicon_design(fieldtype%,1,width%,height%)
 6369  field%(Fieldnumber%)=FNcreate_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
 6370  IF fieldtype%=40 THEN Rf%(Fieldnumber%)=FNcreate_anchor("Picture"+STR$(Fieldnumber%))
 6371ENDIF
 6372$boxX%=STR$(x%):$boxY%=STR$(y%):$boxW%=STR$(width%):$boxH%=STR$(height%)
 6373!block%=mainW%
 6374SYS "Wimp_GetWindowState",,block%
 6375SYS "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
 6376ENDPROC
 6377:
 6378DEF PROCswap_fields(F1%,F2%)
 6379IF F2%>0 AND F2%<=fields% THEN
 6380  SWAP desc%(F1%),desc%(F2%)
 6381  SWAP Tag$(F1%),Tag$(F2%)
 6382  SWAP field%(F1%),field%(F2%)
 6383  SWAP len%(F1%),len%(F2%)
 6384  SWAP chartype%(F1%),chartype%(F2%)
 6385  SWAP fix%(F1%),fix%(F2%)
 6386  SWAP calc$(F1%),calc$(F2%)
 6387  PROCclose_window(createW%)
 6388ENDIF
 6389ENDPROC
 6390:
 6391DEF PROCre_sequence(F1%,F2%,Z%)
 6392D%=desc%(F1%):T$=Tag$(F1%):F%=field%(F1%):L%=len%(F1%):C%=chartype%(F1%):f%=fix%(F1%):IF Calc$="" THEN Calc$=calc$(F1%)
 6393FOR I%=F1%+Z% TO F2% STEP Z%
 6394  desc%(I%-Z%)=desc%(I%):Tag$(I%-Z%)=Tag$(I%):field%(I%-Z%)=field%(I%):len%(I%-Z%)=len%(I%):chartype%(I%-Z%)=chartype%(I%):fix%(I%-Z%)=fix%(I%):calc$(I%-Z%)=calc$(I%)
 6395NEXT I%
 6396desc%(F2%)=D%:Tag$(F2%)=T$:field%(F2%)=F%:len%(F2%)=L%:chartype%(F2%)=C%:fix%(F2%)=f%:calc$(F2%)=Calc$
 6397ENDPROC
 6398:
 6399DEF PROCicon_design(char%,func%,RETURN w%,RETURN h%)
 6400CASE func% OF
 6401  WHEN 0:bfg%=&1700A53B:ffg%=&0700A535:IF logosloaded% THEN lfg%=&0000011A ELSE lfg%=ffg%
 6402  WHEN 1:bfg%=&1700653B:ffg%=&07006535:IF logosloaded% THEN lfg%=&0000611E ELSE lfg%=ffg%
 6403ENDCASE
 6404CASE char% OF
 6405  WHEN 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
 6406  !block%=keypadW%:block%!4=char%-9:SYS "Wimp_GetIconState",,block%
 6407  w%=block%!16-block%!8:h%=block%!20-block%!12:iflags%=bfg%
 6408  WHEN 32,33,34:w%=112:h%=44:iflags%=bfg%
 6409  WHEN 35:w%=80:h%=64:iflags%=bfg%
 6410  WHEN 31:w%=44:h%=44:iflags%=&1700B53B
 6411  WHEN 36,37,38:w%=48:h%=44:iflags%=bfg%
 6412  WHEN 39:iflags%=ffg%
 6413  WHEN 40:IF func%=0 THEN iflags%=&0700A53E ELSE iflags%=ffg%
 6414  WHEN 41,42,43,44,45:w%=52:h%=52:iflags%=&1700B53B
 6415  WHEN 59:iflags%=lfg%
 6416  OTHERWISE:iflags%=ffg%
 6417ENDCASE
 6418IF w%=0 AND h%=0 THEN iflags%=&00000000
 6419ENDPROC
 6420:
 6421DEF FNget_field(ic%)
 6422LOCAL F%
 6423REPEAT F%+=1
 6424UNTIL field%(F%)=ic% OR desc%(F%)=ic%
 6425=F%
 6426:
 6427DEF PROCadjust_on(on%)
 6428design%=on%:adjust%=on%
 6429PROClit(menu%(9),5,on%)
 6430PROClit(menu%(9),1,NOT on%)
 6431PROClit(menu%(9),2,NOT on%)
 6432PROClit(menu%(9),3,NOT on%)
 6433PROClit(menu%(9),4,NOT on%)
 6434PROCicon_bit(22,createW%,6,NOT on%)
 6435ENDPROC
 6436:
 6437DEF PROCchange_length(NL%,msg%)
 6438LOCAL EX%,klm%,S$,N%
 6439EX%=NL%-RA%
 6440IF EX%=0 THEN ENDPROC
 6441dbasehandle%=OPENUP($database%+".Database")
 6442PROCreadsmarray(dbasehandle%,RA%)
 6443CASE TRUE OF
 6444  WHEN NOT msg%:PROCextend_dbase
 6445  WHEN (EX%>0):
 6446  IF FNconfirm("Extend file from "+STR$(RA%)+" to "+STR$(NL%)+" records")=TRUE THEN PROCextend_dbase
 6447  WHEN (EX%<0):
 6448  IF FNconfirm("Shorten file from "+STR$(RA%)+" to "+STR$(NL%)+" records")=TRUE THEN PROCshorten_dbase
 6449ENDCASE
 6450$Records%=STR$(RA%):N%=RA%
 6451PROCwritesmarray(dbasehandle%,N%)
 6452PROCclose_file(dbasehandle%)
 6453IF msg% THEN addr=FNmoveto(key%,top,1)
 6454ENDPROC
 6455:
 6456DEF PROCextend_dbase
 6457LOCAL end%,P%,I%,key%,keybase%,KLM%,S$
 6458FOR key%=0 TO Keys%
 6459  S$=STRING$(KL%(key%),".")
 6460  KLM%=KL%(key%)+13
 6461  P%=LH%+48+(NL%+1)*KLM%
 6462  PROCextend_named_sliding_block(keyanchor%(key%),P%)
 6463  keybase%=!keyanchor%(key%)
 6464  P%=LH%+48+RA%*KLM%
 6465  FOR I%=RA% TO EX%+RA%-1
 6466    !(keybase%+P%)=P%+KLM%
 6467    !(keybase%+P%+4)=0
 6468    $(keybase%+P%+8)=S$
 6469    !(keybase%+P%+KL%(key%)+9)=I%
 6470    P%+=KLM%
 6471  NEXT I%
 6472  !(keybase%+P%)=0
 6473  !(keybase%+P%+4)=0
 6474  $(keybase%+P%+8)=S$
 6475  !(keybase%+P%+KL%(key%)+9)=0
 6476NEXT key%
 6477end%=EXT#dbasehandle%
 6478FOR I%=0 TO EX%-1
 6479  PTR#dbasehandle%=end%+I%*Length%
 6480  FOR J%=1 TO fields%
 6481    BPUT#dbasehandle%,""
 6482  NEXT J%
 6483NEXT I%
 6484PTR#dbasehandle%=end%+EX%*Length%
 6485RA%=NL%
 6486ENDPROC
 6487:
 6488DEF PROCshorten_dbase
 6489LOCAL P%,L%,R%,s$,key%,keybase%,S$
 6490FOR key%=0 TO Keys%
 6491  S$=STRING$(KL%(key%),".")
 6492  KLM%=KL%(key%)+13
 6493  keybase%=!keyanchor%(key%)
 6494  s$=$(keybase%+LH%+56+NL%*KLM%)
 6495  IF s$<>S$ THEN IF FNconfirm(FNmsg(52))=FALSE THEN ENDPROC
 6496  P%=LH%+48+NL%*KLM%
 6497  !(keybase%+P%)=0
 6498  !(keybase%+P%+4)=0
 6499  $(keybase%+P%+8)=S$
 6500  !(keybase%+P%+KL%(key%)+9)=0
 6501NEXT key%
 6502EXT#dbasehandle%=Length%*(NL%+1)
 6503RA%=NL%
 6504ENDPROC
 6505:
 6506DEF PROCcopy_database_spritefile(path$,leaf$)
 6507LOCAL sprites%
 6508PROCcreate_named_sliding_block(sprsanchor%,1024)
 6509REM ### This is a temporary sprite area used simply to hold ###
 6510REM ### the sprite 'new_appl' whilst it is renamed and saved ###
 6511sprites%=!sprsanchor%
 6512!sprites%=1024
 6513sprites%!8=16
 6514REM ### Initialise sprite area ###
 6515SYS "OS_SpriteOp",&109,sprites%
 6516REM ### Load !Sprites file from Resources ###
 6517SYS "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites"
 6518REM ### Rename sprite 'new_appl' to new database name ###
 6519SYS "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
 6520REM ### Save spritefile (with renamed new_appl) as !Sprites ###
 6521SYS "OS_SpriteOp",&10C,sprites%,path$+".!Sprites"
 6522REM ### Do same for hi-res sprite ###
 6523SYS "OS_SpriteOp",&109,sprites%
 6524SYS "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites22"
 6525SYS "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
 6526SYS "OS_SpriteOp",&10C,sprites%,path$+".!Sprites22"
 6527PROCscrap_sliding_block(sprsanchor%)
 6528ENDPROC
 6529:
 6530DEF PROCdefaults(f$,N%,key%)
 6531$Records%=STR$(N%)
 6532PROCmake_empty_index(N%,key%,TRUE)
 6533PROCsave_recs(f$+".Database",N%)
 6534present%=7:PROCsave_keys
 6535design%=FALSE
 6536PROCget_it_in(f$)
 6537PROClit(menu%(0),2,TRUE)
 6538ENDPROC
 6539:
 6540DEF PROCdefault_key
 6541LOCAL F%
 6542F%=FNfirst_field
 6543CASE TRUE OF
 6544  WHEN chartype%(F%)=3:KL%(0)=len%(F%)
 6545  WHEN len%(F%)>3:KL%(0)=4
 6546  OTHERWISE:KL%(0)=len%(F%)
 6547ENDCASE
 6548Index$(0)="PrimaryKey"
 6549key%=0
 6550KW%()=0:KW%(key%,0)=KL%(key%)
 6551KF%(key%,0)=F%:KF%(key%,1)=0
 6552PROCset_keydata(key%)
 6553ENDPROC
 6554:
 6555DEF PROCnew_tree(f%)
 6556LOCAL REC%,I%,ptr%,file%,old$
 6557old$="Length: "+STR$(KL%(0))+", Field(s): "+Tag$(KF%(0,0))+" "+Tag$(KF%(0,1))+", Chars: "+STR$(KW%(0,0))+","+STR$(KW%(0,1))+","+STR$(KW%(0,2))+","+STR$(KW%(0,3))
 6558d%=FNselected(keyW%,9):s%=FNselected(keyW%,8)
 6559IF d% THEN f%=0
 6560M$="Build index with "
 6561IF s% THEN M$+="records in same subfiles" ELSE M$+="all records in subfile "+STR$(f%)
 6562M$+=" of current database"
 6563IF d% THEN M$+=", also restoring 'deleted' records."
 6564IF d% OR NOT s% THEN M$+=" WARNING! Other indices will need rebuilding!"
 6565IF NOT FNconfirm(M$)=TRUE THEN ENDPROC
 6566PROCmark_files(0,RA%,NOT d%,s%,f%)
 6567PROCcopy_keydata(0)
 6568RA%=VAL($Records%):f$=$database%
 6569PROCscrap_sliding_block(keyanchor%(0))
 6570PROCmake_empty_index(RA%,0,TRUE)
 6571PROCclose_window(keyW%)
 6572PROCredraw(keypadW%)
 6573ptr%=!tempanchor%
 6574PROCpoll:PROCpoll
 6575SYS "Hourglass_On"
 6576dbasehandle%=OPENIN($database%+".Database")
 6577FOR REC%=0 TO RA%-1
 6578  file%=ptr%?REC%
 6579  IF file%<>255 THEN
 6580    top=8*file%+LH%
 6581    PROCreadsmarray(dbasehandle%,REC%)
 6582    KEY$=FNkey2(0,1)
 6583    kl%=KL%(0):val$=FNtype(0)
 6584    IF KEY$<>"" THEN PROCinsert(FALSE,KEY$,0)
 6585  ENDIF
 6586  SYS "Hourglass_Percentage",(REC%*100) DIV RA%
 6587NEXT REC%
 6588PROCclose_file(dbasehandle%)
 6589newtree%=FALSE:design%=FALSE:adjust%=FALSE
 6590PROCscrap_sliding_block(tempanchor%)
 6591SYS "Hourglass_Off"
 6592present%=7
 6593IF FNselected(passW%,16) THEN
 6594  BPUT#loghandle%,"Primary key altered. Previous structure was:"
 6595  BPUT#loghandle%,old$
 6596ENDIF
 6597SYS "Wimp_CreateMenu",,-1
 6598block%!8=0:block%!12=wi%:block%!16=ic%
 6599SYS "Interface_SlabButton",,block%
 6600PROCget_it_in($database%)
 6601ENDPROC
 6602:
 6603DEF PROCreformat(f$)
 6604LOCAL I%,F,REC%,dfields%,DLength%,chdd,z%,blobs%,ex%
 6605LOCAL DTag$(),F%(),F1%(),L%(),l$(),c$()
 6606F$(0)=""
 6607SYS "OS_File",5,f$+".Form" TO z%
 6608CASE TRUE OF
 6609  WHEN z%<>1:PROCsofterror("",19)
 6610  WHEN f$=$database%:PROCsofterror("",36)
 6611  OTHERWISE
 6612  blobs%=FNfind_blobs($database%)
 6613  F=OPENIN(f$+".Form")
 6614  INPUT#F,dfields%
 6615  DIM DTag$(dfields%),F%(dfields%),F1%(fields%),L%(dfields%),l$(dfields%),c$(dfields%)
 6616  FOR I%=1 TO dfields%
 6617    INPUT#F,Desc$,DTag$(I%),xd%,yd%,xf%,yf%,L%(I%),char%,extra%,extra%
 6618    DLength%+=L%(I%)+1
 6619  NEXT I%
 6620  CLOSE#F
 6621  chdd=OPENOUT(f$+".Database")
 6622  PROCcompare
 6623  SYS "Hourglass_On"
 6624  FOR REC%=0 TO RA%
 6625    PTR#chdd=REC%*DLength%
 6626    PROCread(fields%,FALSE,REC%,$database%)
 6627    FOR I%=1 TO dfields%
 6628      S$=field$(F%(I%))
 6629      IF LEN(S$)>L%(I%) THEN S$=LEFT$(S$,L%(I%))
 6630      BPUT#chdd,S$
 6631    NEXT I%
 6632    ex%=-1
 6633    WHILE ex%<blobs%
 6634      ex%+=1:F%=Ext%(ex%)
 6635      PROCcopy_blob($database%,f$,REC%,REC%,F%,F1%(F%),chartype%(F%))
 6636    ENDWHILE
 6637    SYS "Hourglass_Percentage",(REC%*100) DIV RA%
 6638  NEXT REC%
 6639  SYS "Hourglass_Off"
 6640  PROCclose_file(chdd)
 6641  SYS "OS_File",18,f$+".Database",&7f2
 6642  SYS "OS_CLI","Copy "+$database%+".PrimaryKey "+f$+".PrimaryKey ~C~V"
 6643  SYS "OS_CLI","Copy "+$database%+".Colours "+f$+".Colours ~C~V"
 6644  SYS "OS_CLI","Copy "+$database%+".ValTables "+f$+".ValTables ~CR~V"
 6645  SYS "OS_CLI","Copy "+$database%+".Indices "+f$+".Indices ~CR~V"
 6646  SYS "OS_CLI","Copy "+$database%+".PrintRes "+f$+".PrintRes ~CR~V"
 6647  IF link$(0)="LOADED" THEN
 6648    lk=OPENOUT(f$+".Link")
 6649    FOR F%=1 TO dfields%
 6650      PRINT#lk,l$(F%)
 6651    NEXT F%
 6652    PROCclose_file(lk)
 6653  ENDIF
 6654  IF calc$(0)="LOADED" THEN
 6655    cl=OPENOUT(f$+".Calc")
 6656    FOR F%=1 TO dfields%
 6657      PRINT#cl,c$(F%)
 6658    NEXT F%
 6659    PROCclose_file(cl)
 6660  ENDIF
 6661  PROCclose_window(reformW%)
 6662ENDCASE
 6663reform$=""
 6664IF FNselected(passW%,16) THEN BPUT#loghandle%,"Record structure changed"
 6665ENDPROC
 6666:
 6667DEF PROCcompare
 6668LOCAL source%,dest%
 6669FOR dest%=1 TO dfields%
 6670  source%=fields%+1
 6671  REPEAT
 6672    source%-=1
 6673  UNTIL source%=0 OR Tag$(source%)=DTag$(dest%)
 6674  F%(dest%)=source%:F1%(source%)=dest%
 6675  IF source%>0 THEN
 6676    l$(dest%)=link$(source%)
 6677    c$(dest%)=calc$(source%)
 6678  ENDIF
 6679NEXT dest%
 6680ENDPROC
 6681:
 6682DEF PROCmerge_files(f$,fi%)
 6683LOCAL Rec%,ptr%,file%,d%,s%,z%,RUM%,RAM%,NL%,ex%,blobs%
 6684SYS "OS_File",5,f$+".Database" TO z%
 6685CASE TRUE OF
 6686  WHEN z%<>1:PROCsofterror("",29)
 6687  WHEN f$=$database%:PROCsofterror("",15)
 6688  WHEN NOT FNidentical:PROCsofterror("",21)
 6689  OTHERWISE
 6690  s%=FNselected(reformW%,2):d%=FNselected(reformW%,3)
 6691  IF d% THEN fi%=0
 6692  M$="Merge "+f$+" with "
 6693  IF s% THEN M$+="corresponding subfiles" ELSE M$+="subfile "+STR$(fi%)
 6694  M$+=" of current database"
 6695  IF d% THEN M$+=", also restoring deleted records"
 6696  IF d% OR NOT s% THEN M$+=". WARNING! Indices will need rebuilding!"
 6697  IF FNconfirm(M$)=TRUE THEN
 6698    SYS "OS_File",5,f$+".Database" TO ,,,,len%
 6699    RAM%=(len% DIV Length%)-1
 6700    PROCopen_index(f$+".PrimaryKey",MaxKeys%+1)
 6701    PROCmark_files(MaxKeys%+1,RAM%,NOT d%,s%,fi%)
 6702    keybase%=!keyanchor%(MaxKeys%+1)
 6703    PROCcount(MaxKeys%+1,RUM%):PROCcount(0,RU%)
 6704    NL%=RU%+RUM%
 6705    SYS "Hourglass_On"
 6706    IF NL%>RA% THEN PROCchange_length(NL%,FALSE)
 6707    blobs%=FNfind_blobs($database%)
 6708    ptr%=!tempanchor%
 6709    FOR Rec%=0 TO RAM%-1
 6710      file%=ptr%?Rec%
 6711      IF file%<>255 THEN
 6712        top=8*file%+LH%
 6713        PROCread(fields%,FALSE,Rec%,f$)
 6714        PROCwrite(fields%,key%)
 6715        ex%=-1
 6716        WHILE ex%<blobs%
 6717          ex%+=1:F%=Ext%(ex%)
 6718          PROCcopy_blob(f$,$database%,Rec%,REC%,F%,F%,chartype%(F%))
 6719        ENDWHILE
 6720        SYS "Hourglass_Percentage",(Rec%*100) DIV RUM%
 6721      ENDIF
 6722    NEXT Rec%
 6723    SYS "Hourglass_Off"
 6724    PROCclose_window(reformW%)
 6725    PROCscrap_sliding_block(tempanchor%)
 6726    PROCscrap_sliding_block(keyanchor%(MaxKeys%+1))
 6727    file%=fi%:top=8*file%+LH%
 6728    addr=FNmoveto(key%,top,1)
 6729  ENDIF
 6730ENDCASE
 6731reform$=""
 6732IF FNselected(passW%,16) THEN BPUT#loghandle%,"Records merged from "+f$
 6733ENDPROC
 6734:
 6735DEF FNidentical
 6736LOCAL I%,F,dfields%,different%
 6737F=OPENIN(f$+".Form")
 6738INPUT#F,dfields%
 6739IF dfields%<>fields% THEN different%=TRUE
 6740WHILE I%<fields% AND NOT different%
 6741  I%+=1
 6742  INPUT#F,Desc$,Tag$,xd%,yd%,xf%,yf%,len%,char%,extra%,extra%
 6743  IF len%<>len%(I%) THEN different%=TRUE
 6744ENDWHILE
 6745CLOSE#F
 6746=NOT different%
 6747:
 6748DEF PROCmark_files(key%,RA%,d%,s%,f%)
 6749LOCAL P%,I%,M,file%,top,ptr%
 6750PROCcreate_named_sliding_block(tempanchor%,RA%+1)
 6751SYS "Hourglass_On"
 6752ptr%=!tempanchor%
 6753FOR I%=0 TO RA%-1
 6754  ptr%?I%=d%
 6755NEXT I%
 6756IF d% THEN
 6757  FOR file%=0 TO 5
 6758    top=8*file%+LH%
 6759    P%=FNneighbour(key%,top,1)
 6760    WHILE P%<>top
 6761      S%=FNrec_no(k$,key%,P%)
 6762      IF s% THEN ptr%?S%=file% ELSE ptr%?S%=f%
 6763      P%=FNneighbour(key%,P%,1)
 6764    ENDWHILE
 6765  NEXT file%
 6766ENDIF
 6767SYS "Hourglass_Off"
 6768ENDPROC
 6769:
 6770DEF PROCprint_tree(key%,file%,PR$)
 6771LOCAL L%(),COL%,levels%,depth%
 6772PROCread_print_options
 6773reportdest$="Window"
 6774keybase%=!keyanchor%(key%)
 6775P%=!(keybase%+top)
 6776SYS "Hourglass_On"
 6777PROCtraverse(P%,FALSE)
 6778levels%=depth%-2:COL%=0
 6779DIM L%(levels%)
 6780PROCtree_heading
 6781P%=!(keybase%+top)
 6782PROCtraverse(P%,TRUE)
 6783H$=" No. nodes     1"
 6784H1$=" Max nodes     1"
 6785FOR L%=1 TO levels%
 6786  IF L%<40 THEN
 6787    L$=STR$(L%(L%))
 6788    L$=STRING$(6-LEN(L$)," ")+L$
 6789    M$=STR$(2^L%)
 6790    IF LEN(M$)>5 THEN M$=BL$ ELSE M$=STRING$(6-LEN(M$)," ")+M$
 6791    H$+=L$:H1$+=M$
 6792  ENDIF
 6793NEXT L%
 6794PROCrule_off(45)
 6795$(!lineanchor%)=H$:PROClist_line(-1,lineanchor%,LEN(H$),32)
 6796$(!lineanchor%)=H1$:PROClist_line(-1,lineanchor%,LEN(H1$),32)
 6797$(!lineanchor%)=LH$:PROClist_line(-1,lineanchor%,LEN(LH$),32)
 6798PROCrule_off(45)
 6799SYS "Hourglass_Off"
 6800format$="tree":tkey%=key%
 6801PROCscreen_list
 6802pitch$=FNpitch("2")
 6803PROClit(menu%(18),1,FALSE)
 6804ENDPROC
 6805:
 6806DEF PROCtree_heading
 6807LOCAL zero%,len%
 6808BL$=STRING$(6," ")
 6809LH$=" Level No.  Root"
 6810FOR L%=1 TO levels%
 6811  L$=STR$(L%)
 6812  IF L%<10 THEN L$="0"+L$
 6813  IF L%<40 THEN
 6814    LH$+="    "+L$
 6815    len%=LEN(LH$)
 6816  ENDIF
 6817NEXT L%
 6818U$=" "+STRING$(len%-1,"-")
 6819LenLine%=len%+4
 6820Count%=0
 6821count%=FNcount_recs(key%,zero%)
 6822textblocksize%=(count%+11)*LenLine%:textblockinc%=textblocksize%
 6823PROCextend_named_sliding_block(textanchor%,textblocksize%)
 6824PROCextend_named_sliding_block(lineanchor%,LenLine%+4)
 6825TextPtr%=!textanchor%
 6826recblocksize%=400
 6827PROCextend_named_sliding_block(recanchor%,recblocksize%)
 6828PROCrule_off(32)
 6829PROCrule_off(45)
 6830PROCsend_title("Tree Analysis (subfile:"+STR$(file%)+", key:"+STR$(key%)+", "+Index$(key%)+")")
 6831PROCrule_off(32)
 6832$(!lineanchor%)=LH$:PROClist_line(-1,lineanchor%,LEN(LH$),32)
 6833PROCrule_off(45)
 6834ENDPROC
 6835:
 6836DEF PROCtraverse(P%,Z%)
 6837LOCAL string$
 6838COL%=COL%+1
 6839IF COL%>depth% THEN depth%=COL%
 6840IF P%<0 THEN ENDPROC
 6841L%=!(keybase%+P%)
 6842R%=!(keybase%+P%+4)
 6843S$=$(keybase%+P%+8)
 6844IF S$="" THEN S$="<null>"
 6845rec%=!(keybase%+P%+8+KL%(key%)+1)
 6846IF Z% THEN
 6847  L%(COL%-1)=L%(COL%-1)+1
 6848  IF PR$="ALL" THEN
 6849    IF COL%<=40 THEN
 6850      string$=STRING$(COL%*6+10-LEN(S$)," ")+S$
 6851      $(!lineanchor%)=string$:PROClist_line(rec%,lineanchor%,LEN(string$),32)
 6852      ELSE
 6853      string$=" "+S$+" (level "+STR$(COL%-1)+")"
 6854      $(!lineanchor%)=string$:PROClist_line(rec%,lineanchor%,LEN(string$),32)
 6855    ENDIF
 6856  ENDIF
 6857ENDIF
 6858PROCtraverse(L%,Z%)
 6859COL%=COL%-1
 6860L%=!(keybase%+P%)
 6861R%=!(keybase%+P%+4)
 6862S$=$(keybase%+P%+8)
 6863rec%=!(keybase%+P%+8+KL%(key%)+1)
 6864PROCtraverse(R%,Z%)
 6865COL%=COL%-1
 6866ENDPROC
 6867:
 6868DEF PROCbalance(key%)
 6869LOCAL recptr%,top,file%,flagptr%,balptr%,I%,N%,A%,max%,done%,highest%,avail%,seglen%
 6870LOCAL recs%(),ptr%()
 6871DIM recs%(5),ptr%(5)
 6872newtree%=TRUE
 6873seglen%=KL%(key%)+5
 6874PROCextend_named_sliding_block(recanchor%,seglen%*RA%)
 6875PROCcreate_named_sliding_block(balanchor%,seglen%*RA%)
 6876PROCcreate_named_sliding_block(flaganchor%,RA%)
 6877recptr%=!recanchor%:flagptr%=!flaganchor%:balptr%=!balanchor%
 6878FOR I%=0 TO RA%-1
 6879  flagptr%?I%=255
 6880NEXT I%
 6881REM Bytes are changed from 255 to 0 where records are in use
 6882SYS "Hourglass_On"
 6883FOR file%=0 TO 5
 6884  ptr%(file%)=recptr%
 6885  top=8*file%+LH%
 6886  recs%(file%)=FNcount_recs(key%,recptr%)-1
 6887  max%+=recs%(file%)+1
 6888NEXT file%
 6889PROCmake_empty_index(RA%,key%,FALSE)
 6890SYS "Hourglass_LEDs",%11
 6891FOR file%=0 TO 5
 6892  top=8*file%+LH%
 6893  IF recs%(file%)>=0 THEN
 6894    recptr%=ptr%(file%)
 6895    N%=1
 6896    REPEAT
 6897      N%=N%+N%
 6898    UNTIL N%>recs%(file%)+2
 6899    step%=N%
 6900    N%=(N% DIV 2)-1
 6901    start%=N%
 6902    C%=0
 6903    REPEAT
 6904      start%=start% DIV 2
 6905      end%=N%-start%-1
 6906      step%=step% DIV 2
 6907      FOR I%=start% TO end% STEP step%
 6908        A%=recptr%+seglen%*(I%*(recs%(file%)+1) DIV N%)
 6909        balptr%!C%=!A%:$(balptr%+C%+4)=$(A%+4):!A%=-!A%-1
 6910        C%+=seglen%
 6911      NEXT I%
 6912    UNTIL step%=2
 6913    kl%=KL%(key%):val$=FNtype(key%)
 6914    FOR I%=0 TO C%-seglen% STEP seglen%
 6915      REC%=balptr%!I%:KEY$=$(balptr%+I%+4)
 6916      PROCinsert(FALSE,KEY$,key%)
 6917      done%+=1
 6918      SYS "Hourglass_Percentage",(done%*100) DIV max%
 6919    NEXT I%
 6920    FOR I%=0 TO recs%(file%)
 6921      REC%=recptr%!(seglen%*I%)
 6922      IF REC%>=0 THEN
 6923        KEY$=$(recptr%+seglen%*I%+4)
 6924        PROCinsert(FALSE,KEY$,key%)
 6925        done%+=1
 6926        SYS "Hourglass_Percentage",(done%*100) DIV max%
 6927      ENDIF
 6928    NEXT I%
 6929  ENDIF
 6930NEXT file%
 6931SYS "Hourglass_LEDs",%00
 6932keybase%=!keyanchor%(key%)
 6933nodesize%=8+KL%(key%)+1+4
 6934avail%=!keybase%
 6935FOR I%=0 TO highest%
 6936  IF flagptr%?I%=255 THEN
 6937    !(keybase%+avail%+8+KL%(key%)+1)=I%
 6938    avail%+=nodesize%
 6939  ENDIF
 6940NEXT I%
 6941SYS "Hourglass_Off"
 6942PROCscrap_sliding_block(balanchor%)
 6943PROCscrap_sliding_block(recanchor%)
 6944PROCscrap_sliding_block(flaganchor%)
 6945PROCsave_keys
 6946newtree%=FALSE
 6947IF FNselected(passW%,16) THEN BPUT#loghandle%,"Index "+Index$(key%)+" balanced"
 6948ENDPROC
 6949:
 6950DEF PROCduplicates(dkey%,dfile%)
 6951LOCAL P$,S$,RP$,RS$,daddr,dtop,RP%,RS%,count%,examined%
 6952LOCAL ERROR
 6953ON ERROR LOCAL:RESTORE ERROR:PROCabort_dup:ENDPROC
 6954count%=FNcount_recs(key%,zero%)
 6955PROCread_print_options
 6956reportdest$="Window":format$="dup":Count%=0:LenLine%=KL%(0)+23
 6957textblocksize%=100*LenLine%:textblockinc%=textblocksize%
 6958PROCextend_named_sliding_block(textanchor%,textblocksize%)
 6959PROCextend_named_sliding_block(lineanchor%,LenLine%+4)
 6960TextPtr%=!textanchor%
 6961recblocksize%=400
 6962PROCextend_named_sliding_block(recanchor%,recblocksize%)
 6963PROCclose_window(datadicW%)
 6964PROCrule_off(32)
 6965line$=" Duplicated primary keys":$(!lineanchor%)=line$:PROClist_line(-1,lineanchor%,LEN(line$),32)
 6966PROCrule_off(45)
 6967dtop=8*dfile%+LH%
 6968daddr=FNneighbour(dkey%,dtop,1)
 6969SYS "Hourglass_On"
 6970WHILE daddr<>dtop
 6971  SYS "OS_Byte",229,0
 6972  S$=$(!keyanchor%(dkey%)+daddr+8):RS%=!(!keyanchor%(dkey%)+daddr+9+KL%(dkey%))
 6973  RS$=STR$(RS%):RS$=" Record No."+STRING$(7-LEN(RS$)," ")+RS$+"   "
 6974  IF S$=P$ THEN
 6975    line$=RP$+P$
 6976    $(!lineanchor%)=line$:PROClist_line(RP%,lineanchor%,LEN(line$),32)
 6977    line$=RS$+S$
 6978    $(!lineanchor%)=line$:PROClist_line(RS%,lineanchor%,LEN(line$),32)
 6979  ENDIF
 6980  P$=S$:RP%=RS%:RP$=RS$
 6981  examined%+=1
 6982  SYS "Hourglass_Percentage",examined%*100 DIV count%
 6983  daddr=FNneighbour(dkey%,daddr,1)
 6984  PROCpoll
 6985ENDWHILE
 6986PROCrule_off(32)
 6987SYS "Hourglass_Off"
 6988PROCscreen_list
 6989ENDPROC
 6990:
 6991DEF PROCabort_dup
 6992SYS "Hourglass_Off"
 6993PROCscreen_list
 6994IF ERR=17 THEN
 6995  PROCsofterror("",67)
 6996  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 6997ENDIF
 6998ENDPROC
 6999:
 7000DEF FNstripspaces(s$)
 7001WHILE RIGHT$(s$)=" "
 7002  s$=LEFT$(s$)
 7003ENDWHILE
 7004=s$
 7005:
 7006REM >RAMtree
 7007:
 7008REM Index handling ------------------------------------------------------
 7009:
 7010DEF FNneighbour(key%,addr%,d%)
 7011LOCAL R%,S%,p%,keybase%
 7012keybase%=!keyanchor%(key%)
 7013p%=d%*4
 7014R%=!(keybase%+addr%+p%)
 7015IF R%<0 THEN =-R%
 7016p%=4-p%
 7017REPEAT
 7018  addr%=R%
 7019  S%=!(keybase%+addr%+p%)
 7020  IF S%>0 THEN R%=S%
 7021UNTIL S%<=0
 7022=R%
 7023:
 7024DEF FNrec_no(RETURN k$,key%,addr%)
 7025k$=$(!keyanchor%(key%)+addr%+8)
 7026=!(!keyanchor%(key%)+addr%+8+KL%(key%)+1)
 7027:
 7028DEF PROCscan_file(c$,key%,action%)
 7029LOCAL REC%,examined%,subtotal%,X%,Y%,n$
 7030n$="0123456789."
 7031subtotal%=FNcount_recs(key%,zero%)
 7032WHILE EVAL(c$)=TRUE
 7033  SYS "OS_Byte",229,0
 7034  REC%=FNrec_no(k$,key%,P%)
 7035  PROCreadsmarray(dbasehandle%,REC%)
 7036  examined%+=1
 7037  IF EVAL(Search$)=TRUE THEN
 7038    CASE action% OF
 7039      WHEN 0:PROCget_lengths
 7040      WHEN 1:PROCprint_record(REC%)
 7041      WHEN 2:ptr%?REC%=255:REM ### earmark ###
 7042      WHEN 3:PROCwrite_csv_rec(REC%)
 7043      WHEN 4:KEY$=FNkey2(newkey%,1):PROCinsert(FALSE,KEY$,newkey%)
 7044      REM ### create index ###
 7045      WHEN 5:
 7046      S$=F$(Fieldnumber%)
 7047      IF numeric% THEN
 7048        X%=0:Y%=0
 7049        REPEAT X%+=1
 7050        UNTIL X%>LEN(S$) OR INSTR(n$,MID$(S$,X%,1))>0
 7051        IF X%<=LEN(S$) THEN
 7052          Y%=X%
 7053          REPEAT Y%+=1
 7054          UNTIL Y%>LEN(S$) OR INSTR(n$,MID$(S$,Y%,1))=0
 7055        ENDIF
 7056        S$=LEFT$(S$,X%-1)+STR$(EVAL(MID$(S$,X%,Y%-X%)+New$))+MID$(S$,Y%)  
 7057        ELSE S$=New$
 7058      ENDIF
 7059      IF LEN(S$)>TextLength% THEN
 7060        PROCsofterror("",10)
 7061        ELSE
 7062        F$(Fieldnumber%)=S$
 7063        PROCwritesmarray(dbasehandle%,REC%)
 7064      ENDIF
 7065      REM ### global change ###
 7066    ENDCASE
 7067  ENDIF
 7068  P%=FNneighbour(key%,P%,1)
 7069  SYS "Hourglass_Percentage",(examined%*100) DIV subtotal%
 7070ENDWHILE
 7071ENDPROC
 7072:
 7073DEF FNsearch(S$,key%,M%)
 7074LOCAL P%,found%,info$,keybase%
 7075keybase%=!keyanchor%(key%)
 7076Z%=0:P%=top:ident%=FALSE
 7077REPEAT
 7078  L%=P%
 7079  P%=!(keybase%+L%+Z%)
 7080  IF P%<=0 THEN P%=-L%:found%=TRUE
 7081  info$=$(keybase%+P%+8)
 7082  rec%=FNrec_no(k$,key%,P%)
 7083  IF EVAL(val$+"(S$)="+val$+"LEFT$(info$,kl%)") THEN
 7084    CASE M% OF
 7085      WHEN 0:ident%=(key%=0)
 7086      WHEN 1:found%=TRUE
 7087      WHEN 2:IF rec%=REC% THEN found%=TRUE
 7088    ENDCASE
 7089  ENDIF
 7090  IF NOT found% THEN Z%=-EVAL(val$+"(S$)>="+val$+"(info$)")*4
 7091UNTIL found%
 7092=P%
 7093:
 7094REM ### M%=0 - Find leaf position at which to insert ###
 7095REM ### M%=1 - Find first match in tree (if there is one) ###
 7096REM ### M%=2 - Find exact matching record, checking for record no. ###
 7097:
 7098DEF PROCinsert(R%,RETURN S$,key%)
 7099LOCAL P%,A%,kl%,keybase%,abort%
 7100keybase%=!keyanchor%(key%)
 7101kl%=KL%(key%)
 7102A%=!keybase%:F%=A%
 7103P%=-FNsearch(S$,key%,0)
 7104IF ident% THEN
 7105  CASE TRUE OF
 7106    WHEN NOT FNselected(passW%,15):
 7107    PROCsofterror(" ("+S$+")",37):abort%=TRUE
 7108    OTHERWISE:
 7109    IF dup% THEN IF NOT FNconfirm(FNmsg(45)+" ("+S$+")") THEN abort%=TRUE
 7110  ENDCASE
 7111ENDIF
 7112IF abort% THEN S$="*Failed*":ENDPROC
 7113IF !(keybase%+F%)>0 THEN
 7114  A%=!(keybase%+F%)
 7115  ELSE
 7116  incr%=VAL($Increment%)
 7117  IF incr%>0 THEN
 7118    PROCchange_length(RA%+incr%,FALSE)
 7119    keybase%=!keyanchor%(key%)
 7120    A%=!keybase%:F%=A%
 7121    ELSE S$="*Failed*"
 7122  ENDIF
 7123ENDIF
 7124IF S$="*Failed*" THEN PROCsofterror("",2):ENDPROC
 7125IF R% THEN REC%=!(keybase%+F%+8+kl%+1)
 7126!(keybase%+F%+Z%)=!(keybase%+P%+Z%)
 7127!(keybase%+F%+(4-Z%))=-P%
 7128$(keybase%+F%+8)=S$
 7129!(keybase%+F%+8+KL%(key%)+1)=REC%
 7130!(keybase%+P%+Z%)=F%
 7131!keybase%=A%
 7132IF key%=0 THEN RU%+=1
 7133ENDPROC
 7134:
 7135DEF PROCdelete(RETURN S$,key%)
 7136LOCAL P%,A%,kl%,keybase%
 7137keybase%=!keyanchor%(key%)
 7138A%=!keybase%
 7139kl%=KL%(key%)
 7140P%=FNsearch(S$,key%,2)
 7141IF P%<0 THEN PROCsofterror(" ("+S$+": "+Index$(key%)+" index)",1):S$="*Failed*":ENDPROC
 7142PR%=FNneighbour(key%,P%,0)
 7143SU%=FNneighbour(key%,P%,1)
 7144!(keybase%+L%+Z%)=!(keybase%+P%+Z%)
 7145Q%=P%
 7146ZL%=4-Z%
 7147P1%=!(keybase%+P%+ZL%)
 7148IF P1%>0 THEN
 7149  info$=$(keybase%+P1%+8)
 7150  P%=-FNsearch(info$,key%,0)
 7151  !(keybase%+P%+Z%)=P1%
 7152ENDIF
 7153IF !(keybase%+PR%+4)<=0 THEN !(keybase%+PR%+4)=-SU%
 7154IF !(keybase%+SU%+0)<=0 THEN !(keybase%+SU%+0)=-PR%
 7155!(keybase%+Q%)=A%
 7156!keybase%=Q%
 7157IF key%=0 THEN RU%-=1
 7158ENDPROC
 7159:
 7160DEF PROCsave_keys
 7161LOCAL keyN%
 7162IF present%<>7 THEN ENDPROC
 7163SYS "Hourglass_On"
 7164keybase%=!keyanchor%(0):keybase%!4=VAL($Increment%)
 7165WHILE !keyanchor%(keyN%)>0
 7166  keybase%=!keyanchor%(keyN%)
 7167  keybase%?72=0:keybase%?73=0
 7168  SYS "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(keyN%) TO ,,filelength%
 7169  IF keyN% THEN index$="Indices." ELSE index$=""
 7170  SYS "OS_File",10,$database%+"."+index$+Index$(keyN%),&7F0,,keybase%,keybase%+filelength%
 7171  keyN%+=1
 7172  SYS "Hourglass_Percentage",keyN%*100 DIV (Keys%+1)
 7173ENDWHILE
 7174SYS "Hourglass_Off"
 7175ENDPROC
 7176:
 7177DEF PROCreadsmarray(filehandle%,REC%)
 7178LOCAL loop%
 7179PTR#filehandle%=REC%*Length%
 7180FOR loop%=1 TO fields%
 7181  F$(loop%)=GET$#filehandle%
 7182NEXT loop%
 7183ENDPROC
 7184:
 7185DEF PROCwritesmarray(F,RETURN R%)
 7186LOCAL loop%
 7187PTR#F=R%*Length%
 7188FOR loop%=1 TO fields%
 7189  BPUT#F,F$(loop%)
 7190NEXT loop%
 7191R%+=1
 7192ENDPROC
 7193:
 7194DEF PROCcheck_save(T%)
 7195LOCAL time%
 7196SYS "OS_ReadMonotonicTime" TO time%
 7197IF (time% MOD T%)<10 THEN
 7198IF buttonfield%(19)>0 THEN wi%=mainW%:ic%=buttonfield%(19) ELSE wi%=keypadW%:ic%=19
 7199  CASE autosave% OF
 7200    WHEN 1:
 7201    delay%=TIME
 7202    FOR loop%=0 TO 2
 7203      delay%+=50
 7204      block%!8=1:block%!12=wi%:block%!16=ic%
 7205      SYS "Interface_SlabButton",,block%
 7206      REPEAT UNTIL TIME>delay%
 7207      SOUND 1,-15,180,5
 7208      block%!8=0
 7209      SYS "Interface_SlabButton",,block%
 7210      delay%+=50
 7211      REPEAT UNTIL TIME>delay%
 7212    NEXT loop%
 7213    WHEN 2:PROCmouse(0,0,4,wi%,ic%)
 7214  ENDCASE
 7215ENDIF
 7216ENDPROC
 7217:
 7218DEF PROCset_auto(mode%)
 7219PROCtick_one(menu%(12),0,2,2-mode%)
 7220autosave%=mode%
 7221saveint%=VAL($Interval%):$Interval%=STR$(saveint%)+" min"
 7222ENDPROC
 7223:
 7224DEF PROCset_autobalance(status%)
 7225PROCtick(menu%(21),0,status%)
 7226autobalance%=status%
 7227IF NOT autobalance% THEN $Every%="25 recs"
 7228balint%=VAL($Every%):$Every%=STR$(balint%)+" recs":added%=0
 7229ENDPROC
 7230:
 7231REM Calculations ---------------------------------------------------------
 7232:
 7233DEF PROCcalc_link(T$,type%)
 7234REM ### Sets up calculation formula window & menu entry ###
 7235$CalcFunc%=T$
 7236$CalcTitle%=T$:calclink%=Fieldnumber%
 7237PROCsplit_link(calclink%,real$,visible$)
 7238CASE type% OF
 7239  WHEN 6,7:$CalcForm%=Tag$(calclink%)+"="+visible$
 7240  WHEN 47:
 7241  $CalcForm%=visible$
 7242  PROCicon_bit(22,calcW%,2,off%)
 7243  PROCdeselect(calcW%,2)
 7244ENDCASE
 7245ENDPROC
 7246:
 7247DEF PROCcalc_formula(S$)
 7248REM ### Parses calculation formula (S$) & builds calc$(I%) ###
 7249LOCAL I%,P%,t$,s$,C$,time%
 7250C$=STR$~(calclink%):IF calclink%<16 THEN C$="0"+C$
 7251IF $CalcFunc%="Set base value" THEN
 7252  IF S$="" THEN S$="0"
 7253  calc$(calclink%)=S$+"|"+S$
 7254  calc$(0)="LOADED"
 7255  ELSE
 7256  P%=INSTR(S$,"="):S$=MID$(S$,P%+1):visible$=S$
 7257  FOR I%=1 TO fields%
 7258    t$=Tag$(I%)
 7259    IF t$<>"" THEN
 7260      P%=0
 7261      REPEAT
 7262        P%=INSTR(S$,t$,P%+1)
 7263        IF P%>0 THEN
 7264          CASE chartype%(I%) OF
 7265            WHEN 3,6,46,47,54,56,57:s$="VAL($Rf%("+STR$(I%)+"))"
 7266            WHEN 8:s$="FNseconds($Rf%("+STR$(I%)+"),1)":time%=TRUE
 7267            OTHERWISE:
 7268            CASE chartype%(calclink%) OF
 7269              WHEN 6:s$="FNn("+STR$(I%)+")"
 7270              WHEN 7:s$="$Rf%("+STR$(I%)+")"
 7271            ENDCASE
 7272          ENDCASE
 7273          S$=LEFT$(S$,P%-1)+s$+MID$(S$,P%+LEN(t$))
 7274          update$(I%)+=C$
 7275        ENDIF
 7276      UNTIL P%=0
 7277    ENDIF
 7278  NEXT I%
 7279  IF INSTR(visible$,"TIME$")>0 THEN update$(0)+=C$
 7280  IF time%=TRUE AND chartype%(calclink%)=7 THEN S$="FNtime("+S$+")"
 7281  IF LEN(S$)+LEN(visible$)+2<256 THEN
 7282    calc$(calclink%)="#"+S$+"#"+visible$
 7283    calc$(0)="LOADED"
 7284    IF FNselected(calcW%,2) THEN PROCrecalculate(calclink%)
 7285    ELSE PROCsofterror("",44)
 7286  ENDIF
 7287ENDIF
 7288calclink%=0
 7289IF (b% AND %111)=4 THEN SYS "Wimp_CreateMenu",,-1
 7290ENDPROC
 7291:
 7292DEF PROCrecalculate(F%)
 7293LOCAL F,I%,R%,k$,P%,real$,visible$,subtotal%,zero%,examined%
 7294PROCsplit_link(F%,real$,visible$)
 7295IF FNconfirm("Recalculate "+Tag$(F%)+"="+visible$+" for existing records?")=FALSE THEN ENDPROC
 7296subtotal%=FNcount_recs(key%,zero%)
 7297SYS "Hourglass_On"
 7298dbasehandle%=OPENUP($database%+".Database")
 7299P%=FNneighbour(key%,top,1)
 7300WHILE P%<>top
 7301  R%=FNrec_no(k$,key%,P%)
 7302  PROCreadsmarray(dbasehandle%,R%)
 7303  FOR I%=1 TO fields%
 7304    $Rf%(I%)=F$(I%)
 7305  NEXT I%
 7306  CASE chartype%(F%) OF
 7307    WHEN 6:
 7308    F=EVAL(real$):F$=STR$(F)
 7309    IF fix%(F%)>0 THEN F$=FNfix_point(F$,F%)
 7310    WHEN 7:
 7311    LOCAL ERROR
 7312    ON ERROR LOCAL:RESTORE ERROR:PROCsofterror(real$,73):ENDPROC
 7313    F$=EVAL(real$)
 7314    RESTORE ERROR
 7315  ENDCASE
 7316  IF LEN(F$)<=len%(F%) THEN F$(F%)=F$
 7317  PROCwritesmarray(dbasehandle%,R%)
 7318  P%=FNneighbour(key%,P%,1)
 7319  examined%+=1
 7320  SYS "Hourglass_Percentage",examined%*100 DIV subtotal%
 7321ENDWHILE
 7322SYS "Hourglass_Off"
 7323PROCclose_file(dbasehandle%)
 7324FOR I%=1 TO fields%
 7325  $Rf%(I%)=field$(I%)
 7326NEXT I%
 7327PROCdisplay(key%,addr)
 7328ENDPROC
 7329:
 7330DEF PROCsums(RETURN F$,R%,type%)
 7331LOCAL V
 7332IF F$<>"" THEN
 7333  CASE type% OF
 7334    WHEN 8:V=FNseconds(F$,1)
 7335    OTHERWISE:V=VAL(F$)
 7336  ENDCASE
 7337  Sum(R%,0)+=1
 7338  Sum(R%,1)+=V
 7339  Sum(R%,3)+=V*V
 7340ENDIF
 7341ENDPROC
 7342:
 7343DEF PROCctotals(flag%)
 7344LOCAL F%,I%,J%,N%,R%,S%,base%,pos%,F$
 7345LOCAL S$(),f%()
 7346DIM S$(3),f%(3)
 7347base%=!lineanchor%
 7348S$()="Items","Sum","Mean","St.Dev."
 7349FOR I%=1 TO LEN(Form$)-1 STEP 2
 7350  F%=FNfnum(MID$(Form$,I%,2))
 7351  R%=calcrow%?F%
 7352  CASE chartype%(F%) OF
 7353    WHEN 3,6,8,46,47,54,56,57:
 7354    IF Sum(R%,0)>0 THEN
 7355      Sum(R%,2)=Sum(R%,1)/Sum(R%,0)
 7356      Sum(R%,3)=SQR(Sum(R%,3)/Sum(R%,0)-Sum(R%,2)^2)
 7357    ENDIF
 7358  ENDCASE
 7359NEXT I%
 7360FOR J%=0 TO 3
 7361  pos%=base%
 7362  IF flag%>0 THEN
 7363    N%=0:start%=1:F$=STRING$(Lmargin%-LEN(S$(J%))-1," ")+S$(J%)+" "
 7364    ELSE N%=1:start%=3
 7365    L%=Tab%(1)-Lmargin%-LEN(spacer$)
 7366    IF L%>=7 THEN F$=margin$+FNtab(S$(J%),N%) ELSE F$=margin$+FNtab(LEFT$(S$(J%),L%),N%)
 7367  ENDIF
 7368  PROCheap_store(lineanchor%,LenLine%,0,pos%,0,F$)
 7369  IF LEN(Form$)>2 OR start%=1 THEN
 7370    FOR I%=start% TO LEN(Form$)-1 STEP 2
 7371      F%=FNfnum(MID$(Form$,I%,2)):F$=""
 7372      N%+=1
 7373      CASE chartype%(F%) OF
 7374        WHEN 3,6,8,46,47,54,56,57:
 7375        R%=calcrow%?F%
 7376        IF chartype%(F%)=8 THEN result$=FNtime(Sum(R%,J%)) ELSE result$=STR$(Sum(R%,J%))
 7377        IF FNselected(pselectW%,R%*5-3+J%) THEN:F$=FNjustify(result$,N%,N%-1):f%(J%)=1
 7378      ENDCASE
 7379      PROCheap_store(lineanchor%,LenLine%,0,pos%,0,FNtab(F$,N%))
 7380    NEXT I%
 7381    IF f%(J%)=1 THEN PROClist_line(-1,lineanchor%,pos%-base%,32)
 7382  ENDIF
 7383NEXT J%
 7384IF SUM(f%())>0 THEN PROCrule_off(45)
 7385ENDPROC
 7386:
 7387DEF FNmargin_warn
 7388LOCAL f%,F%,R%,J%
 7389F%=FNfnum(LEFT$(Form$,2))
 7390CASE chartype%(F%) OF
 7391  WHEN 3,6,46,47,54,56,57:
 7392  R%=calcrow%?F%
 7393  FOR J%=0 TO 3
 7394    IF FNselected(pselectW%,R%*5-J%) THEN f%=F%
 7395  NEXT J%
 7396ENDCASE
 7397IF f%>0 AND Lmargin%<9 THEN PROCsofterror(" ("+Tag$(f%)+").",92):=-1
 7398=f%
 7399:
 7400DEF FNtab(F$,N%)
 7401LOCAL L%
 7402L%=LEN(F$)+LEN(spacer$)
 7403IF Tab%(N%)-Tab%(N%-1)-L%<=0 THEN=F$+spacer$
 7404=F$+STRING$(Tab%(N%)-Tab%(N%-1)-L%," ")+spacer$
 7405:
 7406DEF FNjustify(f$,x%,x1%)
 7407LOCAL L%
 7408L%=Tab%(x%)-Tab%(x1%)-LEN(spacer$)
 7409IF LEN(f$)>L% THEN=LEFT$(f$,L%) ELSE=STRING$(L%-LEN(f$)," ")+f$
 7410:
 7411DEF PROCexecute_file(f$)
 7412LOCAL F,P%,name$,command$,finished%,firstquery%,state%
 7413IF NOT FNconfirm(FNmsg(68)) THEN ENDPROC
 7414LOCAL ERROR
 7415IF FNselected(printW%,39) THEN reportdest$="File" ELSE reportdest$="Window"
 7416F=OPENIN(f$)
 7417REM Script file signature
 7418junk$=GET$#F
 7419ON ERROR LOCAL:RESTORE ERROR:PROCabort_script:ENDPROC
 7420WHILE NOT(EOF#F OR finished%)
 7421  SYS "OS_Byte",229,0
 7422  line$=GET$#F
 7423  space%=INSTR(line$," ")
 7424  IF space%=0 THEN command$=line$:params$="" ELSE command$=LEFT$(line$,space%-1):params$=MID$(line$,space%+1):state%=(params$="ON")
 7425  CASE command$ OF
 7426    WHEN "!COMMENT":
 7427    WHEN "!SCRIPT":
 7428    ImpCom$=""
 7429    IF params$="END" THEN
 7430      finished%=TRUE
 7431      ELSE PROCexecute_file($database%+".PrintRes."+params$)
 7432    ENDIF
 7433    WHEN "!DELETE":
 7434    IF present%=7 THEN
 7435      RecF%=FALSE
 7436      IF params$="" THEN key$=GET$#F ELSE key$=params$
 7437      PROCselect(keypadW%,25):PROCdeselect(keypadW%,24)
 7438      addr=FNfind(key$,0,0,TRUE)
 7439      IF RecF%=TRUE THEN
 7440        addr=FNshift(0,0,0)
 7441        addr=FNmoveto(key%,top,1)
 7442      ENDIF
 7443    ENDIF
 7444    WHEN "!INSERT":
 7445    IF present%=7 THEN
 7446      subfile%=VAL(params$)
 7447      PROCread(fields%,FALSE,RA%,$database%)
 7448      FOR loop%=1 TO fields%
 7449        $Rf%(loop%)=LEFT$(GET$#F,len%(loop%))
 7450      NEXT
 7451      PROCwrite(fields%,key%)
 7452    ENDIF
 7453    WHEN "!QUERY":
 7454    IF params$<>"" THEN
 7455      P%=INSTR(params$,",")
 7456      formula$=MID$(params$,P%+1)
 7457      name$=LEFT$(params$,P%-1)
 7458      name$=LEFT$(name$,10)
 7459      Search$=FNparse(formula$,TRUE)
 7460      $FNtext(matchW%,0)=formula$
 7461      PROCredraw_icon(matchW%,0)
 7462      SYS "Hourglass_On"
 7463      scripton%=TRUE
 7464      PROCdo_it(Search$,FALSE)
 7465      IF FNselected(printW%,38) THEN
 7466        filename$=$database%+".PrintJobs."+name$:Type%=&FFF
 7467        Start%=!textanchor%:End%=Start%+Count%*LenLine%
 7468        CASE TRUE OF
 7469          WHEN ImpCom$="":$Start%=pitch$
 7470          WHEN ImpCom$<>"" AND firstquery%=TRUE:firstquery%=FALSE
 7471          OTHERWISE:$Start%=ImpCom$
 7472        ENDCASE
 7473        PROCsave(filename$,Type%,Start%,End%)
 7474      ENDIF
 7475    ENDIF
 7476    WHEN "!SELECTION":
 7477    IF params$<>"" THEN
 7478      filename$=$database%+".PrintRes."+params$
 7479      SYS "OS_File",5,filename$ TO ,,ftype%
 7480      ftype%=(ftype%>>8) AND &FFF
 7481      IF ftype%=&7F3 THEN PROCdrag_selection(filename$)
 7482      ELSE PROCclear_selection
 7483    ENDIF
 7484    WHEN "!PRINTOPTS":
 7485    IF params$<>"" THEN
 7486      filename$=$database%+".PrintRes."+params$
 7487      SYS "OS_File",5,filename$ TO ,,ftype%
 7488      ftype%=(ftype%>>8) AND &FFF
 7489      IF ftype%=&7F5 THEN PROCdrag_options(filename$)
 7490      ELSE PROCdrag_options("<Pbase$Dir>.Resources.PrintOpts")
 7491    ENDIF
 7492    WHEN "!CASE":PROCset_icon(matchW%,16,state%)
 7493    WHEN "!INDEX":PROCset_icon(matchW%,23,state%)
 7494    WHEN "!EXPAND":PROCset_icon(printW%,11,state%)
 7495    WHEN "!DATE":PROCset_icon(printW%,19,state%)
 7496    WHEN "!UPPER":PROCset_icon(printW%,12,state%)
 7497    WHEN "!FIRST":PROCset_icon(printW%,10,state%)
 7498    WHEN "!UNDERLINE":PROCset_icon(printW%,29,state%)
 7499    WHEN "!SHRINK":PROCset_icon(printW%,40,state%)
 7500    WHEN "!TITLE":$FNtext(printW%,18)=params$
 7501    WHEN "!PAGE":$FNtext(printW%,16)=params$
 7502    WHEN "!LINESPACE":$FNtext(printW%,17)=params$
 7503    WHEN "!LMARGIN":$FNtext(printW%,30)=params$
 7504    WHEN "!TMARGIN":$FNtext(printW%,32)=params$
 7505    WHEN "!SPACER":$FNtext(printW%,43)=params$
 7506    WHEN "!COLWIDTH":$FNtext(printW%,45)=params$
 7507    WHEN "!HEADINGS":
 7508    CASE FNu(params$) OF
 7509      WHEN "D":PROCselect(printW%,2):PROCdeselect(printW%,1)
 7510      OTHERWISE:PROCselect(printW%,1):PROCdeselect(printW%,2)
 7511    ENDCASE
 7512    WHEN "!PITCH":
 7513    PROCdeselect(printW%,FNselected_esg(printW%,2))
 7514    CASE VAL(params$) OF
 7515      WHEN 5:PROCselect(printW%,4)
 7516      WHEN 10:PROCselect(printW%,7)
 7517      WHEN 12:PROCselect(printW%,8)
 7518      OTHERWISE:PROCselect(printW%,6)
 7519    ENDCASE
 7520    WHEN "!FORMAT":
 7521    PROCdeselect(printW%,FNselected_esg(printW%,3))
 7522    PROCicon_bit(22,printW%,15,FALSE)
 7523    P%=INSTR(params$," "):IF P%>0 THEN cols$=MID$(params$,P%+1):params$=LEFT$(params$,P%-1)
 7524    CASE params$ OF
 7525      WHEN "VERTICAL":PROCselect(printW%,24)
 7526      WHEN "TABLE":PROCselect(printW%,25)
 7527      $FNtext(printW%,15)=cols$
 7528      PROCicon_bit(22,printW%,15,TRUE)
 7529      WHEN "LABEL":PROCselect(printW%,26)
 7530      OTHERWISE:PROCselect(printW%,23)
 7531    ENDCASE
 7532    WHEN "!DESTINATION":
 7533    PROCdeselect(printW%,FNselected_esg(printW%,4))
 7534    CASE params$ OF
 7535      WHEN "FILE":PROCselect(printW%,39):reportdest$="File"
 7536      WHEN "PRINTER":PROCselect(printW%,41):reportdest$="Printer"
 7537      OTHERWISE:PROCselect(printW%,38):reportdest$="Window"
 7538    ENDCASE
 7539    WHEN "!LABEL":
 7540    params$+=","
 7541    FOR I%=1 TO 7
 7542      P%=INSTR(params$,",")
 7543      par$=LEFT$(params$,P%-1):params$=MID$(params$,P%+1)
 7544      CASE I% OF
 7545        WHEN 1:
 7546        PROCdeselect(labelW%,FNselected_esg(labelW%,1))
 7547        CASE par$ OF
 7548          WHEN "1":PROCselect(labelW%,0)
 7549          WHEN "2":PROCselect(labelW%,1)
 7550          OTHERWISE:PROCselect(labelW%,2)
 7551        ENDCASE
 7552        WHEN 2:$FNtext(labelW%,4)=par$
 7553        WHEN 3:$FNtext(labelW%,6)=par$
 7554        WHEN 4:$FNtext(labelW%,10)=par$
 7555        WHEN 5:$FNtext(labelW%,12)=par$
 7556        PROCset_icon(labelW%,11,(par$<>""))
 7557        PROCicon_bit(22,labelW%,12,FNselected(labelW%,11))
 7558        WHEN 6:PROCset_icon(labelW%,13,(FNu(par$)="ON"))
 7559        WHEN 7:PROCset_icon(labelW%,16,(FNu(par$)="ON"))
 7560      ENDCASE
 7561    NEXT I%
 7562    WHEN "!IMPRESSION":
 7563    P%=INSTR(params$," ")
 7564    IF P%>0 THEN
 7565      ImpCom$=LEFT$(params$,P%-1):modifier$=MID$(params$,P%+1)
 7566      CASE FNu(modifier$) OF
 7567        WHEN "NOT FIRST":firstquery%=TRUE
 7568      ENDCASE
 7569      ELSE ImpCom$=params$
 7570    ENDIF
 7571    OTHERWISE
 7572    PROCsofterror("",46)
 7573    finished%=TRUE
 7574  ENDCASE
 7575ENDWHILE
 7576SYS "Hourglass_Smash"
 7577PROCclose_file(F)
 7578RESTORE ERROR
 7579ENDPROC
 7580:
 7581DEF PROCabort_script
 7582PROCclose_file(F)
 7583IF ERR=17 THEN
 7584  PROCsofterror("",57)
 7585  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 7586ENDIF
 7587ENDPROC
 7588:
 7589REM "Impulse" handling -----------------------------------------------
 7590:
 7591DEF PROCImpulse_command(token%,params%,object%)
 7592LOCAL SF$
 7593param$=FNgetstr(params%):object$=FNgetstr(object%)
 7594IF object$="" THEN object$=FNleaf($database%)
 7595CASE token% OF
 7596  WHEN 1:REM ### GetPathname. Returns full pathname of object ###
 7597  CASE FNleaf($database%) OF
 7598    WHEN object$:
 7599    SYS "Impulse_SendMessage",&202,$database%,,,,,mytask%
 7600    WHEN "No data":
 7601    SYS "Impulse_SendMessage",&202,"No database open",,,,,mytask%
 7602    OTHERWISE:
 7603    SYS "Impulse_SendMessage",&202,"Current database is not "+object$,,,,,mytask%
 7604  ENDCASE
 7605  WHEN 2:REM ### Selection. Returns maximum data length ###
 7606  ClientSep$=RIGHT$(param$,1)
 7607  ClientForm$=FNfind_fields(param$,ClientSep$,ClientLength%)
 7608  PROCextend_named_sliding_block(transanchor%,ClientLength%+1)
 7609  SYS "Impulse_SendMessage",&202,STR$(ClientLength%),,,,,mytask%
 7610  WHEN 3:REM ### ParseQuery. Returns title generated by FNparse ###
 7611  ClientSearch$=FNparse(param$,TRUE)
 7612  SYS "Impulse_SendMessage",&202,Title$,,,,,mytask%
 7613  WHEN 4:REM ### GetRecord. Returns data specified in Selection according to criteria specified in ParseQuery ###
 7614  datalength%=FNprepare_next_record(param$,!transanchor%)
 7615  SYS "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,Length%
 7616  WHEN 5:REM ### PutRecord ###
 7617  SYS "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
 7618  WHEN 6:REM ### ExpandCode ###
 7619  P%=INSTR(param$," ")
 7620  code$=LEFT$(param$,P%-1):table$=MID$(param$,P%+1)
 7621  SYS "Impulse_SendMessage",&202,FNexpand(code$,table$,L%,SF$),,,,,mytask%
 7622  WHEN 7,8:REM ### GetField, GetExpanded ###
 7623  IF params%<>-1 THEN
 7624    datalength%=FNprepare_next_field(token%,param$,!transanchor%)
 7625    SYS "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,datalength%
 7626    REM Max. length for a Powerbase field is 246
 7627  ENDIF
 7628ENDCASE
 7629ENDPROC
 7630:
 7631DEF PROCImpulse_reply(replytag%,reply%)
 7632LOCAL ERROR
 7633ON ERROR LOCAL:RESTORE ERROR:PROCabort_merge:ENDPROC
 7634reply$=FNgetstr(reply%)
 7635CASE replytag% OF
 7636  WHEN getrec%:
 7637  REM ### Reply to GetRecord command. ###
 7638  SYS "Impulse_FetchData",!transanchor%,Length%,,,,,mytask%
 7639  WHEN mergetag%:
 7640  REM ### Merging application replies when all data in document merged ###
 7641  IF FNselected(mergeW%,6) THEN SYS "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Print",,,,printtag%,mytask%
 7642  WHEN printtag%:
 7643  REM ### Merging application has printed the current document ###
 7644  SYS "OS_Byte",229,0
 7645  mergenum%+=1:$FNtext(mergeW%,14)=STR$(mergenum%)
 7646  PROCredraw_icon(mergeW%,14)
 7647  IF FNselected(mergeW%,6) AND ClientPtr%<>top THEN
 7648    ClientPtr%=FNmerge_next(ClientPtr%,1)
 7649    ELSE PROCdeselect(mergeW%,6)
 7650  ENDIF
 7651  PROCpoll
 7652ENDCASE
 7653ENDPROC
 7654:
 7655DEF PROCabort_merge
 7656PROCclose_file(dbasehandle%)
 7657ClientPtr%=top
 7658PROCdeselect(mergeW%,6)
 7659PROCperform_close(mergeW%)
 7660IF ERR=17 THEN
 7661  PROCsofterror("",27)
 7662  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 7663ENDIF
 7664ENDPROC
 7665:
 7666DEF PROCImpulse_send(tag%,maxsize%)
 7667SYS "Impulse_TransmitData",!transanchor%,datalength%,,,,,mytask%
 7668datalength%=0
 7669ENDPROC
 7670:
 7671DEF PROCImpulse_receive(replytag%,expected%,received%)
 7672LOCAL I%,F%,P%
 7673transbuff%=!transanchor%
 7674transbuff%?received%=13
 7675data$=$transbuff%
 7676REM ### Acknowledge data received (get reason code 19 otherwise!) ###
 7677SYS "Impulse_SendMessage",&202,,,,,replytag%,mytask%
 7678IF data$<>"" THEN
 7679  P%=INSTR(data$,"#")
 7680  REC%=VAL(LEFT$(data$,P%-1))
 7681  data$=MID$(data$,P%+1)
 7682  IF REC%=-1 THEN REC%=RA%
 7683  PROCread(fields%,REC%<>RA%,REC%,$database%)
 7684  FOR I%=1 TO LEN(ClientForm$) STEP 2
 7685    F%=FNfnum(MID$(ClientForm$,I%,2))
 7686    IF data$<>"" THEN $Rf%(F%)=FNget_string(data$,ClientSep$)
 7687  NEXT I%
 7688  PROCwrite(fields%,key%)
 7689  IF received%=0 THEN SYS "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
 7690ENDIF
 7691ENDPROC
 7692:
 7693DEF FNget_string(RETURN S$,sep$)
 7694LOCAL P%,F$
 7695P%=INSTR(S$,sep$)
 7696IF P%>0 THEN
 7697  F$=LEFT$(S$,P%-1)
 7698  S$=MID$(S$,P%+1)
 7699ENDIF
 7700=F$
 7701:
 7702DEF FNprepare_next_record(key$,transbuff%)
 7703LOCAL ok%,I%,F%,P%
 7704IF dbasehandle%=0 THEN
 7705  dbasehandle%=OPENIN($database%+".Database")
 7706  ClientPtr%=FNneighbour(key%,top,1)
 7707ENDIF
 7708P%=transbuff%
 7709CASE key$ OF
 7710  WHEN "***":
 7711  PROCclose_file(dbasehandle%)
 7712  $P%=key$:P%+=LEN($P%)+1
 7713  WHEN "":
 7714  WHILE ok%=FALSE AND ClientPtr%<>top
 7715    REC%=FNrec_no(k$,key%,ClientPtr%)
 7716    PROCreadsmarray(dbasehandle%,REC%)
 7717    IF EVAL(ClientSearch$)=TRUE THEN
 7718      $P%=STR$(REC%)+"#":P%+=LEN($P%)
 7719      FOR I%=1 TO LEN(ClientForm$) STEP 2
 7720        F%=FNfnum(MID$(ClientForm$,I%,2))
 7721        $P%=F$(F%)+ClientSep$:P%+=LEN($P%)
 7722      NEXT I%
 7723      $P%+=ClientSep$:P%+=1
 7724      ok%=TRUE
 7725    ENDIF
 7726    ClientPtr%=FNneighbour(key%,ClientPtr%,1)
 7727  ENDWHILE
 7728  IF P%=transbuff% THEN PROCclose_file(dbasehandle%)
 7729  OTHERWISE:
 7730  val$=FNtype(key%):kl%=LEN(key$)
 7731  ClientPtr%=FNsearch(key$,key%,1)
 7732  IF ClientPtr%>=0 THEN
 7733    REC%=FNrec_no(k$,key%,ClientPtr%)
 7734    PROCreadsmarray(dbasehandle%,REC%)
 7735    $P%=STR$(REC%)+"#":P%+=LEN($P%)
 7736    FOR I%=1 TO LEN(ClientForm$) STEP 2
 7737      F%=FNfnum(MID$(ClientForm$,I%,2))
 7738      $P%=F$(F%)+ClientSep$:P%+=LEN($P%)
 7739    NEXT I%
 7740    $P%+=ClientSep$:P%+=1
 7741  ENDIF
 7742ENDCASE
 7743=P%-transbuff%
 7744:
 7745DEF FNprepare_next_field(method%,S$,transbuff%)
 7746LOCAL L%,F%,P%,len%,T$,F$,V%,R%,b$,k$,SF$
 7747CASE token% OF
 7748  WHEN 7:
 7749  F%=FNfield(S$,FALSE):V%=chartype%(F%)
 7750  CASE V% OF
 7751    WHEN 0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58:
 7752    L%=LEN(F$(F%))
 7753    PROCextend_named_sliding_block(transanchor%,(L%+4) AND &FFFFFFFC)
 7754    transbuff%=!transanchor%
 7755    $transbuff%=F$(F%):transbuff%?L%=0
 7756    WHEN 36,39:
 7757    R%=FNrec_no(k$,key%,ClientPtr%)
 7758    L%=FNblob_path(FALSE,$database%,R%,F%,V%,b$)
 7759    IF L%>0 THEN
 7760      PROCextend_named_sliding_block(transanchor%,(L%+4) AND &FFFFFFFC)
 7761      transbuff%=!transanchor%
 7762      SYS "OS_File",255,b$,transbuff%
 7763      ELSE L%=1
 7764      PROCextend_named_sliding_block(transanchor%,256)
 7765      transbuff%=!transanchor%
 7766      ?transbuff%=0
 7767    ENDIF
 7768    transbuff%?L%=0
 7769  ENDCASE
 7770  WHEN 8:
 7771  P%=INSTR(S$," "):T$=MID$(S$,P%+1):S$=LEFT$(S$,P%-1)
 7772  F%=FNfield(S$,FALSE):F$=FNexpand(F$(F%),T$,L%,SF$)
 7773  PROCextend_named_sliding_block(transanchor%,L%+1)
 7774  transbuff%=!transanchor%
 7775  $transbuff%=F$:L%=LEN($transbuff%):transbuff%?L%=0
 7776ENDCASE
 7777len%=(L%+4) AND &FFFFFFFC
 7778=len%
 7779:
 7780DEF PROCready_to_merge
 7781Imp_wait%=FALSE:merging%=TRUE
 7782$FNtext(mergeW%,1)=document$
 7783IF NOT common% THEN $FNtext(mergeW%,3)=""
 7784PROCopen_window(mergeW%)
 7785PROCset_caret(mergeW%,3)
 7786SYS "Impulse_SendMessage",&200,":"+mergewith$+"."+document$+" Edit Off",,,,-1,mytask%
 7787ENDPROC
 7788:
 7789DEF FNmerge_next(P%,D%)
 7790D%=(D%+1) DIV 2
 7791P%=FNnext_match(P%,D%,ClientSearch$)
 7792IF P%<>top THEN
 7793  S$=F$(KF%(key%,0))+" "+F$(KF%(key%,1))
 7794  $FNtext(mergeW%,13)=LEFT$(S$,80)
 7795  PROCredraw_icon(mergeW%,13)
 7796  SYS "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Merge",,,,mergetag%,mytask%
 7797ENDIF
 7798=P%
 7799:
 7800REM End of "Impulse" handling -------------------------------------------
 7801:
 7802REM Import/Export CSV files ---------------------------------------------
 7803:
 7804DEF PROCstart_import(type$,wi%)
 7805LOCAL OK%
 7806CASE present% OF
 7807  WHEN 0:
 7808  IF fields%=0 THEN OK%=TRUE ELSE PROCsofterror("",69)
 7809  WHEN 7:IF Modify% THEN OK%=TRUE ELSE PROCsofterror("",14)
 7810  OTHERWISE:PROCsofterror("",69)
 7811ENDCASE
 7812IF OK% THEN
 7813  $FNtext(csvW%,13)=filename$
 7814  PROCicon_bit(22,csvW%,0,FALSE)
 7815  !block%=csvW%:SYS "Wimp_GetWindowState",,block%
 7816  block%!4=800:block%!12=block%!4+390
 7817  block%!8=150:block%!16=block%!8+716
 7818  $CSVTitle%="Import "+type$+" file"
 7819  SYS "Wimp_OpenWindow",,block%
 7820  PROCset_caret(csvW%,13)
 7821ENDIF
 7822ENDPROC
 7823:
 7824DEF PROCwrite_csv(Filename$)
 7825IF writingcsv% THEN ENDPROC
 7826IF printorder$<>"" THEN Form$=printorder$ ELSE PROCsofterror("",34):ENDPROC
 7827LOCAL P%,rec%,examined%,subtotal%
 7828LOCAL ERROR
 7829ON ERROR LOCAL:RESTORE ERROR:PROCend_csv:ENDPROC
 7830csvhandle%=OPENOUT(Filename$)
 7831IF FNselected(csvW%,1) THEN PROCcsv_head
 7832dbasehandle%=OPENIN($database%+".Database")
 7833Search$=FNparse($FNtext(savesubW%,0),FNselected(savesubW%,5))
 7834SYS "Hourglass_On"
 7835P%=FNneighbour(key%,top,1)
 7836PROCscan_file("P%<>top",key%,3)
 7837SYS "Hourglass_Off"
 7838PROCclose_file(csvhandle%)
 7839PROCclose_file(dbasehandle%)
 7840IF sep$="," THEN type%=&dfe ELSE type%=&fff
 7841SYS "OS_File",18,Filename$,type%
 7842writingcsv%=FALSE
 7843ENDPROC
 7844:
 7845DEF PROCend_csv
 7846SYS "Hourglass_Smash"
 7847PROCclose_file(csvhandle%)
 7848PROCclose_file(dbasehandle%)
 7849PROCclose_file(F)
 7850SYS "OS_File",18,Filename$,&dfe
 7851writingcsv%=FALSE
 7852IF ERR=17 THEN
 7853  PROCsofterror("",41)
 7854  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 7855ENDIF
 7856ENDPROC
 7857:
 7858DEF PROCcsv_head
 7859LOCAL I%,F%,f$,H$,Head$,N%
 7860I%=-1
 7861WHILE I%<LEN(Form$)-1
 7862  I%+=2:F%=FNfnum(MID$(Form$,I%,2)):N%+=1
 7863  IF FNselected(printW%,2) THEN Head$=$FNtext(mainW%,(desc%(F%))) ELSE Head$=Tag$(F%)
 7864  IF FNselected(csvW%,4) THEN Head$=STR$(len%(F%))+"�"+Head$+"�"+STR$(chartype%(F%))
 7865  IF chartype%(F%)<>3 AND chartype%(F%)<>6 AND FNselected(csvW%,0) THEN Head$=""""+Head$+""""
 7866  IF N%>1 THEN Head$=sep$+Head$
 7867  BPUT#csvhandle%,Head$;
 7868ENDWHILE
 7869BPUT#csvhandle%,term$;
 7870ENDPROC
 7871:
 7872DEF PROCwrite_csv_rec(R%)
 7873LOCAL I%,F%,f$,F$,L%,N%,filename$,len%,base%,SF$
 7874IF FNselected(csvW%,3) THEN
 7875  F$=FNkey2(0,1)
 7876  IF FNselected(csvW%,0) THEN F$=""""+F$+""""
 7877  BPUT#csvhandle%,F$+sep$;
 7878ENDIF
 7879I%=-1:L%=LEN(Form$)-1
 7880WHILE I%<L%
 7881  I%+=2:F%=FNfnum(MID$(Form$,I%,2))
 7882  CASE chartype%(F%) OF
 7883    WHEN 36,39:
 7884    len%=FNload_blob($database%,R%,F%,36)
 7885    IF len%>0 OR FNselected(csvW%,2) THEN
 7886      N%+=1:IF N%>1 THEN BPUT#csvhandle%,sep$;
 7887      IF FNselected(csvW%,0) THEN BPUT#csvhandle%,"""";
 7888      PROCblob_to_file(csvhandle%,len%)
 7889      IF FNselected(csvW%,0) THEN BPUT#csvhandle%,"""";
 7890    ENDIF
 7891    WHEN 3,6,46,47,54,56,57:
 7892    F$=F$(F%):N%+=1
 7893    IF F$<>"" OR FNselected(csvW%,2) THEN
 7894      IF N%>1 THEN F$=sep$+F$
 7895      BPUT#csvhandle%,F$;
 7896    ENDIF
 7897    OTHERWISE:
 7898    IF FNselected(printW%,11) THEN
 7899      F$=FNexpand(F$(F%),link$(F%),Len%,SF$)
 7900      ELSE F$=F$(F%)
 7901    ENDIF
 7902    N%+=1
 7903    IF F$<>"" OR FNselected(csvW%,2) THEN
 7904      IF FNselected(csvW%,0) THEN F$=""""+F$+""""
 7905      IF N%>1 THEN F$=sep$+F$
 7906      BPUT#csvhandle%,F$;
 7907    ENDIF
 7908  ENDCASE
 7909ENDWHILE
 7910BPUT#csvhandle%,term$;
 7911ENDPROC
 7912:
 7913DEF PROCconvert_csv(f$)
 7914LOCAL k$,B%,J%,fld%,csvhandle%,toobighandle%,S$,sep%,sep2%,term%,term2%,F$,A%,F%,keybase%,base%,base2%,show%,done%
 7915LOCAL ERROR
 7916ON ERROR LOCAL:RESTORE ERROR:PROCstop_reading:ENDPROC
 7917size%=&100:inc%=size%
 7918PROCextend_named_sliding_block(tempanchor%,size%)
 7919sep%=ASC(sep$):IF LEN(sep$)=2 THEN sep2%=ASC(RIGHT$(sep$)) ELSE sep2%=255
 7920term%=ASC(term$):IF LEN(term$)=2 THEN term2%=ASC(RIGHT$(term$)) ELSE term2%=255
 7921csvhandle%=OPENIN(f$)
 7922IF present%=0 THEN PROCcsv_to_dbase(f$)
 7923Form$=FNcsv_importform
 7924toobighandle%=OPENOUT($database%+".PrintJobs.TooBig")
 7925SYS "Hourglass_On"
 7926REPEAT
 7927  CASE TRUE OF
 7928    WHEN FNselected(csvW%,3):
 7929    PROCread_bytes
 7930    addr=FNfind(LEFT$($base%,KL%(key%)),0,1,FALSE)
 7931    REC%=FNrec_no(k$,key%,addr)
 7932    PROCread(fields%,TRUE,REC%,$database%)
 7933    OTHERWISE:
 7934    keybase%=!keyanchor%(0):A%=!keybase%:F%=A%
 7935    IF !(keybase%+F%)>0 THEN
 7936      A%=!(keybase%+F%):REC%=!(keybase%+F%+8+KL%(0)+1)
 7937      ELSE
 7938      incr%=VAL($Increment%)
 7939      IF incr%>0 THEN
 7940        PROCchange_length(RA%+incr%,FALSE)
 7941        keybase%=!keyanchor%(0):A%=!keybase%:F%=A%
 7942        A%=!(keybase%+F%):REC%=!(keybase%+F%+8+KL%(0)+1)
 7943        ELSE ERROR moan_err%,FNmsg(66)
 7944      ENDIF
 7945    ENDIF
 7946    PROCread(fields%,FALSE,RA%,$database%)
 7947  ENDCASE
 7948  endline%=FALSE:J%=-1
 7949  WHILE J%<LEN(Form$)-2 AND endline%=FALSE
 7950    J%+=2:fld%=FNfnum(MID$(Form$,J%,2))
 7951    PROCtransfer_csv_field(fld%)
 7952  ENDWHILE
 7953  IF fld%<fields% AND NOT endline% THEN PROCnext_csv_rec
 7954  PROCpoll
 7955  PROCwrite(fields%,key%)
 7956  IF FNselected(csvW%,11) THEN PROCredraw(mainW%)
 7957  SYS "Hourglass_Percentage",PTR#csvhandle%*100 DIV EXT#csvhandle%
 7958  SYS "OS_Byte",229,0
 7959UNTIL EOF#csvhandle%
 7960SYS "Hourglass_Off"
 7961PROCclose_file(csvhandle%)
 7962PROCclose_file(toobighandle%)
 7963PROCscrap_sliding_block(tempanchor%)
 7964SYS "OS_File",18,$database%+".PrintJobs.TooBig",&fff
 7965addr=FNmoveto(key%,top,1)
 7966PROCclear_selection
 7967PROCclose_window(csvW%)
 7968IF FNselected(passW%,16) THEN BPUT#loghandle%,"CSV data imported from "+f$
 7969ENDPROC
 7970:
 7971DEF PROCtransfer_csv_field(RETURN fld%)
 7972CASE chartype%(fld%) OF
 7973  WHEN 36,39:
 7974  PROCread_bytes
 7975  Z%=FNblob_path(TRUE,$database%,REC%,fld%,36,F$)
 7976  Start%=base%:End%=base%+ptr%
 7977  PROCsave(F$,&fff,Start%,End%)
 7978  IF FNselected(csvW%,11) AND chartype%(fld%)=39 THEN PROCshow_text_block(fld%)
 7979  WHEN 0,1,2,3,4,5,6,7,8,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57:
 7980  PROCread_bytes
 7981  IF FNselected(csvW%,16) THEN $base%=FNstripspaces($base%)
 7982  CASE TRUE OF
 7983    WHEN ptr%<=len%(fld%):$Rf%(fld%)=$base%
 7984    WHEN ptr%<247:
 7985    BPUT#toobighandle%,"Rec."+STR$(REC%)+",Fld."+STR$(fld%)+","+$base%
 7986    $Rf%(fld%)="@"
 7987    OTHERWISE:
 7988    BPUT#toobighandle%,"Rec."+STR$(REC%+1)+",Fld."+STR$(fld%)+" is more than 246 characters long. Data not saved. External field suggested."
 7989    $Rf%(fld%)="@"
 7990  ENDCASE
 7991  OTHERWISE:fld%+=1
 7992  REM ### Can't put CSV data into Button, Sprite or Draw fields! ###
 7993ENDCASE
 7994ENDPROC
 7995:
 7996DEF PROCread_bytes
 7997LOCAL end$,flag%,B%,nq%
 7998base%=!tempanchor%:ptr%=-1
 7999B%=BGET#csvhandle%
 8000IF B%=34 THEN
 8001  flag%=TRUE:nq%=1
 8002  end$="(base%?(ptr%-1)=34 AND (nq% MOD 2)=0) AND (B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE)"
 8003  ELSE
 8004  PTR#csvhandle%=PTR#csvhandle%-1
 8005  end$="B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE"
 8006ENDIF
 8007REPEAT
 8008  B%=BGET#csvhandle%:ptr%+=1:base%?ptr%=B%
 8009  IF B%=34 THEN nq%+=1
 8010  IF ptr%=size% THEN size%+=inc%:PROCextend_named_sliding_block(tempanchor%,size%)
 8011UNTIL EVAL(end$)
 8012IF flag% THEN ptr%-=1
 8013base%?ptr%=13
 8014CASE B% OF
 8015  WHEN sep%:PROCskip_sep
 8016  WHEN term%:PROCskip_term
 8017ENDCASE
 8018ENDPROC
 8019:
 8020DEF PROCnext_csv_rec
 8021REPEAT
 8022  B%=BGET#csvhandle%
 8023UNTIL B%=term%
 8024PROCskip_term
 8025ENDPROC
 8026:
 8027DEF PROCskip_sep
 8028IF sep2%<>255 THEN
 8029  B%=BGET#csvhandle%
 8030  IF B%<>sep2% THEN PTR#csvhandle%=PTR#csvhandle%-1
 8031ENDIF
 8032ENDPROC
 8033:
 8034DEF PROCskip_term
 8035IF term2%<>255 THEN
 8036  B%=BGET#csvhandle%
 8037  IF B%<>term2% THEN PTR#csvhandle%=PTR#csvhandle%-1 ELSE endline%=TRUE
 8038  ELSE endline%=TRUE
 8039ENDIF
 8040ENDPROC
 8041:
 8042DEF PROCstop_reading
 8043SYS "Hourglass_Off"
 8044PROCclose_file(csvhandle%):PROCclose_file(toobighandle%)
 8045PROCscrap_sliding_block(tempanchor%)
 8046IF ERR =17 THEN
 8047  PROCsofterror("",74)
 8048  ELSE PROCwimp_error(TRUE,ERR,ERL,REPORT$)
 8049ENDIF
 8050IF present%=7 THEN
 8051  addr=FNmoveto(key%,top,1)
 8052  PROCclear_selection
 8053ENDIF
 8054ENDPROC
 8055:
 8056DEF FNcsv_importform
 8057LOCAL F%,f$,F$
 8058endline%=FALSE
 8059CASE TRUE OF
 8060  WHEN FNselected(csvW%,1):
 8061  REM ### Use header record to build form ###
 8062  REPEAT
 8063    PROCread_bytes
 8064    F%=FNfield($base%,FALSE)
 8065    IF F%=0 THEN ERROR moan_err%,FNmsg(87)
 8066    f$=STR$~(F%)
 8067    IF LEN(f$)=1 THEN f$="0"+f$
 8068    F$+=f$
 8069    PROCinvert(mainW%,field%(F%))
 8070  UNTIL endline%
 8071  WHEN printorder$<>"":
 8072  REM ### Build form from highlighted fields, as in printing ###
 8073  F$=printorder$
 8074  OTHERWISE:
 8075  REM ### Assume entry into all fields, beginning with first ###
 8076  FOR F%=1 TO fields%
 8077    f$=STR$~(F%)
 8078    IF LEN(f$)=1 THEN f$="0"+f$
 8079    F$+=f$
 8080  NEXT F%
 8081ENDCASE
 8082=F$
 8083:
 8084DEF PROCcsv_to_dbase(f$)
 8085LOCAL F%,P%,Q%,FH%,S$,readpos%
 8086IF NOT (FNselected(csvW%,4) AND FNselected(csvW%,1)) THEN ERROR moan_err%,FNmsg(88)
 8087PROCread_bytes:S$=$base%:PTR#csvhandle%=0
 8088IF INSTR(S$,"�")=0 THEN ERROR moan_err%,FNmsg(89)
 8089leaf$=FNleaf(f$):csvconv%=TRUE
 8090IF $database%="No data" THEN $database%=dbasepath$+".!"+leaf$
 8091PROCsave($database%,0,0,0)
 8092fields%=0:endline%=FALSE
 8093REPEAT
 8094  fields%+=1
 8095  PROCread_bytes:S$=$base%
 8096  P%=INSTR(S$,"�"):Q%=INSTR(S$,"�",P%+1)
 8097  Tag$(fields%)=MID$(S$,P%+1,Q%-P%-1)
 8098  len%(fields%)=VAL(LEFT$(S$,P%-1))
 8099  chartype%(fields%)=VAL(MID$(S$,Q%+1))
 8100UNTIL endline%
 8101PROCscrap_sliding_block(tempanchor%)
 8102FH%=OPENOUT($database%+".Form")
 8103PRINT#FH%,fields%
 8104FOR F%=1 TO fields%
 8105  xd%=16:xf%=96
 8106  yd%=-(F%*52):yf%=yd%
 8107  PRINT#FH%,Tag$(F%),Tag$(F%),xd%,yd%,xf%,yf%,len%(F%),chartype%(F%),0,0
 8108NEXT F%
 8109PROCclose_file(FH%)
 8110SYS "OS_File",18,$database%+".Form",&7f2
 8111fields%=0:Fieldnumber%=0
 8112fields%=FNget_form(Fptr%)
 8113PROCdefault_key
 8114readpos%=PTR#csvhandle%
 8115RA%=FNno_of_recs
 8116PROCdefaults($database%,RA%,0)
 8117PROCsave_keys
 8118PROCdeselect(csvW%,1)
 8119PROCcreate_named_sliding_block(tempanchor%,size%)
 8120csvhandle%=OPENIN(f$)
 8121PTR#csvhandle%=readpos%
 8122ENDPROC
 8123:
 8124DEF FNno_of_recs
 8125LOCAL N%,B%
 8126REPEAT
 8127  REPEAT B%=BGET#csvhandle%
 8128  UNTIL B%=term% OR EOF#csvhandle%
 8129  N%+=1
 8130  SYS "Hourglass_Percentage",PTR#csvhandle%*100 DIV EXT#csvhandle%
 8131UNTIL EOF#csvhandle%
 8132=N%
 8133:
 8134REM --- SLIDING HEAP 2.00 PROCEDURES
 8135:
 8136REM requires SlidingHeap 2.00
 8137:
 8138REM module and PROCs
 8139REM LEN Steven Haslam 1992
 8140:
 8141DEF FN_heap_slotsize
 8142LOCAL R0%
 8143SYS "Wimp_SlotSize",-1,-1 TO R0%
 8144=R0%
 8145:
 8146DEF FN_heap_numtostr(d%,n%)=RIGHT$(STRING$(d%,"0")+STR$~n%,d%)
 8147DEF FN_heap_snumtostr(d%,n%)=RIGHT$(STRING$(d%," ")+STR$n%,d%)
 8148:
 8149DEF PROCheapsinfo
 8150SYS "OS_Heap",1,fixedheapbase% TO ,,bigbloc%,totfree%
 8151PRINT "Fixed heap"
 8152PRINT "----- ----"
 8153PRINT "Heap base    : &";FN_heap_numtostr(8,fixedheapbase%)
 8154PRINT "Heap size    : ";FN_heap_bytes2(fixedheapsize%)
 8155PRINT "Largest free : ";FN_heap_bytes2(bigbloc%)
 8156PRINT "Total free   : ";FN_heap_bytes2(totfree%)
 8157PRINT
 8158PRINT "Sliding heap"
 8159PRINT "------- ----"
 8160SYS "SlidingHeap_HeapInfo",slidingheapbase%
 8161ENDPROC
 8162:
 8163DEF FN_heap_pageup(n%)
 8164LOCAL R0%
 8165SYS "OS_ReadMemMapInfo" TO R0%
 8166=(n%+R0%-1) AND NOT (R0%-1)
 8167:
 8168DEF PROCinitheaps(heapsize%,slidingblocks%)
 8169fixedheapsize%=heapsize%
 8170heap_trigger%=FN_heap_pageup(HIMEM+fixedheapsize%+20+20*slidingblocks%-&8000)
 8171PROCsetslotsize(heap_trigger%)
 8172IF FN_heap_slotsize<heap_trigger% THEN ERROR 130,"Unable to initialise heap"
 8173fixedheapbase%=HIMEM
 8174slidingheapbase%=HIMEM+fixedheapsize%
 8175SYS "OS_Heap",0,fixedheapbase%,,fixedheapsize%
 8176SYS "SlidingHeap_Create",slidingheapbase%,2,slidingblocks%
 8177SYS "SlidingHeap_VerifyHeap",slidingheapbase%
 8178ENDPROC
 8179:
 8180DEF FN_heap_nextfree
 8181LOCAL nextfree%
 8182SYS "SlidingHeap_NextFree",slidingheapbase% TO nextfree%
 8183=nextfree%
 8184:
 8185DEF PROCdestroyheaps
 8186PROCsetslotsize(HIMEM-&8000)
 8187ENDPROC
 8188:
 8189DEF FN_heap_wordup(x%)=(x%+3) AND NOT 3
 8190:
 8191DEF FNcreate_anchor(name$)
 8192LOCAL space%
 8193DIM space% 4+LENname$+1
 8194!space%=0
 8195$(space%+4)=name$
 8196=space%
 8197:
 8198DEF PROCcreate_named_sliding_block(anchor%,size%)
 8199LOCAL trysize%
 8200size%=FN_heap_wordup(size%)
 8201trysize%=FN_heap_pageup(FN_heap_nextfree+size%-&7FF4)
 8202IF trysize%>heap_trigger% THEN
 8203   PROCsetslotsize(trysize%)
 8204   IF FN_heap_slotsize<trysize% THEN
 8205      PROCsetslotsize(heap_trigger%)
 8206      ERROR 131,"Not enough room to create block """+$(anchor%+4)+""""
 8207   ELSE
 8208      heap_trigger%=trysize%
 8209   ENDIF
 8210ENDIF
 8211SYS "SlidingHeap_NewBlock",slidingheapbase%,anchor%,size%,anchor%+4
 8212SYS "SlidingHeap_VerifyHeap",slidingheapbase%
 8213ENDPROC
 8214:
 8215DEF PROCscrap_sliding_block(anchor%)
 8216IF !anchor%=0 THEN ENDPROC
 8217SYS "SlidingHeap_ScrapBlock",slidingheapbase%,anchor%
 8218trysize%=FN_heap_pageup(FN_heap_nextfree-&7FFC)
 8219IF trysize%<>heap_trigger% THEN
 8220   PROCsetslotsize(trysize%)
 8221   heap_trigger%=trysize%
 8222ENDIF
 8223!anchor%=0
 8224SYS "SlidingHeap_VerifyHeap",slidingheapbase%
 8225ENDPROC
 8226:
 8227DEF PROCsetslotsize(newsize%)
 8228SYS "Wimp_SlotSize",newsize%,-1
 8229ENDPROC
 8230:
 8231DEF PROCextend_named_sliding_block(anchor%,newsize%)
 8232IF !anchor%=0 THEN PROCcreate_named_sliding_block(anchor%,newsize%):ENDPROC
 8233IF !anchor%>FN_heap_nextfree THEN ERROR 129,"Block beyond heap limits"
 8234newsize%=FN_heap_wordup(newsize%)
 8235SYS "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% TO ,,oldsize%
 8236larger%=newsize%>oldsize%
 8237IF larger% THEN
 8238   trysize%=FN_heap_pageup(FN_heap_nextfree+(newsize%-oldsize%)-&7FFC)
 8239   IF trysize%>heap_trigger% THEN
 8240      PROCsetslotsize(trysize%)
 8241      IF FN_heap_slotsize<trysize% THEN
 8242         PROCsetslotsize(heap_trigger%)
 8243         ERROR 132,"Not enough room to extend block #"+STR$~anchor%
 8244      ELSE
 8245         heap_trigger%=trysize%
 8246      ENDIF
 8247   ENDIF
 8248ENDIF
 8249SYS "SlidingHeap_ExtendBlock",slidingheapbase%,anchor%,newsize%
 8250trysize%=FN_heap_pageup(FN_heap_nextfree-&7FFC)
 8251IF trysize%<>heap_trigger% THEN
 8252   PROCsetslotsize(trysize%)
 8253   heap_trigger%=trysize%
 8254ENDIF
 8255SYS "SlidingHeap_VerifyHeap",slidingheapbase%
 8256ENDPROC
 8257:
 8258DEF FN_heap_bytes(b%)
 8259LOCAL end%
 8260SYS "OS_ConvertFixedFileSize",b%,block%,block%+&100 TO ,end%
 8261?end%=13
 8262=$block%
 8263:
 8264DEF FN_heap_bytes2(b%)
 8265LOCAL end%
 8266SYS "OS_ConvertFileSize",b%,block%,block%+&100 TO ,end%
 8267?end%=13
 8268=$block%
 8269:
 8270DEF FNcreate_fixed_block(size%)
 8271LOCAL pointer%,flag%
 8272SYS "XOS_Heap",2,fixedheapbase%,,size% TO ,,pointer%;flag%
 8273WHILE flag% AND 1
 8274PROCextendfixedheap
 8275SYS "XOS_Heap",2,fixedheapbase%,,size% TO ,,pointer%;flag%
 8276ENDWHILE
 8277=pointer%
 8278:
 8279DEF PROCextendfixedheap
 8280LOCAL nshb%,extend%,trysize%
 8281SYS "OS_ReadMemMapInfo" TO extend%
 8282trysize%=FN_heap_slotsize+extend%
 8283PROCsetslotsize(trysize%)
 8284IF FN_heap_slotsize<trysize% THEN ERROR 255,"No room to extend fixed heap"
 8285nshb%=slidingheapbase%+extend%
 8286SYS "SlidingHeap_ShiftHeap",slidingheapbase%,nshb%
 8287SYS "OS_Heap",5,fixedheapbase%,,extend%
 8288fixedheapsize%+=extend%
 8289slidingheapbase%=nshb%
 8290SYS "SlidingHeap_VerifyHeap",slidingheapbase%
 8291ENDPROC
� ><PBase$Dir>.!RunImage
�
'� !RunImage for !Powerbase database
� � D.L. & S.R. Haslam
:
#� Heap Manager (module + BASIC)
� � S.R. Haslam
:
	� Interface Manager (v.2)

� � Simon Huntingdon
:
"version$="4.995 (09-Feb-1994)"

,intversion$="Interface Manager (v.2.00)"
:
(ș "OS_Byte",202,0,255 � ,kbdstatus%
 fatal_err%=255:moan_err%=254
present%=�
H� �:� � �:� �,"L0 error: "+�$+" during initialisation at line "+�(�)

�setup
.� buff%>endbuff% � � 0,"No room for defs."
2� menu_ptr%>men_end% � � 0,"No room for menus"
� � �wimp_error(�,�,�,�$)
ș "OS_GetEnv" � ComString$
 � �ComString$,"-database") �
4  File$=�ComString$,�ComString$,"-database")+10)
5  ș "OS_GSTrans",File$,�255,�13),255 � ,File$,L%
  File$=�File$,L%)
  �get_it_in(File$)
�
� � �wimp_error(�,�,�,�$)
�
   �poll
!� quit%
"�close_down
#�
$:
%� �poll
&'ș "OS_Byte",229,1:ș "OS_Byte",124
')ș "Wimp_Poll",mask%,block% � reason%
((ș "Interface_Poll",reason%,,mytask%
)Ȏ reason% �
*@  � 0:� autosave%>0 � Access%=� � �check_save(saveint%*6000)
+0  � Imp_wait% � � merging% � �ready_to_merge
,0  � flash%>0 � �flash(mainW%,field%(flash%))
-  � 1:�redraw(!block%)
.&  � 2:ș "Wimp_OpenWindow",,block%
/!  � 3:�perform_close(!block%)
0  � 4:�hourglass(�)
1  � 5:�hourglass(�)
2@  � 6:�mouse(block%!0,block%!4,block%!8,block%!12,block%!16)
3   � 7:�end_drag(Start%,End%)
4  � 8:�process_key
5  � 9:�menu_select
6*  � 12:�set_keyboard(!block%,block%!4)
7  � 17,18:
8e  ș "Impulse_Decode",reason%,block%,,,,methodtable%,mytask% � reason%,,,,,token%,params%,object%
9  � reason%>=&200 �
:    Ȏ reason% �
;M      � &200,&201:� token%<>-1 � �Impulse_command(token%,params%,object%)
</      � &202:�Impulse_reply(token%,params%)
=.      � &203:�Impulse_send(token%,object%)
>9      � &204:�Impulse_receive(token%,params%,object%)
?	    �
@    � �message
A  �
B  � 19:�not_acknowledged
C�
D�
E:
F� �hourglass(on%)
G2� (indexing% � printing%) � !block%=keypadW% �
H4  � on% � ș "Hourglass_On" � ș "Hourglass_Off"
I�
J�
K:
L� �flash(wi%,ic%)
M� time%
N%ș "OS_ReadMonotonicTime" � time%
O'� (time% � 50)=0 � �invert(wi%,ic%)
P�
Q:
RK� Shutdown routines ---------------------------------------------------
S:
T� �close_down
U� F%
V� �
W�� � �:$block%="TASK":ș "Wimp_CloseDown",mytask%,!block%:ș "Interface_CloseDown",mytask%,!block%:� � �:� 12:� �,"L0 error: "+�$+" during closedown at line "+�(�):�
Xș "Hourglass_Smash"
Y�exit(0)
Z$ș "Interface_CloseDown",mytask%
["ș "Impulse_CloseDown",mytask%
\$block%="TASK"
]'ș "Wimp_CloseDown",mytask%,!block%
^ș "OS_Byte",202,kbdstatus%
_�
`�
a:
b� �exit(exittype%)
c� flag%
dș "Hourglass_Smash"
e � present%=7 � �check_change
fȎ exittype% �
g=  � 0:� warn% � ram% � flag%=�confirm(�msg(63)) � flag%=�
h6  � 1:� warn% � flag%=�confirm(�msg(62)) � flag%=�
i�
j� flag%=� � �  
k� exittype%=0 �
l0  � design% � �save_form($database%+".Form")
m  � link$(0)="LOADED" �
n     lk=�($database%+".Link")
o    � F%=1 � fields%
p      �#lk,link$(F%)
q    � F%
r  �
s  � calc$(0)="LOADED" �
t     cl=�($database%+".Calc")
u    � F%=1 � fields%
v      �#cl,calc$(F%)
w    � F%
x  �
y:  � Access%=� � present%=7 � �mouse(0,0,4,keypadW%,19)
z�
{0� menu%(5)>0 � menu_ptr%=menu%(5):menu%(5)=0
|6� ###  Menu 5 is the menu of validation tables ###
}�close_log
~�close_files
�hide_windows
��delete_icons(mainW%,0)
��delete_icons(datadicW%,0)
��delete_icons(pselectW%,1)
��delete_icons(keypadW%,37)
��recover_memory
��init_vars
�� I%=0 � MaxTabs%
�  printrel$(I%)=""
�� I%
�field$()=""
�$Password%=""
�present%=�
�exit%=�
��lit(menu%(0),1,�)
��lit(menu%(0),2,�)
��lit(menu%(0),3,�)
��lit(menu%(0),4,�)
�1�lit(menu%(2),1,�):ptr%=menu%(2)+52:ptr%!4=-1
��lit(menu%(6),6,�)
��lit(menu%(6),7,�)
��lit(menu%(6),8,�)
��set_auto(�)
��set_autobalance(�)
��tick(menu%(2),3,�)
��tick(menu%(2),4,�)
�$dbase%="No data"
�$database%="No data"
��redraw_icon(-2,pbaseicon%)
��
�:
�� �delete_icons(wi%,ic%)
�!block%=wi%:block%!4=ic%
��
�"  ș "Wimp_DeleteIcon",,block%
�  ic%+=1:block%!4=ic%
�$  ș "Wimp_GetIconState",,block%
�� ((block%!24) � (1<<23))>0
��
�:
�� �close_files
�
� key%
�� key%=0 � Keys%
�  �date(key%)
�
� key%
��close_file(lk):link$()=""
��close_file(cl):calc$()=""
��close_file(dbasehandle%)
��close_file(csvhandle%)
��close_file(texthandle%)
��close_file(text%)
��close_file(toobighandle%)
��close_file(F)
��close_file(FH%)
��close_file(V)
��
�:
� � �close_file(� filehandle%)
�� filehandle%>0 �
�  �#filehandle%
�  filehandle%=0
��
��
�:
�� �recover_memory
�� I%
�%�scrap_sliding_block(headanchor%)
�%�scrap_sliding_block(undoanchor%)
�%�scrap_sliding_block(lineanchor%)
�%�scrap_sliding_block(textanchor%)
�%�scrap_sliding_block(formanchor%)
�$�scrap_sliding_block(selanchor%)
�%�scrap_sliding_block(tempanchor%)
�$�scrap_sliding_block(balanchor%)
�%�scrap_sliding_block(flaganchor%)
�&�scrap_sliding_block(transanchor%)
�%�scrap_sliding_block(sprsanchor%)
�$�scrap_sliding_block(recanchor%)
�%�scrap_sliding_block(saveanchor%)
�%�scrap_sliding_block(logoanchor%)
�� I%=0 � MaxTabs%
�*  �scrap_sliding_block(tabanchor%(I%))
�� I%
�� I%=0 � MaxKeys%+1
�*  �scrap_sliding_block(keyanchor%(I%))
�� I%
�� I%=1 � fields%
�8  � chartype%(I%)=40 � �scrap_sliding_block(Rf%(I%))
�� I%
��
�:
�K� Error handling ------------------------------------------------------
�:
�)� �wimp_error(return%,err%,erl%,err$)
�� type%,result%
�� �
�U� � � � � �:�close_down:� �,"L0 error: "+�$+" during error handler at line "+�(�)
�ș "Wimp_CommandWindow",-1
�*block%!8=0:block%!12=wi%:block%!16=ic%
�%ș "Interface_SlabButton",,block%
�block%!0=err%
�"� return% � err%<>fatal_err% �
�   � err%=moan_err% �
�<      type%=&11:� OK button and no "Error from" in title
�   �
�)      type%=3:� OK and Cancel buttons
�A      err$+=" @ "+�(erl%)+" (OK to continue, Cancel to quit)"
�   �
��
�   type%=2:� Cancel buttom
�;   err$+=" @ "+�(erl%)+" (Powerbase must quit at once)"
��
�$(block%+4)=err$+�(0)
�=ș "Wimp_ReportError",block%,type%,"Powerbase" � ,result%
�9� result=1 means OK selected, 2 means Cancel selected
�� result%=2 �
�   �close_down
�   �
��
�� �
��
�:
�� �softerror(E$,E%)
�$(block%+4)=�msg(E%)+E$
�!block%=255
�<ș "Wimp_ReportError",block%,&11,"Report from Powerbase"
��
�:
�� �msg(E%)
errorblock%=errormsg%
ȕ E%>1
$  errorblock%+=�($errorblock%)+1
  E%-=1
�
=�$errorblock%,4)
:
K� Program initialisation ----------------------------------------------
:
	� �setup

� F,A%,I%,J%,V%,valid$
'F=�("<Pbase$Dir>.Resources.Config")
MaxFields%=�(�#F)

,� MaxFields%>127 � � fatal_err%,�msg(61)
MaxKeys%=�(�#F)
MaxTabs%=�(�#F)-1
datesep$=��#F,1)
timesep$=��#F,1)
0S$=�#F:P%=�S$," "):kill%=� (�S$,P%-1)="YES")
4S$=�#F:P%=�S$," "):commoncase%=(�S$,P%-1)="YES")
0S$=�#F:P%=�S$," "):common%=(�S$,P%-1)="YES")
2S$=�#F:P%=�S$," "):leftmenu%=(�S$,P%-1)="YES")
?S$=�#F:P%=�S$," "):� �S$,P%-1)="YES" � caps%=128 � caps%=16
winback%=�(�#F)
�close_file(F)
-�dim_arrays(MaxFields%,MaxKeys%,MaxTabs%)
�init_vars
E� ------------------ Initialise Wimp ----------------------------
$block%="TASK"
mask%=(1<<11)
Cș "Wimp_Initialise",200,!block%,"Powerbase" � version%,mytask%
+� version%>=316 � RISCOS3=� � RISCOS3=�
 6ș "Impulse_Initialise",003,mytask%,"Powerbase",-1
!%ș "Interface_Initialise",mytask%
"Mpbaseicon%=�create_icon(-1,0,-16,144,110,&1700312B,"",dbase%,psprite%,10)
#D� --------- Set up Heap Manager. Load error messages -----------
$�initheaps(128,128)
%>ș "OS_File",5,"<PBase$Dir>.Resources.Messages" � ,,,,len%
&'errormsg%=�create_fixed_block(len%)
'?ș "OS_File",255,"<PBase$Dir>.Resources.Messages",errormsg%
(� I%=0 � len%
))  � errormsg%?I%=10 � errormsg%?I%=13
*� I%
+ș "OS_Byte",135 �,,mode%
,Ȏ mode% �
-&  � 12,15,16,17,35,36:f$="Sprites"
.  :f$="Sprites22"
/�
09ș "OS_File",5,"<PBase$Dir>.Resources."+f$ � ,,,,len%
1(sprites%=�create_fixed_block(len%+4)
2!sprites%=len%+4
3;ș "OS_File",255,"<PBase$Dir>.Resources."+f$,sprites%+4
4&undoanchor%=�create_anchor("Undo")
5)headanchor%=�create_anchor("Heading")
6*lineanchor%=�create_anchor("TextLine")
7&textanchor%=�create_anchor("Text")
8&formanchor%=�create_anchor("Form")
9.sprsanchor%=�create_anchor("DbaseSprites")
:&tempanchor%=�create_anchor("Temp")
;(balanchor%=�create_anchor("Balance")
<'flaganchor%=�create_anchor("Flags")
=/transanchor%=�create_anchor("DataTransfer")
>)selanchor%=�create_anchor("PrintSel")
?*recanchor%=�create_anchor("RecordNum")
@,saveanchor%=�create_anchor("SaveBuffer")
A&logoanchor%=�create_anchor("Logo")
B� I%=0 � MaxKeys%+1
C3   keyanchor%(I%)=�create_anchor("Key #"+�(I%))
D� I%
E� I%=0 � MaxTabs%
F6   tabanchor%(I%)=�create_anchor("VTable #"+�(I%))
G� I%
HI� --------------- Read validation strings etc -----------------------
I+V=�("<Pbase$Dir>.Resources.ValStrings")
Jvstrings%=�(�#V)
KO� vname$(vstrings%),valid%(vstrings%),rvalid%(vstrings%),hvalid%(vstrings%)
L� I%=0 � vstrings%
M  vname$(I%)=��#V,4)
N  valid$=�#V
O/  � V% �(valid$)+1:$V%=valid$:valid%(I%)=V%
P0  � V% �(valid$)+1:$V%=valid$:rvalid%(I%)=V%
QC  � V% �(valid$)+16:$V%=valid$+";Pptr_hand,12,8":hvalid%(I%)=V%
R� I%
S�close_file(V)
TE� ---------------------------------------------------------------
U� Method structure
V� PASS=0 � 2 � 2
WP%=methodtable%
X  [OPT PASS
Y        equd    0
Z)        �method(0,1,"GetPathname","")
['        �method(0,2,"Selection","")
\(        �method(0,3,"ParseQuery","")
]'        �method(0,4,"GetRecord","")
^'        �method(0,5,"PutRecord","")
_(        �method(0,6,"ExpandCode","")
`&        �method(0,7,"GetField","")
a)        �method(0,8,"GetExpanded","")
b         �method(-1,-1,"","")
c  ]
d
� PASS
e.�getscreensize(ScreenWidth%,ScreenHeight%)
f�create_windows
g�make_menus
h�set_auto(�)
i�set_autobalance(�)
j1�get_choices("<Pbase$Dir>.Resources.Choices")
k�
l:
m*� �method(Flags,Token,Method$,Syntax$)
n
[OPT PASS
o        equd    Flags
p        equd    Token
q         equs    Method$+�(0)
r         equs    Syntax$+�(0)
s        align
t]
u	=PASS
v:
w� �dim_arrays(F%,K%,T%)
x�� desc%(F%),Tag$(F%),field%(F%),F$(F%),Rf%(F%),len%(F%),maxlen%(F%),chartype%(F%),fix%(F%),link$(F%),calc$(F%),Tab%(F%),field$(F%),update$(F%)
yd� Date%(5),Index$(K%+1),KL%(K%+1),KF%(K%+1,1),KW%(K%+1,3),key$(K%+1),case%(K%+1),WD%(3),Ext%(10)
z� Label$(10,2)
{� Sum(30,3)
|!� key 256,date% 6,calcrow% F%
}� menu%(22),choice$(4)
~4� table$(T%+1),tabfieldlen%(9),fcol%(6),ncol%(6)

� rel%(6)
�� buttonfield%(22)
�MC%=30:� L%(MC%)
�J� -------------------- Allocate buffers ------------------------------
�(indirectionmem%=&7000:menumem%=&1400
�� Mi% 20,Mo% 20
�/� block% &1000,savebuff% &100,choices% &100
�:� buff% indirectionmem%:endbuff%=buff%+indirectionmem%
�B� menblk% menumem%:men_end%=menblk%+menumem%:menu_ptr%=menblk%
�� fieldmenu% 3200
�&� hand% 16:$hand%="Pptr_hand,12,8"
�!� paint% 8:$paint%="file_ff9"
�*� writep% 16:$writep%="Pptr_write,4,4"
�!� tick% 12:$tick%="Snull,yes"
�!� dbase% 10:$dbase%="No data"
�)� psprite% 15:$psprite%="S!Powerbase"
�:� menspr% 15,mentxt% 1:$menspr%="Smenu;Z0":$mentxt%=""
�<� winspr% 15,wintxt% 1:$winspr%="Swindow;Z0":$wintxt%=""
�� methodtable% 256
�J� ------------- Indirection addresses for Heap Manager ---------------
�� keyanchor%(K%+1)
�� tabanchor%(T%)
�� printrel$(T%)
�+� box% 16,box2% 16,matrix% 16,origin% 8
��
�:
�� �init_vars
�$getrec%=213:ClientSearch$="TRUE"
�LImp_wait%=�:Impref%=-1:merging%=�:mergenum%=0:mergewith$="":document$=""
�-mergetag%=214:transtag%=215:printtag%=216
�,flash%=�:dup%=�:filter%=�:logosloaded%=�
�4accessbutton%=0:stop%=�:scripton%=�:customise%=�
�%displayed%=�:scratchpad$="":k$=""
�?Search$="TRUE":Filter$="TRUE":REC%=-1:usekey%=-1:useval$=""
�_real$="":visible$="":reform$="":val$="":calcfield%=0:savefunc$="":savetofile%=�:startlog%=�
�/password$="":myref%=-1:Type%=0:fieldtype%=1
�4printing%=�:indexing%=�:validate%=�:relations%=�
�;delwarn%=�:autosave%=�:export%=�:csvconv%=�:saveint%=10
�&autobalance%=0:balint%=25:added%=0
�.present%=0:fields%=0:template%=0:adjust%=�
�(Listed%=�:writingcsv%=�:calcerror%=�
�tlk=0:cl=0:V=0:F=0:FH%=0:dbasehandle%=0:csvhandle%=0:texthandle%=0:text%=0:toobighandle%=0:loghandle%=0:handle%=0
�$date%=�6,�(0))
�"movetype%=8:movetype$="Move �"
�hquit%=�:exit%=�:matching%=�:newrec%=�:val%=�:ram%=�:Access%=�:Modify%=�:warn%=�:design%=�:newtree%=�
�/LenLine%=0:Count%=0:Start%=0:End%=0:Fptr%=0
�4Fieldnumber%=0:calclink%=0:Keyfld0%=0:Keyfld1%=0
�BLastTable%=-1:Tablenumber%=-1:TabsLoaded$="Tables":table$()=""
�5Rows%=0:TabFields%=0:Rec%=0:Match_tag%=1:fast%=10
�GKeys%=0:keylimit%=1:keylen%=1:LH%=90:file%=0:key%=0:top=8*file%+LH%
�+keyfunc$="":fieldfunc$="":Keys%=0:RU%=0
�1printorder$="":Form$="":ImpCom$="":margin$=""
�uon$=�(27)+�(%10001000)
�8Filename$="":extrakeys$="":extratabs$="":logpath$=""
�2months$="JanFebMarAprMayJunJulAugSepOctNovDec"
�pitch$=�(31)+"9001"
��
�:
�K� Window handling -----------------------------------------------------
�:
�� �create_windows
�=ș "Wimp_OpenTemplate",,"<Pbase$Dir>.Resources.Templates"
�'infoW%=�new_window("info",sprites%)
�$�text(infoW%,7)=version$
� $�text(infoW%,8)=intversion$
�<keypadW%=�new_window("keypad",sprites%):Title%=block%!72
�zsavesubW%=�new_window("savesub",sprites%):SubName%=�text(savesubW%,3):SubSprite%=�val(savesubW%,1):SubTitle%=block%!72
�UsaveW%=�new_window("save",1):SaveName%=�text(saveW%,0):SaveSprite%=�val(saveW%,1)
�AdatadicW%=�new_window("datadic",sprites%):TabTitle%=block%!72
�^accessW%=�new_window("access",sprites%):Password%=�text(accessW%,0):AccessTitle%=block%!72
�qpassW%=�new_window("password",sprites%):Read%=�text(passW%,2):Write%=�text(passW%,3):Manager%=�text(passW%,5)
�:mainW%=�new_window("main",sprites%):RecInfo%=block%!72
�?keyW%=�new_window("changekey",sprites%):KeyTitle%=block%!72
�1F1dkey%=�text(keyW%,0):F2dkey%=�text(keyW%,1)
�� Wkey%(3)
�� word%=0 � 3
�'  Wkey%(word%)=�text(keyW%,word%+2)
�� word%
�KeyNo%=�text(keyW%,6)
�BchangeW%=�new_window("change",sprites%):ChangeTitle%=block%!72
�'moveW%=�new_window("move",sprites%)
�)tableW%=�new_window("table",sprites%)
ъlinkW%=�new_window("link",sprites%):LinkTitle%=block%!72:Tablename%=�text(linkW%,0):fieldnum%=�text(linkW%,2):expand%=�text(linkW%,10)
�VmiscW%=�new_window("misc",sprites%):database%=�text(miscW%,1):$database%="No data"
�� ic%=2 � 7
�$  Date%(ic%-2)=�text(miscW%,ic%)
�	� ic%
�Oused%=�text(miscW%,17):filesize%=�text(miscW%,18):percent%=�text(miscW%,14)
�)printW%=�new_window("print",sprites%)
�)matchW%=�new_window("match",sprites%)
�'listW%=�new_window("list",sprites%)
�XcreateW%=�new_window("create",sprites%):FtitleText%=block%!72:$FtitleText%="Field 0"
۳DescText%=�text(createW%,4):TagText%=�text(createW%,5):LenText%=�text(createW%,6):ValText%=�text(createW%,28):InsText%=�text(createW%,26):Fixpt%=�text(createW%,13):$Fixpt%="2"
�;mintext%=�text(createW%,15):maxtext%=�text(createW%,25)
�dboxX%=�text(createW%,7):boxY%=�text(createW%,8):boxW%=�text(createW%,9):boxH%=�text(createW%,10)
�ArelateW%=�new_window("relation",sprites%):RelTitle%=block%!72
�@reformW%=�new_window("reform",sprites%):RefmTitle%=block%!72
�&colW%=�new_window("cols",sprites%)
�VcalcW%=�new_window("calc",sprites%):CalcForm%=�text(calcW%,0):CalcTitle%=block%!72
�)labelW%=�new_window("label",sprites%)
�-pselectW%=�new_window("pselect",sprites%)
�?mergeW%=�new_window("merge",sprites%):MergeTitle%=block%!72
�PsizeW%=�new_window("size",sprites%):Records%=�text(sizeW%,1):$Records%="100"
�.Increment%=�text(sizeW%,3):$Increment%="0"
�=csvW%=�new_window("csvfile",sprites%):CSVTitle%=block%!72
�ș "Wimp_CloseTemplate"
�� common% � �commonbuffers
��
�:
�� �commonbuffers
�"�common(keypadW%,29,matchW%,0)
��common(moveW%,7,matchW%,0)
�!�common(changeW%,3,matchW%,0)
�"�common(savesubW%,0,matchW%,0)
� �common(mergeW%,3,matchW%,0)
��
�:
� � �common(wi%,ic%,wic%,icc%)
�Formula%=�text(wic%,icc%)
�;!block%=wi%:block%!4=ic%:ș "Wimp_GetIconState",,block%
� ș "Wimp_DeleteIcon",,block%
�#block%!28=Formula%:block%!4=wi%
�,ș "Wimp_CreateIcon",,block%+4 � handle%
��
�:
�� �commoncase(wi%,ic%)
�	� on%
�� � commoncase% � �
�on%=�selected(wi%,ic%)
�set_icon(matchW%,16,on%)
�set_icon(keypadW%,32,on%)
�set_icon(moveW%,9,on%)
�set_icon(changeW%,5,on%)
�set_icon(savesubW%,5,on%)
�set_icon(mergeW%,12,on%)
�
:
� �new_window(name$,sp%)
	
� handle%

Fș "Wimp_LoadTemplate",,block%,buff%,endbuff%,-1,name$,0 � ,,buff%
'� name$="main" � block%?35=winback%
block%!64=sp%

,ș "Wimp_CreateWindow",,block% � handle%
=handle%
:
� �show_windows
�open_window(mainW%)
� (present% � 7)=7 �
  � �selected(passW%,9) �
9    !block%=keypadW%:ș "Wimp_GetWindowState",,block%
5    block%!12=block%!4+660:block%!8=block%!16-328
,    block%!20=0:block%!24=0:block%!28=-1
$    ș "Wimp_OpenWindow",,block%
  �
  addr=�moveto(key%,top,1)
�
$� Listed% � �open_window(listW%)
�
:
� �open_window(whandle%)
block%!0=whandle%
 $ș "Wimp_GetWindowState",,block%
!block%!28=-1
" ș "Wimp_OpenWindow",,block%
#�
$:
%"� �set_height(handle%,height%)
&4!block%=handle%:ș "Wimp_GetWindowState",,block%
'block%!16=block%!8+height%
( ș "Wimp_OpenWindow",,block%
)�
*:
+� �perform_close(wi%)
,Ȏ wi% �
-&  � mainW%:�close_window(keypadW%)
.  � matchW%:matching%=�
/  � calcW%:calclink%=0
0  � keyW%:
1  design%=�:newtree%=�
2  !block%=0:block%!4=-700
3  block%!8=506:block%!12=0
4&  ș "Wimp_SetExtent",keyW%,block%
5  !block%=keyW%
6  � mergeW%:
7l  � mergewith$<>"" � ș "Impulse_SendMessage",&200,":"+mergewith$+"."+document$+" Edit On",,,,-1,mytask%
8  merging%=�
9�
:�close_window(wi%)
;�
<:
=� �hide_windows
>�perform_close(mainW%)
?�perform_close(keypadW%)
@�perform_close(datadicW%)
A�perform_close(listW%)
B�perform_close(matchW%)
C�perform_close(relateW%)
D�perform_close(keyW%)
E�perform_close(reformW%)
F�perform_close(calcW%)
G�perform_close(mergeW%)
H�perform_close(csvW%)
I�
J:
K� �close_window(whandle%)
L!block%=whandle%
M!ș "Wimp_CloseWindow",,block%
N�
O:
P� �redraw(handle%)
Q� L%
RL%=�(margin$)
S!block%=handle%
T*ș "Wimp_RedrawWindow",,block% � more%
U�get_origin(block%,x0%,y0%)
Vȕ more%
W  �draw(x0%,y0%)
XB  � handle%<>datadicW% � ș "Interface_Render3dWindow",,block%
Y,  ș "Wimp_GetRectangle",,block% � more%
Z�
[�
\:
]%� �get_origin(block%,� x0%,� y0%)
^x0%=block%!4-block%!20
_y0%=block%!16-block%!24
`�
a:
b� �draw(x0%,y0%)
c � TextPtr%,y1%,y2%,I%,chars%
dȎ handle% �
e  � listW%
f  y1%=-(block%!40-y0%)
g  y2%=-(block%!32-y0%)
h  y1%=y1% � 32+1
i  y2%=y2% � 32+1
j.  TextPtr%=(!textanchor%)+(y1%-1)*LenLine%
k  � y2%>Count% � y2%=Count%
l  � I%=y1% � y2%
m    �draw_line(I%)
n    TextPtr%+=LenLine%
o
  � I%
p�
q�
r:
s� �draw_line(Line%)
t� x0%,y0%-(Line%-1)*32-4
u� TextPtr%?L%=12 � �
v$ș "OS_WriteN",TextPtr%,LenLine%
w�
x:
yK� Menu handling -------------------------------------------------------
z:
{� �make_menus
|� I%
}�menu%(10)=�create_menu(menu_ptr%,260,"Field,Index field...,Analyse months,Global changes>"+�(changeW%)+",Link to table...,Combine fields>"+�(calcW%)+",Start editing,Clear contents,Warn of delete,Save contents>"+�(saveW%)+",Undo changes")
~Omenic%=menu%(10)+28+(1*24):AnalyseFunc%=menic%!12:menic%!16=-1:menic%!20=14
Lmenic%=menu%(10)+28+(4*24):CalcFunc%=menic%!12:menic%!16=-1:menic%!20=14
�?menu%(13)=�create_menu(menu_ptr%,120,"Interval:,"+�13,"0"))
�menic%=menu%(13)+28
�>Interval%=menic%!12:menic%!16=buff%:$buff%="A0-9":buff%+=5
�0?menic%=?menic% � (1<<2):$Interval%="10 min"
�smenu%(12)=�create_menu(menu_ptr%,160,"Save indices,Automatic>"+�(menu%(13))+",Warning>"+�(menu%(13))+",Manual")
��menu%(2)=�create_menu(menu_ptr%,265,"Validation,Create table...,~Display table,Show table files,Validate input,Show relations")
��tick(menu%(2),3,�)
��tick(menu%(10),7,�)
��menu%(7)=�create_menu(menu_ptr%,260,"Misc.,Batch delete!"+�(moveW%)+",Set passwords...,Colours!"+�(colW%)+",Save indices>"+�(menu%(12))+",Edit template")
�Nmenu%(15)=�create_menu(menu_ptr%,90,"Separator,Comma,TAB,CR,LF,"+�13,"0"))
�menic%=menu%(15)+28+(4*24)
�-Delim%=menic%!12:menic%!16=-1:menic%!20=3
�'?menic%=?menic% � (1<<2):$Delim%=""
�]menu%(20)=�create_menu(menu_ptr%,90,"Terminator,CR,LF,LF CR,CR LF,CR CR,LF LF,"+�13,"0"))
�menic%=menu%(20)+28+(6*24)
�.Termin%=menic%!12:menic%!16=-1:menic%!20=3
�(?menic%=?menic% � (1<<2):$Termin%=""
��string$="Print,Match,Show resources,Show jobs done,Options...,Save options!"+�(saveW%)+",Save query!"+�(saveW%)+",~Numeric fields>"+�(pselectW%)+",~Save selection!"+�(saveW%)+",~Clear selection"
�>menu%(6)=�create_menu(menu_ptr%,260,string$+",Select all")
�zstring$="Powerbase,Information!"+�(miscW%)+",Field: ''>"+�(menu%(10))+",Print>"+�(menu%(6))+",Validation>"+�(menu%(2))
��string2$=",Current key...,Miscellaneous>"+�(menu%(7))+",Show keypad,Export subset!"+�(savesubW%)+",Export CSV!"+�(savesubW%)+",CSV options...,Save choices,Undo changes,Help"
�9menu%(1)=�create_menu(menu_ptr%,236,string$+string2$)
�#Fieldpos%=menu%(1)+28+(1*24)+12
�Jmenu%(4)=�create_menu(menu_ptr%,200,"Print tree,Complete,Totals only")
�<menu%(22)=�create_menu(menu_ptr%,120,"Every:,"+�13,"0"))
�menic%=menu%(22)+28
�;Every%=menic%!12:menic%!16=buff%:$buff%="A0-9":buff%+=5
�.?menic%=?menic% � (1<<2):$Every%="25 recs"
�Xmenu%(21)=�create_menu(menu_ptr%,160,"Balance,Automatic>"+�(menu%(22))+",Right now")
��menu%(3)=�create_menu(menu_ptr%,300,"Utilities,New primary key...,Adjust format,New record format,Merge database,~Change length>"+�(sizeW%)+",Balance index>"+�(menu%(21))+",Print index>"+�(menu%(4))+",Find duplicates,Warn of duplicates")
��menu%(0)=�create_menu(menu_ptr%,266,"\Powerbase,Information>"+�(infoW%)+",New database!"+�(saveW%)+",~Utilities>"+�(menu%(3))+",~Close database,~Abandon database,Save choices,Default choices,Help,Quit")
��menu%(9)=�create_menu(menu_ptr%,270,"New database,Design field...,~_Default database,~Save form file!"+�(saveW%)+",~Database size>"+�(sizeW%)+",~Primary key...,~Quit design")
�jmenu%(17)=�create_menu(menu_ptr%,200,"Table,Clear,Save!"+�(saveW%)+",Print,Sort,Undo change,Undo all")
�Vmenu%(18)=�create_menu(menu_ptr%,250,"List,Save as text!"+�(saveW%)+",Sort,Scrap")
�menu$="Data"
�� I%=0 � 8
�  menu$+=","+vname$(I%)
�� I%
�Bmenu%(8)=�create_menu(menu_ptr%,200,menu$):�tick(menu%(8),1,�)
�menu$="External"
�� I%=36 � 40
�  menu$+=","+vname$(I%)
�� I%
�Dmenu%(11)=�create_menu(menu_ptr%,180,menu$):�tick(menu%(11),0,�)
�menu$="Check box"
�� I%=41 � 45
�  menu$+=","+vname$(I%)
�� I%
�Dmenu%(14)=�create_menu(menu_ptr%,180,menu$):�tick(menu%(14),0,�)
�menu$="Stamp"
�� I%=46 � 59
�  menu$+=","+vname$(I%)
�� I%
�Dmenu%(16)=�create_menu(menu_ptr%,250,menu$):�tick(menu%(16),0,�)
�menu$="Button"
�� I%=9 � 35
�  menu$+=","+vname$(I%)
�� I%
�Dmenu%(19)=�create_menu(menu_ptr%,270,menu$):�tick(menu%(19),0,�)
�ybar%=96+9*44
��
�:
�� �field_menu(menu%,N%)
�� F%,P%,L%,D$,F$
�$menu%="Field list"
�Smenu%?12=7:menu%?13=2:menu%?14=7:menu%?15=0:menu%!16=270:menu%!20=44:menu%!24=0
�P%=menu%+28
�� F%=1 � N%
�"  F$=�(F%):F$=�3-�(F$)," ")+F$
�7  D$=�$�text(mainW%,desc%(F%)),7):D$+=�7-�(D$)," ")
�&  F$+=" "+D$+" "+Tag$(F%):L%=�(F$)
�A  !P%=0:P%!4=-1:P%!8=&7000121:P%!12=buff%:P%!16=-1:P%!20=L%+1
�  $buff%=F$:buff%+=L%+1
�  P%+=24
�� F%
�P%!-24=P%!-24 � &80
��
�:
�(� �create_menu(� menu%,width%,list$)
�4� start%,choice$,entries%,item%,P%,Q%,S%,shaded%
�start%=menu%
�A� �list$,1)="\" � (RISCOS3=� � leftmenu%=�) � list$=�list$,2)
�P%=�list$,",")
�$menu%=�list$,P%-1)
�menu%?12=7:menu%?13=2
�menu%?14=7:menu%?15=0
�*menu%!16=width%:menu%!20=44:menu%!24=0
�item%=menu%+28
�list$+=","
�entries%=0
��
�
  Q%=P%+1
�  P%=�list$,",",Q%)
�  � P%>0 �
�    !item%=0:shaded%=0
�     choice$=�list$,Q%,P%-Q%)
�?    � �choice$,1)="~" � choice$=�choice$,2):shaded%=(1<<22)
�A    � �choice$,1)="_" � choice$=�choice$,2):?item%=?item% � 2
�    S%=�choice$,"!")
�5    � S%>0 � ?item%=?item% � 8:�choice$,S%,1)=">"
�    S%=�choice$,">")
�    � S%=0 �
�      item%!4=-1
�      �
�#      item%!4=�(�choice$,S%+1))
�       choice$=�choice$,S%-1)
�	    �
�    � �(choice$)<=12 �
�      $(item%+12)=choice$
�      item%!8=&7000021
�      �
�      L%=�(choice$)+1
�I      item%!12=buff%:$buff%=choice$:buff%+=L%:item%!16=-1:item%!20=L%
�      item%!8=&7000121
�	    �
�!    item%!8=item%!8 � shaded%
�    item%+=24
�    entries%+=1
�  �
�
� P%=0
�item%!-24=item%!-24 � &80
�menu%=item%
�Q� menu%>men_end% � � � 0,"Not enough room for menus (internal error code 50)"
�=start%
�:
�� �tick(menu%,item%,on%)
�item%=menu%+28+item%*24
�Ȏ on% �
  � �:?item%=?item% � 1
  � �:?item%=?item% � 254
�
�
:
)� �tick_one(menu%,first%,last%,item%)
� I%
� I%=first% � last%
   �tick(menu%,I%,(I%=item%))
	� I%

�
:
� �ticked(menu%,item%)

item%=menu%+28+item%*24
� (?item% � 1) �=� �=�
:
� �lit(menu%,item%,on%)
item%=menu%+28+item%*24
Ȏ on% �
&  � �: item%!8=item%!8 � � (1<<22)
$  � �: item%!8=item%!8 � (1<<22)
�
�
:
� �show_menu(menu%,x%,y%)
)menuhandle%=menu%:menux%=x%:menuy%=y%
%ș "Wimp_CreateMenu",,menu%,x%,y%
�
:
K� Icon handling -------------------------------------------------------
:
T� �create_icon(whandle%,xmin%,ymin%,width%,height%,iconflags%,text$,d1%,d2%,d3%)
 
� handle%
!block%!0=whandle%
"!block%!4=xmin%:block%!8=ymin%
#2block%!12=xmin%+width%:block%!16=ymin%+height%
$block%!20=iconflags%
%
� d1%=0 �
&  $(block%+24)=text$
'  �
(  block%!24=d1%
)  block%!28=d2%
*  block%!32=d3%
+�
,*ș "Wimp_CreateIcon",,block% � handle%
-=handle%
.:
/� �redraw_icon(wi%,ic%)
0!block%=wi%:block%!4=ic%
1block%!8=0:block%!12=0
2"ș "Wimp_SetIconState",,block%
3*block%!8=0:block%!12=wi%:block%!16=ic%
4�
5:
6!� �icon_bit(bit%,wi%,ic%,on%)
7!block%=wi%
8block%!4=ic%
9Ȏ on% �
:&  � �:block%!8=0:block%!12=1<<bit%
;,  � �:block%!8=1<<bit%:block%!12=1<<bit%
<�
="ș "Wimp_SetIconState",,block%
>�
?:
@� �select(wi%,ic%)
A!block%=wi%:block%!4=ic%
B"block%!8=1<<21:block%!12=1<<21
C"ș "Wimp_SetIconState",,block%
D�
E:
F� �deselect(wi%,ic%)
G!block%=wi%:block%!4=ic%
H block%!8=0:block%!12=(1<<21)
I"ș "Wimp_SetIconState",,block%
J�
K:
L� �invert(wi%,ic%)
M@� �selected(wi%,ic%) � �deselect(wi%,ic%) � �select(wi%,ic%)
N�
O:
P� �set_icon(wi%,ic%,on%)
Q1� on% � �select(wi%,ic%) � �deselect(wi%,ic%)
R�
S:
T� �selected(wi%,ic%)
U!block%=wi%:block%!4=ic%
V"ș "Wimp_GetIconState",,block%
W=((block%!24) � (1<<21))>0
X:
Y� �shaded(wi%,ic%)
Z!block%=wi%:block%!4=ic%
["ș "Wimp_GetIconState",,block%
\=((block%!24) � (1<<22))>0
];
^� �selected_esg(wi%,esg%)
_Aș "Wimp_WhichIcon",wi%,block%,&003F0000,&00200000+(esg%<<16)
`=!block%
a:
b$� �next_writeable(wi%,ic%,d%,r%)
c� P%,E%,next%
d5ș "Wimp_WhichIcon",wi%,block%,&00C0E000,(14<<12)
e�
f  E%+=4
g� block%!E%=-1
hȕ block%!P%<>ic% � P%<E%
i  P%+=4
j�
k� P%=E% � P%-=4
l� r%=1 � P%+4=E% �=�
mȎ d% �
n  � 0:P%=E%
o  � 2:P%=-4
p  :P%+=4*d%
q�
rȎ P% �
s  � E%:next%=!block%
t  � -4:next%=block%!(E%-4)
u  :next%=block%!P%
v�
w�set_caret(wi%,next%)
x=�
y:
z� �text(wi%,ic%)
{!block%=wi%:block%!4=ic%
|"ș "Wimp_GetIconState",,block%
}=block%!28
~:
� �val(wi%,ic%)
�!block%=wi%:block%!4=ic%
�"ș "Wimp_GetIconState",,block%
�=block%!32
�:
�� �text_length(wi%,ic%)
�!block%=wi%:block%!4=ic%
�"ș "Wimp_GetIconState",,block%
�=�($(block%!28))
�:
�� �set_caret(handle%,ic%)
�� ic%=-1 �
�,  ș "Wimp_SetCaretPosition",handle%,ic%
�  �
�M  ș "Wimp_SetCaretPosition",handle%,ic%,0,0,-1,�text_length(handle%,ic%)
��
��
�:
�"� �alter_flags(dfg%,ffg%,bfg%)
�� ic%,F%
�!block%=mainW%
�� ic%=0 � fields%*2-1
�  F%=(ic%+1) � 2
�1  block%!4=ic%:ș "Wimp_GetIconState",,block%
�  � (ic% � 2)=1 �
�    Ȏ chartype%(F%) �
�U      � 0,1,2,3,4,5,6,7,8,40,46,47,48,49,50,51,52,53,54,55,56,57,58:block%!8=ffg%
�'      � 39:block%!8=ffg%:len%(F%)=0
�B      � 59:� logosloaded% � block%!8=&0000611E � block%!8=ffg%
�      :block%!8=bfg%
�	    �
�    � block%!8=dfg%
�  �
�  block%!12=&FFFFFFFF
�$  ș "Wimp_SetIconState",,block%
�	� ic%
��
�:
�� �limit_actions(off%)
�	� ic%
�� +0
�	� ic%
��
�%  �icon_bit(22,keypadW%,ic%,off%)
�Q  � buttonfield%(ic%)>0 � �icon_bit(22,mainW%,field%(buttonfield%(ic%)),off%)
�  � ic%
�� ic%=-1
��lit(menu%(10),0,off%)
��lit(menu%(10),1,off%)
��lit(menu%(10),2,off%)
�:
�#� 12,14,15,16,17,18,20,21,22,-1
�:
��
�:
�� �identify_field(ic%)
�.Fieldnumber%=0:Fieldname$="":TextLength%=0
�� (ic% � 2)=1 �
�!  !block%=mainW%:block%!4=ic%
�$  ș "Wimp_GetIconState",,block%
�  TextLength%=block%!36-1
�  Fieldnumber%=(ic%+1) � 2
�3  Fieldname$=$�text(mainW%,desc%(Fieldnumber%))
�5  � Fieldname$="" � Fieldname$=Tag$(Fieldnumber%)
�"  Ȏ chartype%(Fieldnumber%) �
�$    � 2,4:ș "OS_Byte",202,0,239
�!    :ș "OS_Byte",202,16,111
�  �
�  ș "OS_Byte",118
��
��
�:
�� �first_field
�� I%
�� I%+=1
�1� (len%(I%)>0 � chartype%(I%)<6) � I%>fields%
�� I%>fields% �=0 �=I%
�:
�K� Mouse_click processing ----------------------------------------------
�:
�� �mouse(x%,y%,b%,wi%,ic%)
�oldx%=x%:oldy%=y%
�Cblock%!0=x%:block%!4=y%:block%!8=b%:block%!12=wi%:block%!16=ic%
�R� (b% � 2)<>2 � � (design% � (wi%=mainW%)) � ș "Interface_SlabButton",,block%
�Ȏ wi% �
�  � -2:�iconbar_click
�"  � accessW%:accessbutton%=ic%
�  � mainW%:�main_click
�*  � keypadW%:�keypad_click(wi%,ic%,b%)
�0  � saveW%,savesubW%:�save_click(wi%,ic%,b%)
�  � keyW%:�key_click
�  � tableW%:�create_table
�  � linkW%:�link_to_table
�  � passW%:�passwords
�  � printW%:�print_click
�(  � matchW%:�match_click(b%,wi%,ic%)
�  � createW%:�create_click
�   � datadicW%:�datadic_click
�  � changeW%:�change_click
�  � moveW%:�move_click
�(  � listW%:�list_click(x%,y%,b%,wi%)
�  � colW%:�set_colours
�2  � calcW%:� ic%=1 � �calc_formula($CalcForm%)
�  � labelW%:
�  Ȏ ic% �
�;    � 11:�icon_bit(22,labelW%,12,�selected(labelW%,11))
�%    � 15:ș "Wimp_CreateMenu",,-1
�  �
�  � mergeW%:�merge_click
�  � sizeW%:�size_click
�  � csvW%:�csv_click
�N  � pselectW%,relateW%,reformW%,infoW%,miscW%:� ### No action on these ###
�  :�special_click
��
�*block%!8=0:block%!12=wi%:block%!16=ic%
�%ș "Interface_SlabButton",,block%
��
�:
�� �change_click
�� (b% � %111)=4 �
�  Ȏ ic% �
�    � 4:�changes(key%)
�     � 5:�commoncase(wi%,ic%)
�  �
��
��
�:
�� �move_click
�� (b% � %111)=4 �
  Ȏ ic% �
    � 8:�clear
     � 9:�commoncase(wi%,ic%)
  �
�
�
:
� �csv_click
Ȏ (b% � %111) �
	  � 2,4:

  Ȏ ic% �
0    � 5:�show_menu(menu%(15),oldx%+32,oldy%)
0    � 6:�show_menu(menu%(20),oldx%+32,oldy%)

  �
�
Ȏ (b% � %111) �

  � 4:
  Ȏ ic% �
6    � 1:�icon_bit(22,csvW%,4,(�selected(csvW%,1)))
*    � 9:�convert_csv($�text(csvW%,13))
!    � 10:�close_window(csvW%)
  �
�
�
:
� �merge_click
"� (b% � %111)=4 � z%=1 � z%=-1
Ȏ ic% �
/  � 4:ClientPtr%=�merge_next(ClientPtr%,z%)
0  � 9:ClientPtr%=�merge_next(ClientPtr%,-z%)
)  � 11:ClientPtr%=�merge_next(top,z%)
*  � 10:ClientPtr%=�merge_next(top,-z%)
   � 12:�commoncase(wi%,ic%)
!
  � 5:
"^  ș "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Print",,,,printtag%,mytask%
#
  � 7:
$  mergenum%=0
%C  ClientSearch$=�parse($�text(mergeW%,3),�selected(mergeW%,12))
&#  ClientPtr%=�merge_next(top,1)
'!  � 8:�perform_close(mergeW%)
(�
)�
*:
+� �size_click
,
Ȏ � �
-  � �($Records%)<=0:
.  �softerror("",71)
/,  $Records%="100":�redraw_icon(sizeW%,1)
0  � �($Increment%)<0
1  �softerror("",72)
2-  $Increment%="25":�redraw_icon(sizeW%,3)
3  :
43  � present%=7 � �change_length(�($Records%),�)
5  ș "Wimp_CreateMenu",,-1
6�
7�
8:
9� �datadic_click
:Ȏ b% � %111 �
;
  � 4:
<8  !block%=datadicW%:ș "Wimp_GetWindowState",,block%
=M  ș "Wimp_SetCaretPosition",datadicW%,ic%,x%-block%!4+block%!20,y%,-1,-1
>+  � 2:�show_menu(menu%(17),x%-64,y%-20)
?
  � 1:
@  � ic%>=0 �
A%    field%=(ic% � (TabFields%+1))
B    �invert(wi%,field%)
C    field$=�(field%)
D!    � �selected(wi%,field%) �
E)      printrel$(Tablenumber%)+=field$
F      �
G-      P%=�printrel$(Tablenumber%),field$)
H_      printrel$(Tablenumber%)=�printrel$(Tablenumber%),P%-1)+�printrel$(Tablenumber%),P%+1)
I	    �
J  �
K�
L�
M:
N� �list_click(x%,y%,b%,wi%)
O� N%
PȎ (b% � %111) �
Q+  � 2:�show_menu(menu%(18),x%-64,y%-20)
R
  � 4:
S  !block%=wi%
T&  ș "Wimp_GetWindowState",,block%
U,  line%=(block%!16-block%!24-y%+32) � 32
V*  column%=(x%-block%!4+block%!20) � 16
W  RecPtr%=!recanchor%
X  R%=RecPtr%!(line%*4)
Y  E%=�(Form$) � 2
Z  � R%>=0 �
[&    addr=�find("#"+�(R%),key%,1,�)
\    Ȏ format$ �
]      � "horiz","table"
^      �
_        N%+=1
`&      � Tab%(N%)>column%+1 � N%=E%
a$      F%=�fnum(�Form$,N%*2-1,2))
b      � "vert":
c      �
d        N%+=1:line%-=1
e)      � RecPtr%!(line%*4)<>R% � N%=E%
f$      F%=�fnum(�Form$,N%*2-1,2))
g"      � "tree":F%=KF%(tkey%,0)
h      � "dup":F%=KF%(0,0)
i	    �
j;    � chartype%(F%)<=10 � �set_caret(mainW%,field%(F%))
k    Fieldnumber%=F%
l  �
m�
n�
o:
p� �match_click(b%,wi%,ic%)
q� not%,and%,or%
r/� b%=2 � �show_menu(menu%(1),x%-64,y%-20):�
s!Ȏ �selected_esg(printW%,4) �
t  � 38:reportdest$="Window"
u  � 39:reportdest$="File"
v   � 41:reportdest$="Printer"
w�
xȎ ic% �
y  � 16:�commoncase(wi%,ic%)
z  � 27:
{c  � �selected(matchW%,27) � $�text(matchW%,25)="Number found" � $�text(matchW%,25)="Time taken"
|  �redraw_icon(matchW%,25)
}
  � 1,24:
~o  � ic%=24 � Search$="":displayed%=� � Search$=�parse($�text(matchW%,0),�selected(matchW%,16)):displayed%=�
  � Search$<>"FALSE" �
�    $�text(matchW%,14)=""
�     �redraw_icon(matchW%,14)
�    Ȏ reportdest$ �
�9      � "Window","Printer":�do_it(Search$,displayed%)
�      � "File":
�      savefunc$="Save list"
�1      $SaveName%=$database%+".PrintJobs.List"
�4      $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
�:      !block%=matchW%:ș "Wimp_GetWindowState",,block%
�,      xmin%=block%!4+200:ymax%=block%!16
�9      !block%=saveW%:ș "Wimp_GetWindowState",,block%
�;      block%!12=xmin%+block%!12-block%!4:block%!4=xmin%
�;      block%!8=ymax%-block%!16+block%!8:block%!16=ymax%
�3      block%!28=-1:ș "Wimp_OpenWindow",,block%
�      �set_caret(saveW%,0)
�	    �
�  �
�^  � (b% � %111)=4 � � �selected(matchW%,27) � �close_window(matchW%):�set_caret(mainW%,-1)
�  � 21,22:
�6  � (b% � %111)=4 � z%=1 � � (b% � %111)=1 � z%=-1
�0  � ic%=21 � Match_tag%+=z% � Match_tag%-=z%
�)  � Match_tag%>fields% � Match_tag%=1
�)  � Match_tag%<1 � Match_tag%=fields%
�(  $�text(matchW%,3)=Tag$(Match_tag%)
�  �redraw_icon(matchW%,3)
�4  �tick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
�0  � 26:�show_menu(fieldmenu%,oldx%+32,oldy%)
�  � 10:
�"  op%=�selected_esg(matchW%,1)
�  Ȏ op% �
�    � 5:op$="="
�    � 6:op$="{"
�    � 7:op$="<"
�    � 8:op$=">"
�    � 15:op$="<>"
�    � 18:op$=">="
�    � 19:op$="<="
�    � 20:op$="}{"
�  �
�4  not%=�selected(matchW%,4):�deselect(matchW%,4)
�6  and%=�selected(matchW%,12):�deselect(matchW%,12)
�5  or%=�selected(matchW%,13):�deselect(matchW%,13)
�  tag$=$�text(matchW%,3)
�!  contents$=$�text(matchW%,9)
�  new$=tag$+op$+contents$
�$  � not% � new$="NOT ("+new$+")"
�  � and% � new$+=" AND "
�  � or% � new$+=" OR "
�F  $�text(matchW%,0)=$�text(matchW%,0)+new$:�redraw_icon(matchW%,0)
�2  $�text(matchW%,9)="":�redraw_icon(matchW%,9)
�,  � 24:reportdest$="Window":�do_it("",�)
�^  � (b% � %111)=4 � � �selected(matchW%,27) � �close_window(matchW%):�set_caret(mainW%,-1)
��
��
�:
�� �iconbar_click
�Ȏ b% � %111 �
�
  � 2:
�  � �selected(passW%,12) �
�    �close_window(saveW%)
�(    �show_menu(menu%(0),x%-64,ybar%)
�  �
�
  � 4:
�  � $dbase%="No data" �
�    $SaveName%="!DataBase"
�2    $SaveSprite%="snew_appl;Pptr_hand,12,8;B3"
�    savefunc$=choice$(1)
�1    ș "Wimp_CreateMenu",,saveW%,x%-50,y%+300
�    � �show_windows
�  �
��
��
�:
�� �main_click
�� P%,F%,H$,L%,T%,N$,field$
�b� present%=7 � adjust%=� � � �validate(Fieldnumber%,T%,N$)=� � � � �update_calcs(Fieldnumber%)
�8� flash% � �deselect(mainW%,field%(flash%)):flash%=�
�Ȏ present% �
�  � 0,3:�design_field
�
  � 1:
�%  � �first_field>0 � �default_key
�  �design_field
�  � 5,7:
�  � adjust% �
�    �design_field
�	    �
�    �identify_field(ic%)
�&    � relations%=� � �relations(�)
�    Ȏ b% � 2047 �
�      � 2:
�,      � �selected(passW%,11) � Modify% �
�        �set_up_field_menu
�,        �show_menu(menu%(1),x%-64,y%-20)
�      �
�      � 1:
�&      Ȏ chartype%(Fieldnumber%) �
�        � 41,42,43,44,45:
�        �invert(wi%,ic%)
�(        col%=�get_icon_cols(wi%,ic%)
�4        col%=((col%>>4) � (col%<<4)) � %11111111
�(        �set_icon_cols(wi%,ic%,col%)
�%        boxon%=((col% � %1111)<2)
�%        �update_selection(boxon%)
�      �
�      � 4:
�&      Ȏ chartype%(Fieldnumber%) �
�9        � 31:�filter(mainW%,field%(buttonfield%(22)))
�        � 41,42,43,44,45:
�&        � �(-3) � �invert(wi%,ic%)
�Q        � �selected(wi%,ic%) � $Rf%(Fieldnumber%)=" " � $Rf%(Fieldnumber%)=""
�        :�relations(�)
�      �
�      � 256:
�&      Ȏ chartype%(Fieldnumber%) �
�J        � 0,1,2,3,4,5,6,7,8,36,39,46,47,48,49,50,51,52,53,54,55,56,57:
�        �invert(wi%,ic%)
�1        �update_selection(�selected(wi%,ic%))
�}        � 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:�keypad_click(wi%,chartype%(Fieldnumber%)-9,1)
�      �
�      � 1024:
�      � �(-3) �
�.        ș "Wimp_GetCaretPosition",,block%
�$        wi%=!block%:ic%=block%!4
�        Ȏ wi% �
�(          � matchW%:� ic%<>0 � wi%=0
�*          � keypadW%:� ic%<>29 � wi%=0
�(          � mergeW%:� ic%<>3 � wi%=0
�          :wi%=0

        �
        � wi%<>0 �
1          $�text(wi%,ic%)+=Tag$(Fieldnumber%)
!          �set_caret(wi%,ic%)
#          �redraw_icon(wi%,ic%)

        �

        �
(        Ȏ chartype%(Fieldnumber%) �
          � 0,1,2,3,4,5,8:
	           � Fieldnumber%>0 �

?            !block%=mainW%:ș "Wimp_GetWindowState",,block%
`            � Access% � ș "Wimp_SetCaretPosition",mainW%,ic%,x%-block%!4+block%!20,y%,-1,-1
          �

{          � 35:� �link$(Fieldnumber%),1)="@" � ș "OS_CLI","Filer_OpenDir "+�link$(Fieldnumber%),2) � �softerror("",91)
N          � 36,37,38:�edit_blob(REC%,Fieldnumber%,chartype%(Fieldnumber%))
          � 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:�keypad_click(wi%,chartype%(Fieldnumber%)-9,4)
          � 32:�match
          � 33:�exit(0)
          � 34:quit%=�

        �
      �
	    �
  �
�
�
:
� �set_up_field_menu
� I%
1�tick_one(menu%(5),0,LastTable%,LastTable%+1)
� Fieldnumber%>0 �
  �lit(menu%(1),1,�)
  $AnalyseFunc%="Analyse"
 -  $Fieldpos%="Field: "+Tag$(Fieldnumber%)
!  $LinkTitle%=Fieldname$
"'  $CalcForm%=Tag$(Fieldnumber%)+"="
#  � I%=0 � 9
$    �lit(menu%(10),I%,�)
%
  � I%
&   V%=chartype%(Fieldnumber%)
'
  Ȏ V% �
(    � 5,50,51:
)&    isadate%=�:�lit(menu%(10),1,�)
*&    $AnalyseFunc%="Analyse months"
+    :isadate%=�
,  �
-$  � �is_a_key(Fieldnumber%)>=0 �
.    �lit(menu%(10),1,�)
/_    � isadate%=� � � �selected(mainW%,field%(Fieldnumber%)) � $AnalyseFunc%="Analyse index"
0  �
1
  Ȏ V% �
2    � 0,1,2,3,4,5:
3!    �lit(menu%(10),0,Access%)
4!    �lit(menu%(10),2,Access%)
5!    �lit(menu%(10),3,Access%)
6!    �lit(menu%(10),5,Access%)
7!    �lit(menu%(10),9,Access%)
84    Keyfld0%=Fieldnumber%:Keyfld1%=0:$F2dkey%=""
9#    $F1dkey%=Tag$(Fieldnumber%)
:(    keylimit%=TextLength%:$KeyNo%=""
;2    WD%()=0:WD%(0)=keylimit%:keylen%=keylimit%
<    � J%=0 � 3
=      $Wkey%(J%)=�(WD%(J%))
>    � J%
?*    $ChangeTitle%="Field: "+Fieldname$
@    $�text(changeW%,1)=""
A+    � � common% � $�text(changeW%,3)=""
B    �link_status
C    � 6:
D!    �lit(menu%(10),4,Modify%)
E!    �lit(menu%(10),3,Access%)
F$    �calc_link("Calculations",6)
G    �link_status
H    � 7:
I!    �lit(menu%(10),4,Modify%)
J!    �lit(menu%(10),3,Access%)
K&    �calc_link("Combine fields",7)
L    �link_status
M.    � 46,47,48,49,50,51,52,53,54,55,56,57:
N    � V%=47 �
O#      �lit(menu%(10),4,Modify%)
P)      �calc_link("Set base value",47)
Q	    �
R!    �lit(menu%(10),0,Access%)
S4    Keyfld0%=Fieldnumber%:Keyfld1%=0:$F2dkey%=""
Tt    � Fieldname$<>Tag$(Fieldnumber%) � $F1dkey%=�Fieldname$,8)+" ("+Tag$(Fieldnumber%)+")" � $F1dkey%=Fieldname$
U(    keylimit%=TextLength%:$KeyNo%=""
V2    WD%()=0:WD%(0)=keylimit%:keylen%=keylimit%
W    � J%=0 � 3
X      $Wkey%(J%)=�(WD%(J%))
Y    � J%
Z    � 36,39:
[D    � �blob_path(�,$database%,REC%,Fieldnumber%,V%,object$)>=0 �
\#      �lit(menu%(10),6,Access%)
]      �lit(menu%(10),7,�)
^      �lit(menu%(10),8,�)
_      $SaveName%="TextFile"
`4      $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
a      savefunc$="Save text"
b	    �
c    � 37,40:
dD    � �blob_path(�,$database%,REC%,Fieldnumber%,V%,object$)>=0 �
e#      �lit(menu%(10),6,Access%)
f      �lit(menu%(10),7,�)
g      �lit(menu%(10),8,�)
h      $SaveName%="Sprite"
i4      $SaveSprite%="sfile_ff9;Pptr_hand,12,8;B3"
j!      savefunc$="Save sprite"
k	    �
l
    � 38:
mD    � �blob_path(�,$database%,REC%,Fieldnumber%,V%,object$)>=0 �
n#      �lit(menu%(10),6,Access%)
o      �lit(menu%(10),7,�)
p      �lit(menu%(10),8,�)
q      $SaveName%="DrawFile"
r4      $SaveSprite%="sfile_aff;Pptr_hand,12,8;B3"
s      savefunc$="Save draw"
t	    �
u  �
v1  � �lit(menu%(1),1,�):$Fieldpos%="Field: ''"
w�
x�
y:
z� �update_selection(add%)
{� P%,SP%,F%,SF%
|"F%=Fieldnumber%:SF%=(F% � 128)
}-field$=�~(F%):� F%<16 � field$="0"+field$
~2sfield$=�~(SF%):� SF%<16 � sfield$="0"+sfield$
� add% �
�;  � �(-1) � printorder$+=sfield$ � printorder$+=field$ 
�*  �enable_row(calcrow%?Fieldnumber%,�)
�  �lit(menu%(6),7,�)
�  �lit(menu%(6),8,�)
�  �
�  �
�$    P%=�printorder$,field$,P%+1)
�  � ((P%-1) � 2)=0 � P%=0
�  � P%>0 �
�9    printorder$=�printorder$,P%-1)+�printorder$,P%+2)
�,    �enable_row(calcrow%?Fieldnumber%,�)
�	    �
�	    �
�)      SP%=�printorder$,sfield$,SP%+1)
�!    � ((SP%-1) � 2)=0 � SP%=0
�    � SP%>0 �
�=      printorder$=�printorder$,SP%-1)+�printorder$,SP%+2)
�.      �enable_row(calcrow%?Fieldnumber%,�)
�    �   
�  �
�  � printorder$="" �
�    �lit(menu%(6),7,�)
�    �lit(menu%(6),8,�)
�  �
��
��
�:
�� �print_click
�Ȏ (b% � %111) �
�E  � 2:� �selected(printW%,26) � �show_menu(labelW%,x%-500,y%+200)
�  � 1,4:
�  Ȏ ic% �
�    � 23,24,25:
�6    �icon_bit(22,printW%,15,�selected(printW%,25))
�6    �icon_bit(22,printW%,45,�selected(printW%,25))
�
    � 26:
�6    �icon_bit(22,printW%,15,�selected(printW%,25))
�6    �icon_bit(22,printW%,45,�selected(printW%,25))
�)    �show_menu(labelW%,x%-500,y%+200)
�=    � 28:�drag_options("<Pbase$Dir>.Resources.PrintOpts")
�
    � 20:
�    �close_window(printW%)
�6    � (b% � %111)=1 � �open_window(matchW%):�match
�  �
��
��
�:
�� �keypad_click(wi%,ic%,b%)
�� handle%,icon%,T%,N$,date$
��close_window(relateW%)
�8� flash% � �deselect(mainW%,field%(flash%)):flash%=�
�S� ic%<>12 � � �validate(Fieldnumber%,T%,N$)=� � � � �update_calcs(Fieldnumber%)
�Ȏ (b% � %111) �
�  � 1,4:
�$  � (b% � %111)=4 � z%=1 � z%=-1
�  Ȏ ic% �
�,    � 0:�scan(z%,�($�text(keypadW%,23)))
�    � 1:stop%=�
�%    � 2:addr=�moveto(key%,top,z%)
�&    � 3:addr=�moveto(key%,top,-z%)
�&    � 4:addr=�moveto(key%,addr,z%)
�'    � 5:addr=�moveto(key%,addr,-z%)
�(    � 6:addr=�fast_wind(top,addr,z%)
�)    � 7:addr=�fast_wind(top,addr,-z%)
�    � 8:�key_select(z%)
�    � 9:�key_select(-z%)
�    � 10:�subfile(z%)
�    � 11:�subfile(-z%)
�-    � 12:�rotate:addr=�moveto(key%,top,1)
�"    � 13:�allow_search(wi%,z%)
�
    � 14:
�    �display(key%,-1)
�#    � 15:addr=�shift(z%,key%,0)
�    � �(-3) �
�*      addr=�find("#"+�(REC%),key%,0,�)
�      � �display(key%,addr)
�	    �
�$    � 16:addr=�shift(-z%,key%,0)
�    � �(-3) �
�*      addr=�find("#"+�(REC%),key%,0,�)
�      � �display(key%,addr)
�	    �
�6    � 17:addr=�shift(0,key%,1):�display(key%,addr)
�    � 18:�val_help
�6    � 19:�check_change:�save_keys:�save_all_tables
�    � 20:�store
�    � 21:�retrieve
�!    � 22:�filter(keypadW%,22)
�
    � 28:
�    S$=$�text(keypadW%,27)
�#    Ȏ chartype%(KF%(key%,0)) �
�      � 5,50,51:
�?      � �check_date(S$,1,date$)=� � S$=�reverse_date(date$)
�	    �
�6    � S$<>"" � addr=�find(�S$,KL%(key%)),key%,1,�)
�    � z%=1 �
�!      � �selected(passW%,9) �
�=        !block%=keypadW%:ș "Wimp_GetWindowState",,block%
�9        block%!12=block%!4+660:block%!16=block%!8+328
�#        block%!20=0:block%!24=0
�(        ș "Wimp_OpenWindow",,block%
�%        � �close_window(keypadW%)
�      �
�	    �
�
    � 30:
�#    � $�text(keypadW%,29)<>"" �
�D      Filter$=�parse($�text(keypadW%,29),�selected(keypadW%,32))
�      filter%=�
�#      addr=�moveto(key%,top,z%)
�      � filter%=�
�	    �
�!    � 32:�commoncase(wi%,ic%)
�H    � 37:ș "OS_Byte",202,0,239:�show_menu(specmenu%,oldx%+32,oldy%)
�$    � 38:�open_window(specialW%)
�  �
��
��
�:
�� �scan(z%,s%)
�stop%=�
��
�   addr=�moveto(key%,addr,z%)
�  K%=�(s%)
�  �poll
�� stop%
��
�:
�� �store

� wi%,ic%
&ș "Wimp_GetCaretPosition",,block%
wi%=!block%:ic%=block%!4
.� wi%=mainW% � scratchpad$=$�text(wi%,ic%)
�
:
� �retrieve
� wi%,ic%,field%
&ș "Wimp_GetCaretPosition",,block%
	wi%=!block%:ic%=block%!4

$� scratchpad$<>"" � wi%=mainW% �
  field%=�get_field(ic%)
0  $�text(wi%,ic%)=�scratchpad$,len%(field%))

  �redraw_icon(wi%,ic%)
�
�
:
.� ### Binary Large Objects (B.L.O.B.s) ###
:
*� �blob_path(create%,f$,R%,F%,V%,� b$)
$� O$,main$,level1$,level2$,d%,L%
Ȏ V% �
  � 36,39:O$=".Memo"
  � 37,40:O$=".Sprite"
  � 38:O$=".Draw"
�
main$=f$+O$+�(F%)
"level1$=main$+"."+�(R% � 4900)
"level2$=level1$+"."+�(R% � 70)
b$=level2$+"."+�(R% � 70)
 ș "OS_File",5,b$ � d%,,,,L%
� d%=0 � create%=� �
   ș "OS_File",8,main$
!  ș "OS_File",8,level1$
"  ș "OS_File",8,level2$
#�
$� d%=1 �=L% �=-1
%:
&� �load_blob(f$,R%,F%,V%)
'� L%,b$
(#L%=�blob_path(�,f$,R%,F%,V%,b$)
)
� L%>=0 �
*3  �extend_named_sliding_block(tempanchor%,L%+1)
+&  ș "OS_File",255,b$,!tempanchor%
,�
-=L%
.:
/� �blob_to_file(F,L%)
0-� L%>0 � ș "OS_GBPB",2,F,!tempanchor%,L%
1�
2:
32� �copy_blob(source$,dest$,RS%,RD%,FS%,FD%,V%)
4� L%,Z%,bs$,bd$
5+L%=�blob_path(�,source$,RS%,FS%,V%,bs$)
6� L%>0 �
7+  Z%=�blob_path(�,dest$,RD%,FD%,V%,bd$)
8/  ș "OS_CLI","Copy "+bs$+" "+bd$+" ~C~V~Q"
9�
:�
;:
<!� �delete_blob(F%,F$,wi%,ic%)
=� flag%
>� delwarn%=� �
?&  ș "OS_CLI","Delete "+F$:flag%=�
@4  � � �confirm("Delete object? Are you sure?") �
A(    ș "OS_CLI","Delete "+F$:flag%=�
B  �
C�
D
� flag% �
E  Ȏ chartype%(F%) �
F)    � 36:$�val(wi%,ic%)="Z0;Ssm!edit"
G*    � 37:$�val(wi%,ic%)="Z0;Ssm!paint"
H)    � 38:$�val(wi%,ic%)="Z0;Ssm!draw"
I    � 39:$�text(wi%,ic%)=""
J  �
K  �redraw_icon(wi%,ic%)
L�
M�
N:
O � �set_blob_sprite(R%,F%,V%)
P� L%,b$,sprite$
Q>� R%=RA% � L%=-1 � L%=�blob_path(�,$database%,R%,F%,V%,b$)
RȎ V% �
S<  � 36:� L%>=0 � sprite$="small_fff" � sprite$="sm!edit"
T=  � 37:� L%>=0 � sprite$="small_ff9" � sprite$="sm!paint"
U<  � 38:� L%>=0 � sprite$="small_aff" � sprite$="sm!draw"
V�
W8$�val(mainW%,field%(F%))="Z0;Pptr_ext,8,4;S"+sprite$
X#�redraw_icon(mainW%,field%(F%))
Y�
Z:
[� �edit_blob(R%,F%,V%)
\� wi%,ic%,b$,O$,val$
]2� R%=RA% � �check_change:� REC%<>RA% � R%=REC%
^wi%=mainW%:ic%=field%(F%)
_Ȏ V% �
`5  � 36:O$="Memo":val$="Z0;Ssmall_fff":ftype%=&fff
a7  � 37:O$="Sprite":val$="Z0;Ssmall_ff9":ftype%=&ff9
b5  � 38:O$="Draw":val$="Z0;Ssmall_aff":ftype%=&aff
c�
d.� �blob_path(�,$database%,R%,F%,V%,b$)<0 �
e  $�val(wi%,ic%)=val$
fI  ș "OS_CLI","Copy <PBase$Dir>.Resources.Objects."+O$+" "+b$+" ~C~V"
g  �redraw_icon(wi%,ic%)
h�
i4block%!0=256:block%!12=0:block%!16=5:block%!20=0
j3block%!24=0:block%!28=0:block%!32=0:block%!36=0
k)block%!40=ftype%:$(block%+44)=b$+�(0)
l%ș "Wimp_SendMessage",18,block%,0
m�
n:
o*� �transfer_blob(wi%,ic%,R%,file$,ft%)
p� F%,V%,L%,W%,b$
q� wi%<>mainW% � �
r2� R%=RA% � �check_change:� REC%<>RA% � R%=REC%
s#F%=(ic%+1) � 2:V%=chartype%(F%)
tȎ V% �
u;  � 35:� ft%=-1 � link$(F%)="@"+file$:link$(0)="LOADED"
v  � 36:
w?  � ft%=&fff � �install_blob:$�val(wi%,ic%)="Z0;Ssmall_fff"
x  � 37:
y?  � ft%=&ff9 � �install_blob:$�val(wi%,ic%)="Z0;Ssmall_ff9"
z  � 38:
{?  � ft%=&aff � �install_blob:$�val(wi%,ic%)="Z0;Ssmall_aff"
|  � 39:
}5  � ft%=&fff � �install_blob:�show_text_block(F%)
~  � 40:
2  � ft%=&ff9 � �install_blob:�show_picture(F%)
��
��redraw_icon(wi%,ic%)
��
�:
�� �install_blob
�+L%=�blob_path(�,$database%,R%,F%,V%,b$)
�ș "OS_CLI","Remove "+b$
�,ș "OS_CLI","Copy "+file$+" "+b$+" ~C~V"
��
�:
�� �show_text_block(F%)
�� F,b$,I%,L%,base%
�� F%=0 � �
�base%=Rf%(F%)
�-L%=�blob_path(�,$database%,REC%,F%,39,b$)
�� L%>0 �
�!  � L%>len%(F%) � L%=len%(F%)
�;  � ### Load only as much of file as we can display ###
�>  F=�(b$):� F>0 � ș "OS_GBPB",4,F,base%,L%:�close_file(F)
�J  � ### Replace any characters<32 by spaces - but ONLY for display ###
�  � I%=0 � L%-1
�#    � base%?I%<32 � base%?I%=32
�
  � I%
�  base%?L%=10
�  � $base%=""
��
��
�:
�� �show_picture(F%)
�#� F,f$,I%,max%,len%,x%,y%,w%,h%
�� F%=0 � �
�/len%=�blob_path(�,$database%,REC%,F%,40,f$)
�E!block%=mainW%:block%!4=field%(F%):ș "Wimp_GetIconState",,block%
�<x%=block%!8:y%=block%!12:w%=block%!16-x%:h%=block%!20-y%
� ș "Wimp_DeleteIcon",,block%
�� len%>=0 �
�@  �extend_named_sliding_block(Rf%(F%),len%+4):base%=!Rf%(F%)
�/  !base%=len%+4:ș "OS_File",255,f$,base%+4
�O  field%(F%)=�create_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",base%+16,base%,0)
�  �
�K  field%(F%)=�create_icon(mainW%,x%,y%,w%,h%,&0700A53E,"",paint%,1,384)
��
��
�:
�� �filter(wi%,ic%)
�� h%,ox%,oy%
�Ȏ wi% �
�#  � keypadW%:h%=530:ox%=0:oy%=0
�$  � mainW%:h%=200:ox%=0:oy%=-330
��
�� �selected(wi%,ic%) �
�7  !block%=keypadW%:ș "Wimp_GetWindowState",,block%
�2  block%!12=block%!4+660:block%!8=block%!16-h%
�!  block%!20=ox%:block%!24=oy%
�"  ș "Wimp_OpenWindow",,block%
�*  � � common% � $�text(keypadW%,29)=""
�  �set_caret(keypadW%,29)
�!  � $�text(keypadW%,29)<>"" �
�B    Filter$=�parse($�text(keypadW%,29),�selected(keypadW%,32))
�    filter%=�
�!    addr=�moveto(key%,top,z%)
�    � filter%=�
�  �
�  �
�  � wi%=keypadW% �
�9    !block%=keypadW%:ș "Wimp_GetWindowState",,block%
�5    block%!12=block%!4+660:block%!8=block%!16-330
�    block%!20=0:block%!24=0
�$    ș "Wimp_OpenWindow",,block%
�!    � �close_window(keypadW%)
�  �
�  filter%=�
��
��
�:
�� �fast_wind(T%,P%,D%)
�� I%
� fast%=�($�text(keypadW%,23))
�D%=(D%+1) � 2
�ȕ P%<>T% � I%<fast%
�K  � filter% � P%=�next_match(P%,D%,Filter$) � P%=�neighbour(key%,P%,D%)
�  I%+=1
��
�9� P%=T% � � filter% � � 7:P%=�neighbour(key%,P%,1-D%)
��display(key%,P%)
�=P%
�:
�� �subfile(dir%)
�file%+=dir%
�� file%=6 � file%=0
�� file%=-1 � file%=5
�top=8*file%+LH%
�addr=�moveto(key%,top,1)
��
�:
�� �allow_search(wi%,e%)
�� w%,ox%,oy%
�Ȏ e% �
�5  � 1:�select(keypadW%,24):�deselect(keypadW%,25)
�6  � -1:�select(keypadW%,25):�deselect(keypadW%,24)
��
��deselect(keypadW%,22)
�E� buttonfield%(22)>0 � �deselect(mainW%,field%(buttonfield%(22)))
�
filter%=�
�1$�text(keypadW%,27)="":$�text(keypadW%,36)=""
�$$�text(keypadW%,33)=Index$(key%)
�Ȏ wi% �
�$  � keypadW%:w%=1000:ox%=0:oy%=0
�#  � mainW%:w%=340:ox%=660:oy%=0
��
�5!block%=keypadW%:ș "Wimp_GetWindowState",,block%
�0block%!12=block%!4+w%:block%!8=block%!16-328
�block%!20=ox%:block%!24=oy%
� ș "Wimp_OpenWindow",,block%
��set_caret(keypadW%,27)
��
�:
�� �val_help
�� name$
�� Fieldnumber%>0 �
�!  name$=�link$(Fieldnumber%))
�4  � �(name$)<58 � �(name$)<>-1 � name$=�name$,2)
�'  Tablenumber%=�table_number(name$)
�4  � Tablenumber%<>-1 � �show_table(Tablenumber%)
��
��
�:
�� �val_on_off
� I%
validate%=� validate%
�tick(menu%(2),3,validate%)
Ȏ validate% �

  � �:
  � I%=1 � vstrings%
     $valid%(I%)=$rvalid%(I%)

  � I%

  � �:
	  � I%=1 � vstrings%

$    $valid%(I%)="Pptr_write,4,4"

  � I%
�

�
:
� �save_click(wi%,ic%,b%)
� p$,H$
butt%=(b% � %111)
Ȏ wi% �
  � saveW%:
  Filename$=$SaveName%
  Ȏ savefunc$ �
    � "New database":
    Type%=0
d    � �Filename$,1)<>"!" � Filename$="!"+Filename$:Filename$=�Filename$,10):$SaveName%=Filename$
    � "Log changes":
    Type%=&fff:startlog%=�
    � "Save as text":
    Type%=&fff
7    Start%=!textanchor%:End%=Start%+Count%*LenLine%
    $Start%=pitch$
    � "Save list":
      Type%=&fff:savetofile%=�
!    � "Save text":
"    Type%=&fff:
#=    len%=�blob_path(�,$database%,REC%,Fieldnumber%,36,f$)
$7    �extend_named_sliding_block(saveanchor%,len%+1)
%(    ș "OS_File",255,f$,!saveanchor%
&,    Start%=!saveanchor%:End%=Start%+len%
'    � "Save sprite":
(    Type%=&ff9
)=    len%=�blob_path(�,$database%,REC%,Fieldnumber%,37,f$)
*7    �extend_named_sliding_block(saveanchor%,len%+1)
+(    ș "OS_File",255,f$,!saveanchor%
,,    Start%=!saveanchor%:End%=Start%+len%
-    � "Save draw":
.    Type%=&aff
/=    len%=�blob_path(�,$database%,REC%,Fieldnumber%,38,f$)
07    �extend_named_sliding_block(saveanchor%,len%+1)
1(    ș "OS_File",255,f$,!saveanchor%
2,    Start%=!saveanchor%:End%=Start%+len%
3    � "Save options":
4    Type%=&7f5
5    � "Save query":
6C    Start%=�text(matchW%,0):End%=Start%+�($Start%)+1:Type%=&7f4
7    � "Save selection":
81    P%=savebuff%:$P%=printorder$:P%+=�($P%)+1
9    � T%=0 � LastTable%
:'     $P%=printrel$(T%):P%+=�($P%)+1
;    � T%
<>    Start%=savebuff%:End%=Start%+P%-savebuff%+1:Type%=&7F3
=    � "Save table":
>G    $TabTitle%=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
?D    Start%=!tabanchor%(T%):End%=Start%+160+Rows%*Rec%:Type%=&7f1
@    � "Save form file":
A    Type%=&7f2
B    �lit(menu%(9),3,�)
C    �lit(menu%(9),4,�)
D3    � adjust%=� � �first_field>0 � �default_key
E  �
F  � savesubW%:
G  Ȏ savefunc$ �
H    � "Export subset":
I#    Filename$=$SubName%:Type%=0
J    � "Export CSV":
K&    Filename$=$SubName%:Type%=&dfe
L  �
M�
NȎ ic% �
O
  � 1:
P2  � (b% � %11110000)>0 � �init_drag(wi%,ic%,5)
Q
  � 2:
R  � �Filename$,".")>0 �
S7    � butt%<>2 � �save(Filename$,Type%,Start%,End%)
T,    � butt%=4 � ș "Wimp_CreateMenu",,-1
U    � �softerror("",33)
V  �
WB  � 12:� butt%=2 � butt%=4 � �show_menu(menu%(15),x%-64,y%-20)
XB  � 13:� butt%=2 � butt%=4 � �show_menu(menu%(20),x%-64,y%-20)
Y  � 5:�commoncase(wi%,ic%)
Z�
[�
\:
]� �key_click
^� J%
_Ȏ b% � %111 �
`  � 4:z%=1
a  � 1:z%=-1
b�
cȎ ic% �
d)  � 16:�kcycle(Keyfld0%,F1dkey%,0,z%)
e*  � 17:�kcycle(Keyfld0%,F1dkey%,0,-z%)
f)  � 18:�kcycle(Keyfld1%,F2dkey%,1,z%)
g*  � 19:�kcycle(Keyfld1%,F2dkey%,1,-z%)
h  � 21:
i2  �tick_one(fieldmenu%,0,fields%-1,Keyfld0%-1)
j>  �show_menu(fieldmenu%,oldx%+32,oldy%):fieldfunc$="first"
k  � 22:
l2  �tick_one(fieldmenu%,0,fields%-1,Keyfld1%-1)
m?  �show_menu(fieldmenu%,oldx%+32,oldy%):fieldfunc$="second"
n
  � 7:
o!  � keyfunc$<>"Current key" �
p/    keylimit%=len%(Keyfld0%)+len%(Keyfld1%)
q    � J%=0 � 3
r      WD%(J%)=�($Wkey%(J%))
s    � J%
t    Ȏ � �
u1      � Ǝ(WD%())>keylimit%:�softerror("",26)
v      :
w      Ȏ keyfunc$ �
x        � "Primary key":
y        key%=0
z        �copy_keydata(key%)
{*        RA%=�($Records%):f$=$database%
|&        �make_empty_index(RA%,0,�)
}*        �save_recs(f$+".Database",RA%)
~!        present%=7:�save_keys
$        design%=�:�get_it_in(f$)
�0        � "New primary key":�new_tree(file%)
�)        � "Index field":�create_index
�      �
�	    �
�  �
�  keyfunc$=""
�  �close_window(keyW%)
��
��
�:
�� �shade_key_icons(on%)
�� I%=16 � 20
�   �icon_bit(22,keyW%,I%,on%)
�� I%
�� I%=2 � 5
�   �icon_bit(22,keyW%,I%,on%)
�� I%
��
�:
�� �kcycle(� F%,T%,icon%,z%)
�
F%+=z%
�� F%>fields% � F%=0
�� F%<0 � F%=fields%
�"� F%>0 � $T%=Tag$(F%) � $T%=""
��redraw_icon(keyW%,icon%)
�*�tick_one(fieldmenu%,0,fields%-1,F%-1)
��
�:
�� �copy_keydata(key%)
�-KF%(key%,0)=Keyfld0%:KF%(key%,1)=Keyfld1%
�KL%(key%)=Ǝ(WD%())
�� J%=0 � 3
�  KW%(key%,J%)=WD%(J%)
�� J%
�#case%(key%)=�selected(keyW%,20)
��
�:
�� �set_keydata(key%)
�� J%,S$
�-Keyfld0%=KF%(key%,0):Keyfld1%=KF%(key%,1)
�$F1dkey%=Tag$(Keyfld0%)
�;� KF%(key%,1)>0 � $F2dkey%=Tag$(Keyfld1%) � $F2dkey%=""
�keylen%=KL%(key%)
�� J%=0 � 3
�0  WD%(J%)=KW%(key%,J%):$Wkey%(J%)=�(WD%(J%))
�� J%
�$KeyNo%=�(key%)
�#�set_icon(keyW%,20,case%(key%))
��
�:
�� �key_select(D%)
��colour(key%,2)
�Ȏ D% �
�$  � +1:key%=(key%+1) � (Keys%+1)
�(  � -1:key%-=1:� key%<0 � key%=Keys%
��
��colour(key%,1)
��set_keydata(key%)
�>$�text(keypadW%,33)=Index$(key%):�redraw_icon(keypadW%,33)
�top=8*file%+LH%
�addr=�moveto(key%,top,1)
��
�:
�� �set_colours
�� I%
�Ȏ ic% �
�  � 0,1,2,3,4,5,6:
�  col%=ncol%(ic%)
�   fb%=�selected_esg(colW%,2)
�  Ȏ fb% �
�#    � 11:col%=(col% � &F):fb%=1
�(    � 12:col%=((col%>>4) � &F):fb%=0
�  �
�  Ȏ b% � %111 �
�    � 1:
�"    col%-=1:� col%<0 � col%=15
�$    �dcolour(colW%,ic%,col%,fb%)
�    � 4:
�    col%=(col%+1) � 16
�$    �dcolour(colW%,ic%,col%,fb%)
�  �
�*  ncol%(ic%)=�get_icon_cols(colW%,ic%)
�
  � 9,10:
�  fcol%()=ncol%()
�  � I%=0 � Keys%
�    �colour(I%,2)
�
  � I%
�  �colour(0,0)
�  �colour(key%,1)
�  � I%=1 � fields%
�D    � link$(I%)<>"" � �set_icon_cols(mainW%,field%(I%),ncol%(6))
�
  � I%
�  � ic%=10 � �write_colours
�  ș "Wimp_CreateMenu",,-1
�  � 15:
�4  �read_colours("<Pbase$Dir>.Resources.Colours")
�  � I%=0 � 6
�*    �set_icon_cols(colW%,I%,ncol%(I%))
�
  � I%
��
��
�:
�� �create_click
�� Calc$
�butt%=(b% � %111)
�Ȏ butt% �
�  � 2,4:
�>  � ic%=36 � �show_menu(menu%(menunumber%),oldx%+32,oldy%)
��
�,� butt%=4 � z%=1 � � butt%=1 � z%=-1 � �
�Ȏ ic% �
�  � 21:�set_limits(1,0,8,8)
�#  � 22:�set_limits(36,36,40,11)
�!  � 23:�set_limits(9,9,35,19)
�#  � 24:�set_limits(41,41,45,14)
�#  � 35:�set_limits(46,46,59,16)
�'  � 19:�change_type(z%,menunumber%)
�(  � 20:�change_type(-z%,menunumber%)
�8  � 18:�create_field(�($InsText%),posx%,posy%,Calc$)
�.  � 29:�remove_field(Fieldnumber%,�,Calc$)
�3  �create_field(Fieldnumber%,posx%,posy%,Calc$)
�.  � 30:�remove_field(Fieldnumber%,�,Calc$)
�=  � 14:�icon_bit(22,createW%,13,(�selected(createW%,14)))
�  � 39:
�  F%=�($InsText%)
�  � F%>0 � F%<=fields% �
�(    � F%<Fieldnumber% � Z%=-1 � Z%=1
�(    �re_sequence(Fieldnumber%,F%,Z%)
  �
  �close_window(createW%)
2  � 40:�swap_fields(Fieldnumber%,�($InsText%))
�
�update_box
5� (present% � 4)=0 � �lit(menu%(9),1,(fields%>0))
Ȏ ic% �
  � 18,29,30:
  � butt%=4 �
	    �close_window(createW%)

	    �
#    �icon_bit(22,createW%,18,�)
+    �icon_bit(22,createW%,30,� adjust%)

#    �icon_bit(22,createW%,29,�)
    Fieldnumber%=fields%
  �
�
�
:
� �update_box
Ȏ fieldtype% �
F  � 0,1,2,3,4,5,6,7,46,47:� � adjust% � �icon_bit(22,createW%,6,�)
"  :�icon_bit(22,createW%,6,�)
�
;�icon_bit(22,createW%,14,(fieldtype%=3 � fieldtype%=6))
T�icon_bit(22,createW%,13,(fieldtype%=3 � fieldtype%=6) � �selected(createW%,14))
<�icon_bit(22,createW%,15,(fieldtype%=3 � fieldtype%=47))
,�icon_bit(22,createW%,25,(fieldtype%=3))
'�icon_bit(22,createW%,26,� adjust%)
.� � adjust% � �lit(menu%(9),2,(fields%>0))
 $ValText%=vname$(fieldtype%)
�redraw_icon(createW%,28)
 �
!:
"� �set_limits(t%,f%,l%,m%)
#fieldtype%=t%
$firsttype%=f%
%lasttype%=l%
&menunumber%=m%
'&�tick_one(menu%(m%),0,l%-f%,t%-f%)
(�update_box
)�
*:
+� �change_type(d%,m%)
,Ȏ d% �
-  � 1:fieldtype%+=1
.4  � fieldtype%>lasttype% � fieldtype%=firsttype%
/  � -1:fieldtype%-=1
04  � fieldtype%<firsttype% � fieldtype%=lasttype%
1�
2E�tick_one(menu%(m%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
3�update_box
4�
5:
6� �passwords
7� F
8Ȏ ic% �
9
  � 4:
:#  � $Write%="" � $Write%=$Read%
;(  � $Manager%="" � $Manager%=$Write%
<   F=�($database%+".Colours")
=  �#F=35
>"  S$=�encrypt($Read%,�):�#F,S$
?#  S$=�encrypt($Write%,�):�#F,S$
@%  S$=�encrypt($Manager%,�):�#F,S$
A  � I%=9 � 16
B     �#F,�selected(passW%,I%)
C
  � I%
D  �#F,logpath$
E
  �#F=�#F
F  �close_file(F)
G*  �lit(menu%(1),6,�selected(passW%,9))
H+  �lit(menu%(1),7,�selected(passW%,13))
I+  �lit(menu%(1),8,�selected(passW%,13))
J+  �lit(menu%(1),2,�selected(passW%,14))
K+  �lit(menu%(3),8,�selected(passW%,15))
LP  � � �selected(passW%,9) � �close_window(keypadW%) � �open_window(keypadW%)
M1  �close_window(passW%):�close_window(saveW%)
N
  warn%=�
O  � 16:
P  � �selected(passW%,16) �
Q    savefunc$="Log changes"
RJ    � logpath$="" � $SaveName%=$database%+".Log" � $SaveName%=logpath$
S2    $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
T7    !block%=passW%:ș "Wimp_GetWindowState",,block%
U*    xmin%=block%!4+200:ymax%=block%!16
V7    !block%=saveW%:ș "Wimp_GetWindowState",,block%
W9    block%!12=xmin%+block%!12-block%!4:block%!4=xmin%
X9    block%!8=ymax%-block%!16+block%!8:block%!16=ymax%
Y1    block%!28=-1:ș "Wimp_OpenWindow",,block%
Z    �set_caret(saveW%,0)
[    �open_log
\    � �close_log
]  �
^�
_�
`:
a� �open_log
b� logpath$<>"" �
c"  ș "OS_File",5,logpath$ � d%
d  � d%=1 �
e8    loghandle%=�(logpath$):�#loghandle%=�#loghandle%
f%    �#loghandle%,"Log opened "+�$
g3    �#loghandle%,"Password level used: "+�(pw%)
h    �#loghandle%,�35,"=")
i	    �
j    �softerror("",99)
k    �deselect(passW%,16)
l    logpath$=""
m  �
n�
o�
p:
q� �close_log
r� loghandle%<>0 �
s  �#loghandle%,""
t#  �#loghandle%,"Log closed "+�$
u  �close_file(loghandle%)
v#  ș "OS_File",18,logpath$,&fff
w�
x�
y:
z� �count(key%,� RU%)
{� zero%,file%,top,sum%
|	RU%=0
}� file%=0 � 5
~  top=8*file%+LH%
"  sum%=�count_recs(key%,zero%)
�  RU%+=sum%
�%  $�text(miscW%,file%+22)=�(sum%)
�� file%
��
�:
�� �count_recs(key%,� ptr%)
�� P%,count%,S%,R%,S$,k$
�ș "Hourglass_On"
�P%=�neighbour(key%,top,1)
�ȕ P%<>top
�  count%+=1
�  � ptr%>0 �
�    R%=�rec_no(k$,key%,P%)
�#    � R%>highest% � highest%=R%
�1    !ptr%=R%:$(ptr%+4)=k$:ptr%+=4+KL%(key%)+1
�    flagptr%?R%=0
�  �
�  P%=�neighbour(key%,P%,1)
��
�ș "Hourglass_Off"
�=count%
�:
�� �analyse(func%)
�1� L%,P%,S%,S$,K$,k$,ptr%,pos%,N%,values%,key%
�� S$(),N%()
��read_print_options
�.� func%<0 � L%=6 � key%=func%:L%=KL%(key%)
�8� L%>8 � Tab%(0)=Lmargin%+L%+6 � Tab%(0)=Lmargin%+14
�Tab%(1)=Tab%(0)+6
�� func%<0 �
�:  Title$="Analysis of date field: "+Tag$(Fieldnumber%)
�5  Heading$=�pad(margin$+"Month",Tab%(0))+"Number"
�  �
�/  Title$="Analysis of index: "+Index$(key%)
�8  Heading$=�pad(margin$+"Contents",Tab%(0))+"Number"
��
�Title1$=�$
�LenLine%=�(Heading$)+2
�7�extend_named_sliding_block(lineanchor%,LenLine%+4)
�I�extend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
�7�heap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
�reportdest$="Window"
��close_window(datadicW%)
�Count%=0
��list_head(0)
�ș "Hourglass_On"
�.� func%<0 � �analyse_date � �analyse_index
�ș "Hourglass_Off"
��rule_off(45)
�;Line$=�pad(margin$+"Total",Tab%(0))+�justify(�(N%),1,0)
�@$(!lineanchor%)=Line$:�list_line(-1,lineanchor%,�(Line$),32)
��rule_off(45)
��screen_list
��
�:
�� �analyse_index
�K$="***"
�P%=�neighbour(key%,top,1)
�ȕ P%<>top
�    R%=�rec_no(k$,key%,P%)
�#    � k$<>K$ � values%+=1:K$=k$
�     P%=�neighbour(key%,P%,1)
��
�� S$(values%),N%(values%)
�K$="***"
�P%=�neighbour(key%,top,1)
�ȕ P%<>top
�    R%=�rec_no(k$,key%,P%)
�E    � k$<>K$ � ptr%+=1:K$=k$:S$(ptr%)=K$:N%(ptr%)=1 � N%(ptr%)+=1
�     P%=�neighbour(key%,P%,1)
��
�� I%=1 � ptr%
�I  S$=S$(I%):� S$="" � S$="<null>" � � isadate% � S$=�reverse_date(S$)
�H  Line$=margin$+S$:Line$=�pad(Line$,Tab%(0))+�justify(�(N%(I%)),1,0)
�B  $(!lineanchor%)=Line$:�list_line(-1,lineanchor%,�(Line$),32)
�  N%+=N%(I%)
�� I%
��
�:
�� �analyse_date
�� S$(12),N%(12)
�YS$()="<null>","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
�*dbasehandle%=�($database%+".Database")
�P%=�neighbour(key%,top,1)
�ȕ P%<>top
�  R%=�rec_no(k$,key%,P%)
�#  �readsmarray(dbasehandle%,R%)
�  S$=F$(Fieldnumber%)
�  � S$<>"" �
�    M%=�(�S$,4,2))
�    N%(M%)+=1
�    � N%(0)+=1
�  �
�  P%=�neighbour(key%,P%,1)
��
��close_file(dbasehandle%)
�� I%=0 � 12
�L  Line$=margin$+S$(I%):Line$=�pad(Line$,Tab%(0))+�justify(�(N%(I%)),1,0)
�B  $(!lineanchor%)=Line$:�list_line(-1,lineanchor%,�(Line$),32)
�  N%+=N%(I%)
�� I%
��
�:
�� �update_stats
�$filesize%=�(RA%)
�$Records%=�(RA%)
�$used%=�(RU%)
�#$percent%=�(�(RU%*100/RA%))+"%"
��
�:
�L� Keypress processing --------------------------------------------------
�:
�� �set_keyboard(wi%,ic%)
�Ȏ wi% �
�  � mainW%:
�!  Ȏ chartype%((ic%+1) � 2) �
�$    � 2,4:ș "OS_Byte",202,0,239
�!    :ș "OS_Byte",202,16,111
�  �
�"  :ș "OS_Byte",202,caps%,111
��
�ș "OS_Byte",118
��
�:
�� �process_key
�� printing% � indexing% � �
�� T%,N$
�&ș "Wimp_GetCaretPosition",,block%
	4wi%=block%!0:ic%=block%!4:key_pressed%=block%!24
	Ȏ wi% �
	  � mainW%:�main_press
	  � keypadW%:�keypad_press
	  � passW%:�dbox_press(4)
	  � changeW%:�dbox_press(4)
	  � tableW%:�dbox_press(26)
	  � saveW%:�dbox_press(2)
	   � datadicW%:�datadic_press
		  � printW%:�dbox_press(20)
	
  � labelW%:�dbox_press(15)
	  � createW%:�create_press
	  � accessW%:�dbox_press(3)
	
  � keyW%:�dbox_press(7)
	   � savesubW%:�dbox_press(2)
	  � matchW%:�match_press
	  � moveW%:�dbox_press(8)
	  � calcW%:�dbox_press(1)
	  � mergeW%:�dbox_press(7)
	  � sizeW%:�dbox_press(4)
	  � csvW%:�dbox_press(9)
	�
	�
	:
	� �keypad_press
	� key_pressed%=13 �
	  Ȏ ic% �
	!    � 27:�mouse(0,0,4,wi%,28)
	!    � 29:�mouse(0,0,4,wi%,30)
	  �
	)  � ș "Wimp_ProcessKey",key_pressed%
	�
	 �
	!:
	"� �main_press
	#B� � �selected(passW%,10) � ș "Wimp_ProcessKey",key_pressed%:�
	$� icon%
	%8� flash% � �deselect(mainW%,field%(flash%)):flash%=�
	&]� key_pressed%<>392 � � �validate(Fieldnumber%,T%,N$)=� � � � �update_calcs(Fieldnumber%)
	'Ȏ key_pressed% �
	(  � 13:
	)  Ȏ wi% �
	*    � mainW%:
	+"      � Fieldnumber%=fields% �
	,#        �close_window(relateW%)
	-        �display(key%,-1)
	.
        �
	/
        �
	0E          Fieldnumber%+=1:� Fieldnumber%>fields% � Fieldnumber%=1
	1(          c%=chartype%(Fieldnumber%)
	22        � len%(Fieldnumber%)>0 � (c%<6 � c%=8)
	3&        icon%=field%(Fieldnumber%)
	4$        �set_caret(mainW%,icon%)
	5*        � relations%=� � �relations(�)
	6      �
	7  �
	8  � 398:
	9  �
	:?    Fieldnumber%+=1:� Fieldnumber%>fields% � Fieldnumber%=1
	;"    c%=chartype%(Fieldnumber%)
	<,  � len%(Fieldnumber%)>0 � (c%<6 � c%=8)
	=   icon%=field%(Fieldnumber%)
	>  �set_caret(mainW%,icon%)
	?$  � relations%=� � �relations(�)
	@  � 399:
	A  �
	B?    Fieldnumber%-=1:� Fieldnumber%<1 � Fieldnumber%=fields%
	C"    c%=chartype%(Fieldnumber%)
	D,  � len%(Fieldnumber%)>0 � (c%<6 � c%=8)
	E   icon%=field%(Fieldnumber%)
	F  �set_caret(mainW%,icon%)
	G$  � relations%=� � �relations(�)
	H4  � 389:� Access% � �show_menu(changeW%,500,600)
	I  � 405:
	J  � �(printorder$)=2 �
	KB    Fieldnumber%=�fnum(printorder$):V%=chartype%(Fieldnumber%)
	L    Ȏ V% �
	M      � 36,39:
	NF      � �blob_path(�,$database%,REC%,Fieldnumber%,V%,object$)>=0 �
	O        �set_up_field_menu
	P&        �show_menu(saveW%,500,600)
	Q      �
	R	    �
	S  �
	T  � 408:�val_on_off
	U$  � 387:�mouse(0,0,4,keypadW%,2)
	V$  � 403:�mouse(0,0,4,keypadW%,3)
	W$  � 386:�mouse(0,0,4,keypadW%,4)
	X$  � 402:�mouse(0,0,4,keypadW%,5)
	Y$  � 391:�mouse(0,0,4,keypadW%,6)
	Z$  � 407:�mouse(0,0,4,keypadW%,7)
	[$  � 393:�mouse(0,0,4,keypadW%,8)
	\$  � 409:�mouse(0,0,4,keypadW%,9)
	]%  � 388:�mouse(0,0,4,keypadW%,10)
	^%  � 404:�mouse(0,0,4,keypadW%,11)
	_%  � 420:�mouse(0,0,4,keypadW%,12)
	`%  � 385:�mouse(0,0,4,keypadW%,13)
	a%  � 401:�mouse(0,0,1,keypadW%,13)
	b%  � 458:�mouse(0,0,4,keypadW%,14)
	c%  � 390:�mouse(0,0,4,keypadW%,15)
	d%  � 406:�mouse(0,0,4,keypadW%,16)
	e%  � 422:�mouse(0,0,4,keypadW%,17)
	f%  � 392:�mouse(0,0,4,keypadW%,18)
	g  � 384:�print_this
	h  � 400:�match
	i!  � 416:�open_window(printW%)
	j)  :ș "Wimp_ProcessKey",key_pressed%
	k�
	l Ȏ chartype%(Fieldnumber%) �
	m"  � 2,4:ș "OS_Byte",202,0,239
	n  :ș "OS_Byte",202,16,111
	o�
	pș "OS_Byte",118
	qș "OS_Byte",15,0
	r�
	s:
	t� �dbox_press(ok%)
	uȎ key_pressed% �
	vC  � 13:� �next_writeable(wi%,ic%,1,1)=� � �mouse(0,0,4,wi%,ok%)
	w3  � 27:�close_window(wi%):�set_caret(mainW%,-1)
	x+  � 398:f%=�next_writeable(wi%,ic%,1,0)
	y,  � 399:f%=�next_writeable(wi%,ic%,-1,0)
	z)   ș "Wimp_ProcessKey",key_pressed%
	{�
	|�
	}:
	~� �datadic_press
	� icons%
	�icons%=Rows%*(TabFields%+1)
	�Ȏ key_pressed% �
	�  � 13:
	�2  � ic%<icons%-1 � �set_caret(datadicW%,ic%+1)
	�  � 398:
	�H  � ic%<icons%-TabFields%-1 � �set_caret(datadicW%,ic%+TabFields%+1)
	�  � 399:
	�B  � ic%>=TabFields%+1 � �set_caret(datadicW%,ic%-TabFields%-1)
	�)  :ș "Wimp_ProcessKey",key_pressed%
	��
	��
	�:
	�� �create_press
	�
Ȏ � �
	�=  � �shaded(wi%,29):� � �shaded(wi%,18) � �dbox_press(18)
	�-  :� � �shaded(wi%,29) � �dbox_press(29)
	��
	��
	�:
	�� �match_press
	�Ȏ key_pressed% �
	�"  � 13:�mouse(0,0,4,matchW%,1)
	�F  � 27:�close_window(matchW%):ș "Wimp_SetCaretPosition",mainW%,-1
	�  � 384:�print_this
	�)  :ș "Wimp_ProcessKey",key_pressed%
	��
	��
	�:
	�� �menu_select
	�� handle%,P%,Q%,I%
	�&choice1%=!block%:choice2%=block%!4
	�(choice3%=block%!8:choice4%=block%!12
	�P%=1
	�5ș "Wimp_DecodeMenu",,menuhandle%,block%,choices%
	�� I%=1 � 4
	�  Q%=�$choices%,".",P%+1)
	�&  choice$(I%)=�$choices%,P%,Q%-P%)
	�
  P%=Q%+1
	�� I%
	�$ș "Wimp_GetPointerInfo",,block%
	�redo%=block%!8=1
	�Ȏ menuhandle% �
	�  � menu%(0):
	�  Ȏ choice$(1) �
	�8    � "Help":ș "Wimp_StartTask","<Pbase$Dir>.!Help"
	�G    � "Save choices":�save_choices("<Pbase$Dir>.Resources.Choices")
	�J    � "Default choices":�get_choices("<Pbase$Dir>.Resources.Defaults")
	�    � "Utilities":
	�    Ȏ choice$(2) �
	�      � "New primary key":
	�      $KeyTitle%=choice$(2)
	�-      keyfunc$=choice$(2):�set_keydata(0)
	�      �shade_key_icons(�)
	�      � (present% � 2)=2 �
	�/        �select(keyW%,8):�deselect(keyW%,9)
	�;        �icon_bit(22,keyW%,8,�):�icon_bit(22,keyW%,9,�)
	�
        �
	�/        �select(keyW%,9):�deselect(keyW%,8)
	�;        �icon_bit(22,keyW%,8,�):�icon_bit(22,keyW%,9,�)
	�      �
	�4      �set_height(keyW%,700):�set_caret(keyW%,2)
	�       � "New record format":
	�!      �close_window(reformW%)
	�       � �confirm(�msg(28)) �
	�        reform$="Reformat"
	�.        $RefmTitle%="Change record format"
	�%        �set_height(reformW%,220)
	�      �
	�      � "Adjust format":
	�      �adjust_on(�)
	�      �display(key%,-1)
	�5      �alter_flags(&17016731,&07006535,&1700653B)
	�      � "Merge database":
	�!      �close_window(reformW%)
	�      reform$="Merge"
	�&      $RefmTitle%="Merge database"
	�#      �set_height(reformW%,360)
	�      � "Balance index":
	�      Ȏ choice$(3) �
	�        � "Automatic":
	�        � choice4%=0 �
	�!          �set_autobalance(�)
	�8          � �set_autobalance(� �ticked(menu%(21),0))
	�
        �
	�(        � "Right now":�balance(key%)
	�      �
	�      � "Print index":
	�      Ȏ choice$(3) �
	�        � "Complete":
	�)        �print_tree(key%,file%,"ALL")
	�        � "Totals only":
	�,        �print_tree(key%,file%,"TOTALS")
	�      �
	�5      � "Find duplicates":�duplicates(key%,file%)
	�C      � "Warn of duplicates":dup%=� dup%:�tick(menu%(3),8,dup%)
	�	    �
	�#    � "Close database":�exit(0)
	�%    � "Abandon database":�exit(1)
	�    � "Quit":quit%=�
	�  �
	�  � menu%(1):
	�  Ȏ choice$(1) �
	�    � "CSV options"
	�    $CSVTitle%=choice$(1)
	�    �icon_bit(22,csvW%,0,�)
	�6    !block%=csvW%:ș "Wimp_GetWindowState",,block%
	�-    block%!4=oldx%:block%!12=block%!4+390
	�8    block%!8=200:block%!16=block%!8+420:block%!28=-1
	�$    ș "Wimp_OpenWindow",,block%
	�    � "Miscellaneous":
	�    Ȏ choice$(2) �
	�0      � "Set passwords":�open_window(passW%)
	�9      � "Edit template":template%=1:�display(key%,-1)
	�0      � "Save indices":�set_auto(2-choice3%)
	�	    �
	�    � "Current key":
	�1    $KeyTitle%=choice$(1):keyfunc$=choice$(1)
	�    �set_keydata(key%)
	�2    �shade_key_icons(�):�set_height(keyW%,590)
	�    � "Print":
	�    Ȏ choice$(2) �
	�      � "Match":�match
	�'      � "Show resources":*Resources
	�B      � "Options":�open_window(printW%):�set_caret(printW%,16)
	�      � "Save options":
	�5      $SaveName%=$database%+".PrintRes.PrintOpts"
	�6      savefunc$=choice$(2):�save_click(saveW%,2,4)
	�      � "Save query":
1      $SaveName%=$database%+".PrintRes.Query"
6      savefunc$=choice$(2):�save_click(saveW%,2,4)
      � "Save selection":
5      $SaveName%=$database%+".PrintRes.Selection"
6      savefunc$=choice$(2):�save_click(saveW%,2,4)
&      � "Show jobs done":*JobsDone
.      � "Clear selection":�clear_selection
$      � "Select all":�select_all
      :�match
		    �

    � "Validation":
    Ȏ choice$(2) �
F      � "Create table":�open_window(tableW%):�set_caret(tableW%,0)

      � "Display table":
      � choice3%>=0 �
!        Tablenumber%=choice3%
%        �show_table(Tablenumber%)
      �
&      � "Show table files":*Tables
(      � "Validate input":�val_on_off
Q      � "Show relations":relations%=� relations%:�tick(menu%(2),4,relations%)
	    �
F    � "Show keypad":� �selected(passW%,9) � �open_window(keypadW%)
=    � "Save choices":�save_choices($database%+".Choices")
%    � "Undo changes":�restore_rec
8    � "Help":ș "Wimp_StartTask","<Pbase$Dir>.!Help"

    :
    Ȏ choice$(2) �
      � "Index field":
3      $KeyTitle%=choice$(2):keyfunc$=choice$(2)
1      �deselect(keyW%,20):�shade_key_icons(�)
4      �set_height(keyW%,590):�set_caret(keyW%,2)
 =      � "Analyse index":�analyse(�is_a_key(Fieldnumber%))
!)      � "Analyse months":�analyse(-1)
"0      � "Link to table":�open_window(linkW%)
#      � "Start editing":
$)      starthere%=field%(Fieldnumber%)
%3      � Access% � �set_caret(mainW%,starthere%)
&[      � "Clear contents":�delete_blob(Fieldnumber%,object$,mainW%,field%(Fieldnumber%))
'(      � chartype%(Fieldnumber%)=40 �
(Q        �show_picture(Fieldnumber%):�redraw_icon(mainW%,field%(Fieldnumber%))
)      �
*0      � "Warn of delete":delwarn%=� delwarn%
+%      �tick(menu%(10),7,delwarn%)
,7      � "Undo changes":�restore(Fieldnumber%,"",-1)
-	    �
.  �
/  � menu%(9):
0  Ȏ choice$(1) �
1F    � "Design field":�open_window(createW%):�set_caret(createW%,4)
2    � "Save form file":
3%    $SaveName%=$database%+".Form"
44    savefunc$=choice$(1):�save_click(saveW%,2,4)
5    � "Default database":
6&    �save_form($database%+".Form")
7    �get_it_in($database%)
8    � �first_field>0 �
9      �default_key
:%      �defaults($database%,100,0)
;      � �softerror("",35)
<	    �
=    � "Primary key":
>    $KeyTitle%=choice$(1)
?    keyfunc$=choice$(1)
@"    case%(0)=�:�set_keydata(0)
A0    �deselect(keyW%,20):�shade_key_icons(�):
B2    �set_height(keyW%,590):�set_caret(keyW%,2)
C    � "Quit design":
D    �adjust_on(�)
E&    �save_form($database%+".Form")
F    �get_it_in($database%)
G  �
H  � menu%(17):
I"  T%=�table_number($menu%(17))
J  Ȏ choice$(1) �
K    � "Save":
L6    $SaveName%=$database%+".ValTables."+table$(T%)
M6    savefunc$="Save table":�save_click(saveW%,2,4)
N"    � "Clear":�clear_table(T%)
O"    � "Print":�print_table(T%)
P     � "Sort":�sort_table(T%)
Q/    � "Undo all":�restore_table(T%,tablen%)
R)    � "Undo change":�restore_tabfield
S  �
T  � menu%(18):
U  Ȏ choice$(1) �
V    � "Save as text":
W/    $SaveName%=$database%+".PrintJobs.List"
X4    savefunc$=choice$(1):�save_click(saveW%,2,4)
Y    � "Sort":�sort_list
Z    � "Scrap":�lose_list
[  �
\  � menu%(15):
]  Ȏ choice$(1) �
^    � "Comma":sep$=","
_    � "TAB":sep$=�(9)
`    � "CR":sep$=�(13)
a    � "LF":sep$=�(10)
b     sep$=$Delim%
c  �
d)  �tick_one(menuhandle%,0,3,choice1%)
e!  $�text(csvW%,14)=choice$(1)
f  �redraw_icon(csvW%,14)
g  � menu%(20):
h  Ȏ choice$(1) �
i    � "CR":term$=�(13)
j    � "LF":term$=�(10)
k#    � "CR LF":term$=�(13)+�(10)
l#    � "LF CR":term$=�(10)+�(13)
m#    � "CR CR":term$=�(13)+�(13)
n#    � "LF LF":term$=�(10)+�(10)
o    :term$=$Termin%
p  �
q)  �tick_one(menuhandle%,0,5,choice1%)
r!  $�text(csvW%,15)=choice$(1)
s  �redraw_icon(csvW%,15)
t9  � menu%(8),menu%(11),menu%(14),menu%(16),menu%(19):
u$  fieldtype%=firsttype%+choice1%
v<  �tick_one(menuhandle%,0,lasttype%-firsttype%,choice1%)
w  �update_box
x  � menu%(5):
y  Tablenumber%=choice1%
z&  $Tablename%=table$(Tablenumber%)
{2  �tick_one(menuhandle%,0,LastTable%,choice1%)
|  �redraw_icon(linkW%,0)
}  � fieldmenu%:
~  Ȏ fieldfunc$ �
    � "match":
�    Match_tag%=choice1%+1
�B    $�text(matchW%,3)=Tag$(Match_tag%):�redraw_icon(matchW%,3)
�2    �tick_one(fieldmenu%,0,fields%-1,choice1%)
�    � "first":
�#    � keyfunc$<>"Current key" �
�*      � �ticked(fieldmenu%,choice1%) �
�8        Keyfld0%=0:$F1dkey%="":�redraw_icon(keyW%,0)
�(        �tick(fieldmenu%,choice1%,�)
�
        �
�        Keyfld0%=choice1%+1
�9        $F1dkey%=Tag$(Keyfld0%):�redraw_icon(keyW%,0)
�6        �tick_one(fieldmenu%,0,fields%-1,choice1%)
�      �
�	    �
�    � "second":
�#    � keyfunc$<>"Current key" �
�*      � �ticked(fieldmenu%,choice1%) �
�8        Keyfld1%=0:$F2dkey%="":�redraw_icon(keyW%,1)
�(        �tick(fieldmenu%,choice1%,�)
�
        �
�        Keyfld1%=choice1%+1
�9        $F2dkey%=Tag$(Keyfld1%):�redraw_icon(keyW%,1)
�6        �tick_one(fieldmenu%,0,fields%-1,choice1%)
�      �
�	    �
�  �
�  :�special_select
��
�� � quit% �
�5  � redo% � �show_menu(menuhandle%,menux%,menuy%)
��
��
�:
�#� �init_drag(wi%,ic%,dragtype%)
��getscreensize(W%,H%)
�!block%=wi%
�$ș "Wimp_GetWindowState",,block%
�ysize%=block%!16-block%!8
�x%=block%!4-block%!20
�y%=block%!16-block%!24
�block%!4=ic%
�"ș "Wimp_GetIconState",,block%
�block%!8+=x%:minx%=block%!8
�!block%!12+=y%:miny%=block%!12
�!block%!16+=x%:maxx%=block%!16
�!block%!20+=y%:maxy%=block%!20
�� dragtype%=6 �
�5  block%!24=2*minx%-maxx%:block%!36=2*maxy%-miny%
�   � block%!24=0:block%!36=H%
��
�block%!28=0
�block%!32=W%
�
!block%=0
�block%!4=dragtype%
�dragging%=�
�Ȏ wi% �
�  � saveW%,savesubW%:
�  � RISCOS3 �
�M    � wi%=saveW% � sprite$=�$SaveSprite%,2,8) � sprite$=�$SubSprite%,2,8)
�5    ș "DragASprite_Start",&C5,1,sprite$,block%+8
�#    � ș "Wimp_DragBox",,block%
�  �
�  :
�  ș "Wimp_DragBox",,block%
��
�� wi%=mainW% � ficon%=ic%
��
�:
�� �end_drag(start%,end%)
�
� wi%,ic%
�dragging%=�
�datasize%=end%-start%
�$ș "Wimp_GetPointerInfo",,block%
�wi%=block%!12:ic%=block%!16
�7block%!32=block%!4:block%!28=block%!0:block%!24=ic%
�block%!20=wi%:block%!16=1
�3block%!12=0:block%!36=datasize%:block%!40=Type%
�� design% �
�  �adjust_field(dragbutt%)
�  �
�%  � Filename$<>"" � wi%<>mainW% �
�%    $(block%+44)=�leaf(Filename$)
�    !block%=60
�/    ș "Wimp_SendMessage",17,block%,wi%,ic%
�    ramptr%=start%
�     ș "Wimp_CreateMenu",,-1
�  �
��
��
�:
�� �encrypt(S$,Z%)
�� I%,R%
�R%=�(-12817)
�� I%=1 � �(S$)
�  R%=�(58)-1
�  � � Z% � R%=58-R%
�/  �S$,I%,1)=�((�(�S$,I%,1))-65+R%) � 58+65)
�� I%
�=S$
�:
�� �leaf(s$)
�
s2$=""
�ȕ �s$)<>"." � s$<>""
�  s2$=�s$)+s2$
�
  s$=�s$)
��
�dbasepath$=�s$)
�=s2$
�:
�K� Message handling ----------------------------------------------------
�:
�� �not_acknowledged
�Ȏ block%!16 �
�
  � 5:
�$  � DataOpen failed, so run file
�&  � block%!8=Impref% � Imp_wait%=�
�&  ș "Wimp_StartTask",$(block%+44)
�
  � 7:
�  � RAMTransmit failed
�)  � � merging% � � moan_err%,�msg(39)
�
  � 3:
�6  � DataLoad failed, so delete scrapfile (if ours)
�1  � block%!8=myref% � ș "OS_File",6,block+44
�  � moan_err%,�msg(39)
�#  � &80142:� moan_err%,�msg(90)
��
��
�:
� �message
� task%,ref%,myref%
 task%=block%!4:ref%=block%!8
Ȏ block%!16 �
  � 0:quit%=�
  � 1:� ### DataSave ###
%  � task%<>mytask% � present%=7 �
    datasize%=block%!36
    Ȏ block%!40 �
	       � &fff,&ff9,&aff,&dfe:

      myref%=ref%
>      block%!0=256:block%!12=ref%:block%!16=2:block%!36=-1
*      $(block%+44)="<Wimp$Scrap>"+�(0)

/      ș "Wimp_SendMessage",17,block%,task%
	    �
  �
  � 2:� ### DataSaveAck ###
1  �save(�getstr(block%+44),Type%,Start%,End%)
8  myref%=ref%:block%!12=ref%:block%!16=3:!block%=256
+  ș "Wimp_SendMessage",18,block%,task%
  ș "Wimp_CreateMenu",,-1
  � 3:� ### DataLoad ###
,  myref%=block%!12:f$=�getstr(block%+44)
  �get_it_in(f$)
5  � myref%<>0 � ș "OS_CLI","Remove <Wimp$Scrap>"
  � 4:� ### DataLoadAck ###
8  � block%!12=Impref% � � merging% � �ready_to_merge
<  � 5:� ### DataOpen - response to file double click ###
  Ȏ block%!40 �
    � &7f1,&7f3,&7f4,&7f5:
    � present%=7 �
0      block%!0=20:block%!12=ref%:block%!16=4
 )      ș "Wimp_SendMessage",17,block%
!(      �get_it_in(�getstr(block%+44))
"	    �
#    � &2000:
$    � kill% � present%=0 �
%*      f$=�getstr(block%+44)+".Indices"
&       ș "OS_File",5,f$ � d%
'      � d%=2 �
(2        block%!0=20:block%!12=ref%:block%!16=4
)+        ș "Wimp_SendMessage",17,block%
**        �get_it_in(�getstr(block%+44))
+      �
,	    �
-  �
.L  � 6:� savefunc$<>"Save list" � savefunc$<>"Export CSV" � �ram_transmit
//  � &502:�help_message(block%!32,block%!36)
09  � &400C2:�getscreensize(ScreenWidth%,ScreenHeight%)
1#  � &400C0:�message_menu_select
2+  � &80140:� ### PrintFile - ignore ###
3�
4�
5:
6� �ram_transmit
7A� datasize%>block%!24 � tosend%=block%!24 � tosend%=datasize%
8Fș "Wimp_TransferBlock",mytask%,ramptr%,block%!4,block%!20,tosend%
9block%!24=tosend%
:datasize%-=tosend%
;ramptr%+=tosend%
<block%!12=block%!8
=block%!16=7
>:ș "Wimp_SendMessage",18+(datasize%=0),block%,block%!4
?�
@:
A� �message_menu_select
B� P%,Q%,I%
Ckeyfunc$="":savefunc$=""
D5handle%=block%!20:xmin%=block%!24:ymax%=block%!28
EP%=1
F8ș "Wimp_DecodeMenu",,menuhandle%,block%+32,choices%
G� I%=1 � 4
H  Q%=�$choices%,".",P%+1)
I&  choice$(I%)=�$choices%,P%,Q%-P%)
J
  P%=Q%+1
K� I%
LȎ menuhandle% �
M  � menu%(0):
N  Ȏ choice$(1) �
O    � "New database":
P    $SaveName%="!DataBase"
Q2    $SaveSprite%="snew_appl;Pptr_hand,12,8;B3"
R    savefunc$=choice$(1)
S  �
T  � menu%(1):
U  Ȏ choice$(1) �
V6    � "Information":�count(key%,RU%):�update_stats
W    � "Print":
X    Ȏ choice$(2) �
Y      � "Save options":
Z5      $SaveName%=$database%+".PrintRes.PrintOpts"
[4      $SaveSprite%="sfile_7f5;Pptr_hand,12,8;B3"
\      � "Save query":
]1      $SaveName%=$database%+".PrintRes.Query"
^4      $SaveSprite%="sfile_7f4;Pptr_hand,12,8;B3"
_      � "Save selection":
`5      $SaveName%=$database%+".PrintRes.Selection"
a4      $SaveSprite%="sfile_7f3;Pptr_hand,12,8;B3"
b	    �
c    savefunc$=choice$(2)
d    � "Miscellaneous":
e    Ȏ choice$(2) �
f      � "Batch delete":
gC      �select(moveW%,2):�deselect(moveW%,1):�deselect(moveW%,0)
h+      � � common% � $�text(moveW%,7)=""
i      � "Colours":
j      ncol%()=fcol%()
k      � I%=0 � 6
l.        �set_icon_cols(colW%,I%,ncol%(I%))
m      � I%
n8      !block%=colW%:ș "Wimp_GetWindowState",,block%
o#      width%=block%!12-block%!4
p/      block%!4=xmin%:block%!12=xmin%+width%
q0      block%!8=ymax%-height%:block%!16=ymax%
r	    �
s    � "Export subset":
tA    export%=�:$SubTitle%="Export subset":savefunc$=choice$(1)
uV    $SubName%=$database%+".PrintJobs.!Subset":� � common% � $�text(savesubW%,0)=""
v1    $SubSprite%="snew_appl;Pptr_hand,12,8;B3"
w    � "Export CSV":
x9    $SubTitle%="Export CSV file":savefunc$=choice$(1)
y:    � sep$="," � t$="dfe":f$="CSV" � t$="fff":f$="Sep"
zY    $SubName%=$database%+".PrintJobs."+f$+"file":� � common% � $�text(savesubW%,0)=""
{4    $SubSprite%="sfile_"+t$+";Pptr_hand,12,8;B3"
|  �
}  � menu%(9):
~  Ȏ choice$(1) �
    � "Save form file":
�%    $SaveName%=$database%+".Form"
�2    $SaveSprite%="sfile_7f2;Pptr_hand,12,8;B3"
�    savefunc$=choice$(1)
�  �
�  � menu%(17):
�  Ȏ choice$(1) �
�    � "Save":
�&    T%=�table_number($menuhandle%)
�6    $SaveName%=$database%+".ValTables."+table$(T%)
�2    $SaveSprite%="sfile_7f1;Pptr_hand,12,8;B3"
�    savefunc$="Save table"
�  �
�  � menu%(18):
�  Ȏ choice$(1) �
�    � "Save as text":
�/    $SaveName%=$database%+".PrintJobs.List"
�2    $SaveSprite%="sfile_fff;Pptr_hand,12,8;B3"
�  �
�  savefunc$=choice$(1)
��
�0ș "Wimp_CreateSubMenu",,handle%,xmin%,ymax%
��
�:
�� �help_message(wi%,ic%)
�Ȏ wi% �
�  � -2:�send_help(75)
�  � infoW%:�send_help(76)
�  � miscW%:�send_help(77)
�  � mainW%:
�  � � design% � ic%>=0 �
�    F%=(ic%+1) � 2
�    Ȏ chartype%(F%) �
�A      � 0,1,2,3,4,5,6,7,8,36,39,41,42,43,44,45:�send_help(78)
�+      :ș "Interface_SendHelp",,block%
�	    �
�  �
�   � pselectW%:�send_help(79)
�  � relateW%:�send_help(80)
�  � listW%:�send_help(81)
�   � datadicW%:�send_help(82)
�  � saveW%:�send_help(83)
�   � savesubW%:�send_help(84)
�  � accessW%:�send_help(85)
�  � mergeW%:�send_help(86)
�'  :ș "Interface_SendHelp",,block%
��
��
�:
�� �send_help(M%)
�!block%=256
�block%!12=ref%
�block%!16=&503
�$(block%+20)=�msg(M%)
�,ș "Wimp_SendMessage",17,block%,block%!4
��
�:
�:
�J� File saving --------------------------------------------------------
�:
�� �save_all_tables
�� T%
�ș "Hourglass_On"
�ȕ T%<=LastTable%
�,  f$=$database%+".ValTables."+table$(T%)
�E  $TabTitle%=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
�7  Start%=!tabanchor%(T%):End%=Start%+160+Rows%*Rec%
�   �save(f$,&7f1,Start%,End%)
�  T%+=1
�7  ș "Hourglass_Percentage",T%*100 � (LastTable%+1)
��
�ș "Hourglass_Off"
��
�:
�� �save_options
�� F,I%,ic%
�F=�(f$)
�� +0
�� I%=1 � 13
�  � ic%
�   �#F,�selected(printW%,ic%)
�� I%
�� I%=1 � 9
�  � ic%
�  �#F,$�text(printW%,ic%)
�� I%
�� I%=1 � 7
�  � ic%
�   �#F,�selected(printW%,ic%)
�� I%
�� I%=1 � 3
�  � ic%
�   �#F,�selected(labelW%,ic%)
�� I%
�� I%=1 � 4
�  � ic%
�  �#F,$�text(labelW%,ic%)
�� I%
�� I%=1 � 3
�  � ic%
�   �#F,�selected(labelW%,ic%)
�� I%
��close_file(F)
�ș "OS_File",18,f$,&7f5
�:
�8� 1,2,4,6,7,8,23,24,25,26,38,39,41:REM Radio buttons
�4� 15,16,17,18,30,32,34,43,45:REM Writable fields
�.� 10,11,12,19,29,40,42:REM Option switches
� � In Label Definition window
�� 0,1,2:REM Radio buttons
�$� 4,6,10,12:REM Writeable fields
�"� 11,13,16:REM Option switches
�:
��
�:
�� �save(f$,ft%,start%,end%)
�Ȏ ft% �
�
  � 0:
�  leaf$=�leaf(f$)
�D  � �leaf$,1)<>"!" � leaf$="!"+�leaf$,9):f$=dbasepath$+"."+leaf$
�  ș "OS_File",8,f$
�"  ș "OS_File",8,f$+".Indices"
�$  ș "OS_File",8,f$+".ValTables"
�#  ș "OS_File",8,f$+".PrintRes"
�$  ș "OS_File",8,f$+".PrintJobs"
�I  ș "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Run "+f$+".!Run ~C~V"
�K  ș "OS_CLI","Copy <PBase$Dir>.Resources.Temp.!Boot "+f$+".!Boot ~C~V"
�H  ș "OS_CLI","Copy <PBase$Dir>.Resources.chkspr "+f$+".chkspr ~C~V"
�J  ș "OS_CLI","Copy <PBase$Dir>.Resources.Colours "+f$+".Colours ~C~V"
-  �copy_database_spritefile(f$,�leaf(f$))
  Ȏ � �
$    � export%:�export_subset(f$)
    � csvconv%:
    � !formanchor%=0 �
4      �extend_named_sliding_block(formanchor%,0)
      Fptr%=!formanchor%
"      fields%=0:Fieldnumber%=0
"      fields%=�get_form(Fptr%)
		    �


    :
    �lit(menu%(0),1,�)
    �get_it_in(f$)

    �open_window(mainW%)
    � !formanchor%=0 �
4      �extend_named_sliding_block(formanchor%,0)
      Fptr%=!formanchor%
"      fields%=0:Fieldnumber%=0
	    �
  �

  � 1:
  ș "OS_CLI","CDir "+f$:
  logpath$=f$
  �close_window(saveW%)
2  � &7f2:�save_form(f$):�get_it_in($database%)
  � &7f5:�save_options
  � &dfe:�write_csv(f$)
  :
  Ȏ � �
    � startlog%:
    �close_log
    logpath$=f$
     loghandle%=�(logpath$)
!    �#loghandle%,$database%
"3    �#loghandle%,"Password level used: "+�(pw%)
#&    �#loghandle%,"Log started "+�$
$    �#loghandle%,�36,"=")
%    startlog%=�
&    � savetofile%:
'    texthandle%=�(f$)
("    �do_it(Search$,displayed%)
)
    :
*+    ș "OS_File",10,f$,ft%,,start%,end%
+)    �scrap_sliding_block(saveanchor%)
,  �
-�
.warn%=�
/�
0:
1� �getstr(p%)
2� p$
3
ȕ ?p%>31
4  p$+=�(?p%)
5  p%+=1
6�
7=p$
8:
9L� Validation tables ----------------------------------------------------
::
;� �create_table
<� I%,title$,Rec%
=Ȏ b% � %111 �
>
  � 4:
?  Ȏ ic% �
@
    � 26:
A    � LastTable%=MaxTabs% �
B&      �softerror(�(MaxTabs%+1),32)
C      �
D      LastTable%+=1
E!      Tablenumber%=LastTable%
F!      name$=$�text(tableW%,0)
G"      table$(LastTable%)=name$
H$      Rows%=�($�text(tableW%,1))
I)      TabFields%=�($�text(tableW%,2))
J      � I%=0 � TabFields%
K6        tabfieldlen%(I%)=�($�text(tableW%,I%*2+4))
L$        Rec%+=tabfieldlen%(I%)+1
M      � I%
N       tablen%=160+Rows%*Rec%
OO      �create_named_sliding_block(tabanchor%(LastTable%),(tablen%+3) � � 3)
P)      tabptr%=!tabanchor%(LastTable%)
Q2      $tabptr%=�(Rows%):tabptr%+=�($tabptr%)+1
R7      $tabptr%=�(TabFields%):tabptr%+=�($tabptr%)+1
S      � I%=0 � TabFields%
T?        $tabptr%=�(tabfieldlen%(I%)):tabptr%+=�($tabptr%)+1
U(        head$=$�text(tableW%,I%*2+3)
V;        title$+=head$+�tabfieldlen%(I%)-�(head$)+2," ")
W      � I%
X=      $tabptr%=title$:tabptr%=!tabanchor%(LastTable%)+160
Y      � row%=1 � Rows%
Z        � I%=0 � TabFields%
[5          $tabptr%="":tabptr%+=tabfieldlen%(I%)+1
\        � I%
]      � row%
^!      �show_table(LastTable%)
_!      Tablenumber%=LastTable%
`       TabsLoaded$+=","+name$
a+      � menu%(5)>0 � menu_ptr%=menu%(5)
b:      menu%(5)=�create_menu(menu_ptr%,140,TabsLoaded$)
c=      ptr%=menu%(2)+52:ptr%!4=menu%(5):�lit(menu%(2),1,�)
d	    �
e    �close_window(tableW%)
f  �
g�
h�
i:
j� �clear_table(T%)
k� �confirm(�msg(47))=� � �
l-� R%,F%,ind%,Rows%,TabFields%,start%,Rec%
m;T$=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
n#start%=!tabanchor%(T%)+160-Rec%
o� R%=1 � Rows%
p  ind%=start%+R%*Rec%
q  � F%=0 � TabFields%
r)    $ind%="":ind%+=tabfieldlen%(F%)+1
s
  � F%
t� R%
u�show_table(T%)
v�
w:
x� �show_table(T%)
y$� ind%,start%,iflags%,I%,pos%,p$
z� T%<0 � �
{�delete_icons(datadicW%,0)
|name$=table$(T%)
}$Tablename%=name$
~$menu%(17)=name$
Aș "OS_File",5,$database%+".ValTables."+name$ � d%,,,,tablen%
�6�extend_named_sliding_block(undoanchor%,tablen%+1)
�Rș "Wimp_TransferBlock",mytask%,!tabanchor%(T%),mytask%,!undoanchor%,tablen%+1
�C$TabTitle%=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
�ind%=!tabanchor%(T%)+160
�iflags%=&07003531
�ș "Hourglass_On"
�� row%=1 � Rows%
�
  pos%=80
�  � I%=0 � TabFields%
�v    R%=�create_icon(datadicW%,pos%,-row%*36,(tabfieldlen%(I%)+1)*16,32,iflags%,"",ind%,writep%,tabfieldlen%(I%)+1)
�%    pos%+=(tabfieldlen%(I%)+2)*16
�     ind%+=tabfieldlen%(I%)+1
�
  � I%
�0  ș "Hourglass_Percentage",row%*100 � Rows%
�
� row%
�ș "Hourglass_Off"
�p$=printrel$(T%)
�� p$<>"" �
�  � I%=1 � �(p$)
�'    �select(datadicW%,�(�p$,I%,1)))
�
  � I%
��
�"!block%=0:block%!4=-Rows%*36-4
�%block%!8=(Rec%+10)*16:block%!12=0
�(ș "Wimp_SetExtent",datadicW%,block%
�!block%=datadicW%
�$ș "Wimp_GetWindowState",,block%
�#block%!12=block%!4+(Rec%+10)*16
�� Rows%<20 �
�#  block%!16=block%!8+Rows%*36+4
�  �
�   block%!16=block%!8+36*20+4
��
� ș "Wimp_OpenWindow",,block%
��redraw(datadicW%)
�'� Access% � �set_caret(datadicW%,0)
��
�:
�� �restore_table(T%,L%)
�Mș "Wimp_TransferBlock",mytask%,!undoanchor%,mytask%,!tabanchor%(T%),L%+1
��redraw(datadicW%)
��
�:
�� �restore_tabfield
�� source%,dest%
�?ș "Wimp_GetCaretPosition",,block%:wi%=!block%:ic%=block%!4
�� wi%=datadicW% �
�   dest%=�text(datadicW%,ic%)
�:  source%=!undoanchor%+dest%-!tabanchor%(Tablenumber%)
�  $dest%=$source%
�!  �redraw_icon(datadicW%,ic%)
��
��
�:
�� �sort_table(T%)
�?title$=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
�!ind%=!tabanchor%(T%)+160-Rec%
�� row%=0 � Rows%-1
�  ind%+=Rec%
�  block%!(row%*4)=ind%
�  � $ind%="" � $ind%="~"
�
� row%
�Sș "OS_HeapSort",Rows%,(block% � (1<<30) � (1<<31)),4,,!tabanchor%(T%)+160,Rec%
�!ind%=!tabanchor%(T%)+160-Rec%
�� row%=0 � Rows%-1
�  ind%+=Rec%
�  � $ind%="~" � $ind%=""
�
� row%
��redraw(datadicW%)
��
�:
�� �print_table(T%)
�� printing% � indexing% � �
�(� start%,ptr%,Line$,title$,rowsused%
��read_print_options
�format$="horiz"
�?title$=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
�!LenLine%=Lmargin%+�(title$)+2
�0Heading$=margin$+title$+�Rec%-�(title$)," ")
�7�extend_named_sliding_block(lineanchor%,LenLine%+4)
�I�extend_named_sliding_block(headanchor%,LenLine%+4):pos%=!headanchor%
�7�heap_store(headanchor%,LenLine%,0,pos%,0,Heading$)
�Title$="Validation table"
�Title1$=table$(T%)
�Title2$=""
�reportdest$="Window"
��close_window(datadicW%)
�Count%=0
��list_head(0)
�ș "Hourglass_On"
�� I%=1 � Rows%
�%  start%=!tabanchor%(T%)+160-Rec%
�  Line$=margin$
�  ptr%=start%+I%*Rec%
�  � J%=0 � TabFields%
�D    � $ptr%<>"" � Line$+=$ptr%+�tabfieldlen%(J%)-�($ptr%)+2," ")
�     ptr%+=tabfieldlen%(J%)+1
�
  � J%
�  � Line$<>margin$ �
�    rowsused%+=1
�D    $(!lineanchor%)=Line$:�list_line(-1,lineanchor%,�(Line$),32)
�  �
�.  ș "Hourglass_Percentage",I%*100 � Rows%
�� I%
�ș "Hourglass_Off"
��rule_off(45)
�S$=margin$+�(Rows%)+" rows"
�:$(!lineanchor%)=S$:�list_line(-1,lineanchor%,�(S$),32)
�#S$=margin$+�(rowsused%)+" used"
�:$(!lineanchor%)=S$:�list_line(-1,lineanchor%,�(S$),32)
��rule_off(45)
��screen_list
�pitch$=�pitch("0")
��lit(menu%(18),1,�)
��
�:
�� �table_number(N$)
�� T%,P%
�� N$="" �=-1
�	T%=-1
��
�  T%+=1
�#� table$(T%)=N$ � T%>LastTable%
�� T%>LastTable% �=-1 �=T%
�:
�*� �table_info(T%,� R%,� F%,� RL%,L%())
�� P%,I%
�P%=!tabanchor%(T%)

R%=�($P%):P%+=�($P%)+1

F%=�($P%):P%+=�($P%)+1

	RL%=0

� I%=0 � F%

   L%(I%)=�($P%):P%+=�($P%)+1

  RL%+=L%(I%)+1

� I%

=$P%

:

	� �table_field(F%,L%())

� I%,P%

ȕ I%<F%

  P%+=L%(I%)+1


  I%+=1

�

=P%

:

� �drag_table(f$)

� pos%,name$,d%

Tablenumber%=-1

name$=�leaf(f$)

� �TabsLoaded$,name$)>0 � �

%ș "OS_File",5,f$ � d%,,,,tablen%

� LastTable%=MaxTabs% �

4  � �extratabs$,name$)=0 � extratabs$+=name$+","

  �

  LastTable%+=1

K  �create_named_sliding_block(tabanchor%(LastTable%),(tablen%+3) � � 3)

1  ș "OS_File",255,f$,!tabanchor%(LastTable%)

  table$(LastTable%)=name$

  Tablenumber%=LastTable%

  TabsLoaded$+=","+name$

 '  � menu%(5)>0 � menu_ptr%=menu%(5)

!6  menu%(5)=�create_menu(menu_ptr%,140,TabsLoaded$)

"9  ptr%=menu%(2)+52:ptr%!4=menu%(5):�lit(menu%(2),1,�)

#  �

$�

%�

&:

'� �link_to_table

(� icon%

)Ȏ b% � %111 �

*  � 2,4:

+  � ic%=13 �

,5    �tick_one(menu%(5),0,LastTable%,Tablenumber%)

-+    �show_menu(menu%(5),oldx%+32,oldy%)

.  �

/�

0Ȏ b% � %111 �

1  � 1,4:

2$  � (b% � %111)=4 � z%=1 � z%=-1

3  Ȏ ic% �

4    � 5:�tcycle(z%)

5    � 6:�tcycle(-z%)

6!    � 7:�fcycle(z%,fieldnum%)

7"    � 8:�fcycle(-z%,fieldnum%)

8     � 11:�fcycle(z%,expand%)

9!    � 12:�fcycle(-z%,expand%)

:    � 9:

;    � icon%=10 � 12

<8      �icon_bit(22,linkW%,icon%,�selected(linkW%,9))

=    � icon%

>    � 3:

?"    icon%=field%(Fieldnumber%)

@1    � �selected(linkW%,4) � $Tablename%<>"" �

A4      link$(Fieldnumber%)=$Tablename%+$fieldnum%

B/      �set_icon_cols(mainW%,icon%,fcol%(6))

CR      � �selected(linkW%,9) � link$(Fieldnumber%)=$expand%+link$(Fieldnumber%)

D      �

E       link$(Fieldnumber%)=""

F(      �set_icon_cols(mainW%,icon%,7)

G	    �

H    link$(0)="LOADED"

I/    � (b% � %111)=4 � �close_window(linkW%)

J  �

K�

L�

M:

N� �tcycle(z%)

O� LastTable%=-1 � �

PTablenumber%+=z%

Q.� Tablenumber%>LastTable% � Tablenumber%=0

R.� Tablenumber%<0 � Tablenumber%=LastTable%

S$$Tablename%=table$(Tablenumber%)

T�redraw_icon(linkW%,0)

U�

V:

W� �fcycle(z%,column%)

XET$=�table_info(Tablenumber%,Rows%,TabFields%,Rec%,tabfieldlen%())

Yfield%=�($column%)

Zfield%+=z%

["� field%>TabFields% � field%=0

\"� field%<0 � field%=TabFields%

]$column%=�(field%)

^�redraw_icon(linkW%,2)

_�redraw_icon(linkW%,10)

`�

a:

b� �link_status

c%� name$,name1$,field$,expand$,ic%

dname$=link$(Fieldnumber%)

eD� �(name$)<58 � �(name$)<>-1 � expand$=�name$,1):name$=�name$,2)

f!field$=�name$):name1$=�name$)

g-� (name1$<>"" � �TabsLoaded$,name1$)>0) �

h;  $Tablename%=name1$:$fieldnum%=field$:$expand%=expand$

i(  Tablenumber%=�table_number(name1$)

j  �select(linkW%,4)

k  �

l  Tablenumber%=0

m&  $Tablename%=table$(Tablenumber%)

n(  �deselect(linkW%,4):$fieldnum%="0"

o�

p� expand$<>"" �

q(  �select(linkW%,9):$expand%=expand$

r(  � �deselect(linkW%,9):$expand%="0"

s�

t� ic%=10 � 12

u2  �icon_bit(22,linkW%,ic%,�selected(linkW%,9))

v	� ic%

wI�redraw_icon(linkW%,0):�redraw_icon(linkW%,2):�redraw_icon(linkW%,10)

x�

y:

zK� End of Validation table routines ------------------------------------

{:

|� �changes(key%)

}� M$,K%,index%

~<Search$=�parse($�text(changeW%,3),�selected(changeW%,5))

New$=$�text(changeW%,1)

�%� New$="" � n$="<null>" � n$=New$

�&� New$<>"" � �"+-*/",�New$,1))>0 �

�  numeric%=�

�  � numeric%=�

��

�K%=�is_a_key(Fieldnumber%)

�<� K%=key% � �softerror("",12):ș "Wimp_CreateMenu",,-1:�

�b� K%>=0 � M$=" NOTE! Index on this field will NO LONGER BE VALID and will be deleted." � M$=""

�)P%=�Title$,". "):Title$=�Title$,P%+2)

�L� Title$<>"All records" � Title$=" when "+Title$ � Title$=" for "+Title$

�8Title$="Change "+Fieldname$+" to "+n$+Title$+". "+M$

�� �confirm(Title$)=� �

�'  subtotal%=�count_recs(key%,zero%)

�  ș "Hourglass_On"

�,  dbasehandle%=�($database%+".Database")

�  P%=�neighbour(key%,top,1)

�"  �scan_file("P%<>top",key%,5)

�  �close_file(dbasehandle%)

�  $Date%(file%)=�date

�  date%?file%=1

�  �display(key%,addr)

�  ș "Hourglass_Off"

�  � K%>=0 �

�    � index%=K% � Keys%

�!      Index$(K%)=Index$(K%+1)

�    � index%

�,    �scrap_sliding_block(keyanchor%(K%))

�    Keys%-=1

�  �

�2  � �selected(passW%,16) � �#loghandle%,Title$

��

�ș "Wimp_CreateMenu",,-1

��

�:

�� �is_a_key(F%)

�� key%,flag%

�flag%=-1

�� key%=0 � Keys%

�4  � KF%(key%,0)=F% � KF%(key%,1)=F% � flag%=key%

�
� key%

�
=flag%

�:

�� �read(N%,K%,R%,f$)

�� I%,key%,dbasehandle%

�"dbasehandle%=�(f$+".Database")

�%$Rf%(0)="":field$(0)="":key$()=""

� �#dbasehandle%=�(R%)*Length%

�� I%=1 � N%

�  field$(I%)=�#dbasehandle%

�C  � chartype%(I%)<>40 � chartype%(I%)<>59 � $Rf%(I%)=field$(I%)

�  Ȏ chartype%(I%) �

�8    � 36,37,38:�set_blob_sprite(R%,I%,chartype%(I%))

�!    � 39:�show_text_block(I%)

�    � 40:�show_picture(I%)

�    � 41,42,43,44,45:

�T    � field$(I%)=" " � �select(mainW%,field%(I%)) � �deselect(mainW%,field%(I%))

�,    � 46:� R%=RA% � $Rf%(I%)=�(nextrec%)

�9    � 47:� R%=RA% � �split_link(I%,R$,V$):$Rf%(I%)=R$

�'    � 48:� R%=RA% � $Rf%(I%)=‘$,8)

�(    � 49:� R%=RA% � $Rf%(I%)=��$,15)

�1    � 50:� R%=RA% � $Rf%(I%)=�convert_date(2)

�1    � 51:� R%=RA% � $Rf%(I%)=�convert_date(4)

�#    � 52:� R%=RA% � $Rf%(I%)=�$

�'    � 53:� R%=RA% � $Rf%(I%)=��$,3)

�)    � 54:� R%=RA% � $Rf%(I%)=��$,5,2)

�)    � 55:� R%=RA% � $Rf%(I%)=��$,8,3)

�J    � 56:� R%=RA% � M$=��$,8,3):P%=�months$,M$):$Rf%(I%)=�((P%+2) � 3)

�*    � 57:� R%=RA% � $Rf%(I%)=��$,12,4)

�  �

�� I%

�
� K% �

�  � key%=0 � Keys%

�    key$(key%)=�key(key%)

�  � key%

��

��close_file(dbasehandle%)

��

�:

�� �update_calcs(N%)

�� design% � �

� � I%,C%,L%,F,F$,Form$,S$,SF$

�Form$=update$(N%)

�� � Form$=0 � �

�� I%=1 � �(Form$)-1 � 2

�  F%=�fnum(�Form$,I%,2))

�$  �split_link(F%,real$,visible$)

�	  � �

�  � � �:� �:�calc_error:�

�  Ȏ chartype%(F%) �

�    � 6:

�>    F=�(real$):F$=�(F):� fix%(F%)>0 � F$=�fix_point(F$,F%)

�    � 7:

�    F$=�(real$)

�7    � N%=0 � S$=�expand(F$,link$(F%),L%,SF$):F$=SF$

�  �

�	  � �

�E  � �(F$)<=len%(F%) � $Rf%(F%)=F$:�redraw_icon(mainW%,field%(F%))

�  �update_calcs(F%)

�� I%

��

�:

�� �calc_error

�� calcerror%=� �

�  �wimp_error(�,�,�,�$)

�#  � PROCsofterror(calc$(I%),73)

�  calcerror%=�

�  � calcerror=�

��

��

�;

�� �check_change

�� F%,flag%

�ȕ F%<fields% � flag%=�

�  F%+=1

�  Ȏ chartype%(F%) �

�+    � 0,1,2,3,4,5,6,7,8,41,42,43,44,45:

�(    � $Rf%(F%)<>field$(F%) � flag%=�

�  �

��

�*� flag% � �write(fields%,key%):warn%=�

��

�:

�� �write(N%,k%)

�� key%,newrec%,alter%

�%� � Access% � �softerror("",14):�

��close_file(dbasehandle%)

�6� template%=2 � �write_dbase(RA%,N%):template%=0:�

�PRI$=�key(0)
� PRI$<>"" �
  kl%=KL%(0):val$=�type(0)
  � key$(0)="" �
    �insert(�,PRI$,0)
    � PRI$<>"*Failed*" �
      newrec%=�
      � k%=0 � addr=F%
	    �
	    �
	    � PRI$=key$(0) �

      alter%=�
      �
"      � �confirm(�msg(48))=� �

        alter%=�
        �delete(key$(0),0)
        �insert(�,PRI$,0)
        � k%=0 � addr=F%
      �
	    �
  �
�
� � newrec% � � alter% � �
ȕ key%<Keys%

  key%+=1
  KEY$=�key(key%)
*  � KEY$<>key$(key%) � key$(key%)="" �
&    kl%=KL%(key%):val$=�type(key%)
.    � � newrec% � �delete(key$(key%),key%)
    �insert(�,KEY$,key%)
    � key%=k% � addr=F%
  �
�
 $Date%(file%)=�date
!date%?file%=1
"(� � newtree% � �write_dbase(REC%,N%)
#� newrec% � autobalance% �
$  added%+=1
%  � added%=balint% �
&    � key%=0 � Keys%
'      �balance(key%)
(    � key%
)    added%=0
*  �
+�
,�
-:
.� �write_dbase(R%,N%)
/� I%,F$,dbasehandle%,flag%
0*dbasehandle%=�($database%+".Database")
1�#dbasehandle%=R%*Length%
2� �selected(passW%,16) �
3  � newrec% �
4[    �#loghandle%,"New record: Subfile "+�(file%)+"  "+$Rf%(KF%(0,0))+" "+$Rf%(KF%(0,1))
5(    � �#loghandle%,logentry$:flag%=�
6  �
7�
8� I%=1 � N%
9  Ȏ chartype%(I%) �
:    � 39,40:F$=""
;T    � 47:F$=$Rf%(I%):�split_link(I%,R$,V$):S%=�(R$):S%+=1:calc$(I%)=V$+"|"+�(S%)
<    � 58:F$=�$
=    :F$=$Rf%(I%)
>  �
?  �#dbasehandle%,F$
@!  � flag% � F$<> field$(I%) �
A%    � F$="" � D$="<null>" � D$=F$
B5    � field$(I%)="" � S$="<null>" � S$=field$(I%)
C1    �#loghandle%,Tag$(I%)+": "+S$+" ---> "+D$
D  �
E  field$(I%)=F$
F� I%
G�close_file(dbasehandle%)
H�
I:
J� �split_link(F%,� R$,� V$)
K
� L$,P%,F
LL$=calc$(F%)
M
Ȏ � �
N  � �L$,1)="#":
O/  P%=�L$,"#",2):V$=�L$,P%+1):R$=�L$,2,P%-2)
P  � �L$,"|")>0:
Q+  P%=�L$,"|"):V$=�L$,P%-1):R$=�L$,P%+1)
R  :R$="":V$=""
S�
T�
U:
V� �key(key%)
W=�key2(key%,0)
X:
Y� �key2(key%,loc%)
Z� I%,N%,P%,S%,S$,T$,f0%,f1%
[(P%=1:f0%=KF%(key%,0):f1%=KF%(key%,1)
\
Ȏ loc% �
]
  � 0:
^   S$=$Rf%(f0%)+" "+$Rf%(f1%)
_  
`  S$=F$(f0%)+" "+F$(f1%)
a�
b� S$=" " �=""
c� �S$)<>" " � S$+=" "
d� I%=0 � 3
e  N%=KW%(key%,I%)
f  � N%<>0 � P%<>�(S$) �
g    S%=�S$," ",P%+1)
h    � S%-P%<N% � N%=S%-P%
i    T$+=�S$,P%,N%)
j    P%=S%+1
k  �
l� I%
mT$+=�KL%(key%)-�(T$),"#")
nȎ chartype%(f0%) �
o$  � 5,51,52:T$=�reverse_date(T$)
p�
q� case%(key%) �=T$ �=�u(T$)
r:
s� �u(N$)
t� I%,B%
u$key=N$
v� I%=0 � �(N$)-1
w  B%=key?I%
x(  � B%>96 � B%<123 � key?I%=B% � 223
y� I%
z	=$key
{:
|� �date
}� Y$,M$,D$,M%,date$
~Y$=��$,14,2)
D$=��$,5,2)
�M$=��$,8,3)
�:M%=(�"JanFebMarAprMayJunJulAugSepOctNovDec",M$)+2) � 3
�%� M%<10 � M$="0"+�(M%) � M$=�(M%)
�date$=D$+"-"+M$+"-"+Y$
�
=date$
�:
�� �date(key%)
�� !keyanchor%(key%)=0 � �
�� I%
�� I%=0 � 5
�  � date%?I%=1 �
�)    $(!keyanchor%(key%)+8+9*I%)=�date
�    $Date%(I%)=�date
�  �
�� I%
��
�:
�$� �check_date(D$,place%,� date$)
�&� I%,D%,M%,Y%,L%,P%,Q%,U$,d$,m$,y$
�L%=�(D$)
�� L%=0 �=�
�� I%=1 � L%
�  C$=�D$,I%,1)
�  � C$<"0" � C$>"9" �
�    � P%=0 � P%=I% � Q%=I%
�  �
�� I%
�g� P%=0 � Q%=0 � �restore(Fieldnumber%," (day, month & year must be separated by non-numeral)",4):=�
�D%=�(�D$,P%-1))
�M%=�(�D$,P%+1,Q%-P%-1))
�Y%=�(�D$,Q%+1))
�2� Y%<0 � D%<1 � �restore(Fieldnumber%,"",4):=�
�H� M%<1 � M%>12 � �restore(Fieldnumber%," (month out of range)",4):=�
�
Ȏ � �
�0  � Y% � 400=0:U$="312931303130313130313031"
�<  � Y% � 100<>0 � Y% � 4=0:U$="312931303130313130313031"
�%  :U$="312831303130313130313031"
��
�DM$=�U$,2*M%-1,2)
�Q� D%>�(DM$) � �restore(Fieldnumber%," (day out of range - max="+DM$+")",4):=�
�"d$=�(D%):� �(d$)=1 � d$="0"+d$
�"m$=�(M%):� �(m$)=1 � m$="0"+m$
�"y$=�(Y%):� �(y$)=1 � y$="0"+y$
�S� �(y$)<>2 � �(y$)<>4 � �restore(Fieldnumber%," (year not 2 or 4 digits)",4):=�
�1� �(y$)=4 � len%(Fieldnumber%)<10 � y$=�y$,2)
�$date$=d$+datesep$+m$+datesep$+y$
�b� place%=0 � �(date$)>len%(Fieldnumber%) � �restore(Fieldnumber%," (too long for field)",4):=�
�Ȏ place% �
�
  � 0:
�H  $Rf%(Fieldnumber%)=date$:�redraw_icon(mainW%,field%(Fieldnumber%))
�
  � 1:
�9  $�text(keypadW%,27)=date$:�redraw_icon(keypadW%,27)
��
�=�
�:
�� �convert_date(L%)
�� d$,m$,y$,M$,M%
�d$=��$,5,2)
�M$=��$,8,3)
�P%=�months$,M$)
�M%=(P%+2) � 3
� m$=�(M%):� M%<10 � m$="0"+m$
�y$=��$,16-L%,L%)
�=d$+datesep$+m$+datesep$+y$
�:
�� �reverse_date(K$)
�
� sep$
�Ȏ �(K$) �
�
  � 8:
�  sep$=�K$,3,1)
�.  K$=�K$,2)+sep$+�K$,4,2)+sep$+�K$,2) �=K$
�  � 10:
�  � �(K$)<100 �
�    sep$=�K$,3,1)
�+    K$=�K$,4)+sep$+�K$,4,2)+sep$+�K$,2)
�	    �
�    sep$=�K$,5,1)
�+    K$=�K$,2)+sep$+�K$,6,2)+sep$+�K$,4)
�  �
��
�=K$
�:
�� �seconds(time$,place%)
�,� I%,L%,P%,Q%,H%,M%,S%,secs%,h$,m$,s$,C$
�L%=�(time$)
�� L%=0 �=0
�� I%=1 � L%
�  C$=�time$,I%,1)
�  � C$<"0" � C$>"9" �
�    � P%=0 � P%=I% � Q%=I%
�  �
�� I%
�u� P%=0 � Q%=0 � �restore(Fieldnumber%," (hours, minutes and seconds must be separated by a non-numeral).",94):=-1
�^H%=�(�time$,P%-1)):� H%<0 � H%>23 � �restore(Fieldnumber%," (hours out of range).",94):=-1
�hM%=�(�time$,P%+1,Q%-P%-1)):� M%<0 � M%>59 � �restore(Fieldnumber%," (minutes out of range).",94):=-1
�`S%=�(�time$,Q%+1)):� S%<0 � S%>59 � �restore(Fieldnumber%," (seconds out of range).",94):=-1
�"h$=�(H%):� �(h$)=1 � h$="0"+h$
�"m$=�(M%):� �(m$)=1 � m$="0"+m$
�"s$=�(S%):� �(s$)=1 � s$="0"+s$
�$time$=h$+timesep$+m$+timesep$+s$
�secs%=H%*3600+M%*60+S%
�S� place%=0 � $Rf%(Fieldnumber%)=time$:�redraw_icon(mainW%,field%(Fieldnumber%))
�
=secs%
�:
�� �time(secs%)
�� H%,M%,S%,h$,m$,s$
�&H%=secs% � 3600:secs%=secs% � 3600
�M%=secs% � 60
�S%=secs% � 60
�"h$=�(H%):� �(h$)=1 � h$="0"+h$
�"m$=�(M%):� �(m$)=1 � m$="0"+m$
�"s$=�(S%):� �(s$)=1 � s$="0"+s$
�=h$+timesep$+m$+timesep$+s$
�:
�(� �validate(F%,� TabFields%,� name$)
�� � validate% �=�
�I� row%,field%,Rows%,Rec%,ind%,eind%,pos%,start%,rel%,exp%,epos%,date$
�S� fix%(F%)>0 � $Rf%(F%)=�fix_point($Rf%(F%),F%):�redraw_icon(mainW%,field%(F%))
�6� chartype%(F%)=3 �=�check_val(calc$(F%),$Rf%(F%))
�5� chartype%(F%)=5 �=�check_date($Rf%(F%),0,date$)
�1� chartype%(F%)=8 �=(�seconds($Rf%(F%),0)>=0)
�,� $Rf%(F%)=field$(F%) � TabFields%=0 �=�
�3name$=link$(F%):Tablenumber%=-1:rel%=TabFields%
�"� name$="" � �name$,1)="#" �=�
�#field%=�(�name$)):name$=�name$)
�Hexp%=-1:� �(name$)<58 � �(name$)<>-1 � exp%=�(name$):name$=�name$,2)
�&T%=�table_number(name$):� T%<0 �=�
�;T$=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
,pos%=�table_field(field%,tabfieldlen%())
C� exp%<0 � epos%=pos% � epos%=�table_field(exp%,tabfieldlen%())
#start%=!tabanchor%(T%)+160-Rec%
'ind%=start%+pos%:eind%=start%+epos%

� row%+=1
  ind%+=Rec%:eind%+=Rec%
3� row%>Rows% � $ind%=$Rf%(F%) � $eind%=$Rf%(F%)
O� row%>Rows% � rel%=0 � �restore(F%," ("+name$+")",5):=� � � row%>Rows% �=�
ind%=start%+row%*Rec%
	� I%=0 � TabFields%

,  rel%(I%)=ind%:ind%+=tabfieldlen%(I%)+1
� I%
h� exp%>=0 � expand$=$eind%:� �(expand$)<=len%(F%) � $Rf%(F%)=expand$:�redraw_icon(mainW%,field%(F%))

	=row%
:
� �check_val(C$,N$)
� min$,max$,P%,V,ok%
	ok%=�
� N$="" �=ok%
� C$<>"" �

  V=�(N$)
  P%=�C$,"|")
  � P%>0 �
    min$=�C$,P%-1)
    max$=�C$,P%+1)
H    � min$<>"" � V<�(min$) � ok%=�:�restore(F%," (min="+min$+")",58)
H    � max$<>"" � V>�(max$) � ok%=�:�restore(F%," (max="+max$+")",59)
  �
�
=ok%
:
� �restore_rec
 � F%
!� F%=1 � fields%
"  $Rf%(F%)=field$(F%)
#� F%
$�redraw(mainW%)
%�
&:
'� �restore(F%,E$,E%)
(� E%>=0 � �softerror(E$,E%)
)$Rf%(F%)=field$(F%)
*#�redraw_icon(mainW%,field%(F%))
+!�set_caret(mainW%,field%(F%))
,�
-:
.� �relations(menu%)
/%� F%,I%,W%,L%,N$,row%,col%,flags%
0	F%=-1
1&row%=�validate(Fieldnumber%,F%,N$)
2!col%=�(�link$(Fieldnumber%)))
3� row%>0 �
4  �delete_icons(relateW%,0)
5  � I%=0 � F%
67    � I%=col% � flags%=&0B000531 � flags%=&07000531
7    L%=�($rel%(I%))
8T    R%=�create_icon(relateW%,0,-I%*36-36,L%*16+16,32,flags%,"",rel%(I%),-1,L%+1)
9    � L%>W% � W%=L%
:
  � I%
;  $RelTitle%=N$
<  � menu% �
=    xmax%=x%-32:ymax%=y%
>	    �
?9    !block%=keypadW%:ș "Wimp_GetWindowState",,block%
@)    xmax%=block%!12+2:ymax%=block%!16
A  �
B7  !block%=relateW%:ș "Wimp_GetWindowState",,block%
C&  width%=W%*16+16:height%=F%*36+36
D+  block%!4=xmax%:block%!12=xmax%+width%
E,  block%!8=ymax%-height%:block%!16=ymax%
F  block%!28=-1
G  � menu% �
H$    ș "Wimp_OpenWindow",,block%
I/    ș "Wimp_CreateMenu",,relateW%,x%-32,y%
J	    �
K$    ș "Wimp_OpenWindow",,block%
L    �redraw(relateW%)
M  �
N  � �close_window(relateW%)
O�
P�
Q:
R� �fix_point(F$,F%)
S� F$="" �=""
T@%=&01020009+fix%(F%)*256
UF$=�(�(F$))
V@%=&90A
W=�F$,len%(F%))
X:
Y� �moveto(key%,P%,D%)
ZD%=(D%+1) � 2
[� filter% �
\#  P%=�next_match(P%,D%,Filter$)
]  �
^  P%=�neighbour(key%,P%,D%)
_.  � P%=top � � 7:P%=�neighbour(key%,P%,D%)
`�
a�display(key%,P%)
b=P%
c:
d� �next_match(P%,D%,S$)
e
� REC%
f*dbasehandle%=�($database%+".Database")
g�
h  P%=�neighbour(key%,P%,D%)
i  � P%<>top �
j     REC%=�rec_no(k$,key%,P%)
k'    �readsmarray(dbasehandle%,REC%)
l  �
m� �(S$)=� � P%=top
n � P%=top � �softerror("",38)
o�close_file(dbasehandle%)
p=P%
q:
r� �display(key%,P%)
s�check_change
t-� template%=1 � template%=2 � template%=0
u!� I%,L%,S%,S$,k$,ok%,nextrec%
vȎ P% �
w  � -1:
xP  keybase%=!keyanchor%(key%):A%=!keybase%:nextrec%=!(keybase%+A%+8+KL%(0)+1)
y  Ȏ � �
z6    � !(keybase%+A%)>0,template%=2,design%=�:ok%=�
{
    :
|    incr%=�($Increment%)
}    � incr%>0 �
~+      �change_length(RA%+incr%,�):ok%=�
      � �softerror("",2)
�	    �
�  �
�
  � ok% �
�    Ȏ � �
�:      � design%:$RecInfo%="Make adjustments to fields"
�a      � template%=2:$RecInfo%="Enter data which you want to appear by default on new records"
�"      :$RecInfo%="New record"
�	    �
�1    REC%=RA%:�read(fields%,�,REC%,$database%)
�  �
�  � top:
�/  REC%=RA%:�read(fields%,�,REC%,$database%)
�#  $RecInfo%="Subfile="+�(file%)
�.  � � filter% � � 7:$RecInfo%+=". (Empty)"
�  :
�  REC%=�rec_no(k$,key%,P%)
�&  �read(fields%,�,REC%,$database%)
�  key$(key%)=k$
�K  $RecInfo%="Subfile="+�(file%)+". Record="+�(REC%)+". Key="+key$(key%)
��
�&L%=�text_length(mainW%,starthere%)
�-� Access% � �set_caret(mainW%,starthere%)
��identify_field(starthere%)
��update_calcs(0)
�a� �selected(passW%,16) � logentry$="Subfile "+�(file%)+"  "+$Rf%(KF%(0,0))+" "+$Rf%(KF%(0,1))
��redraw(mainW%)
��
�:
�:
�G� -------------------- Icon colours -------------------------------
�:
�� �colour(key%,type%)
�$�change_field_cols(key%,type%,0)
�6� KF%(key%,1)>0 � �change_field_cols(key%,type%,1)
��
�:
�)� �change_field_cols(key%,type%,fld%)
�col%=fcol%(type%*2)
�d� type%=0 � key%>0 � (key%=0 � fcol%(0)=&17) � �set_icon_cols(mainW%,desc%(KF%(key%,fld%)),col%)
�col%=fcol%(type%*2+1)
�7col2%=�get_icon_cols(mainW%,field%(KF%(key%,fld%)))
�!� (col2% � %1111)<>fcol%(6) �
�g  � type%=0 � key%>0 � (key%=0 � fcol%(1)=&07) � �set_icon_cols(mainW%,field%(KF%(key%,fld%)),col%)
��
��
�:
�� �get_icon_cols(wi%,ic%)
�;!block%=wi%:block%!4=ic%:ș "Wimp_GetIconState",,block%
�=block%?27
�:
�"� �set_icon_cols(wi%,ic%,col%)
�D!block%=wi%:block%!4=ic%:block%!8=(col%<<24):block%!12=&FF000000
�"ș "Wimp_SetIconState",,block%
��
�:
� � �dcolour(wi%,ic%,col%,fb%)
�;!block%=wi%:block%!4=ic%:ș "Wimp_GetIconState",,block%
�Ȏ fb% �
�/  � 0:block%!8=col%<<28:block%!12=&F0000000
�/  � 1:block%!8=col%<<24:block%!12=&0F000000
��
�"ș "Wimp_SetIconState",,block%
��
�:
�� �read_colours(f$)
�	� ic%
�F=�(f$)
�� ic%=0 � 6
�  �#F,fcol%(ic%)
�	� ic%
�ncol%()=fcol%()
��close_file(F)
��
�:
�� �write_colours
�	� ic%
�F=�($database%+".Colours")
�� ic%=0 � 6
�  �#F,fcol%(ic%)
�	� ic%
��close_file(F)
��
�:
�� �find(S$,key%,m%,disp%)
� � P%,F%,H%,num%,abort%,cond$
�� � case%(key%) � S$=�u(S$)
�� �S$,1)="#" �
�  �check_change
�  REC%=�(�S$,2))
�  � REC%>=0 � REC%<RA% �
�(    �read(fields%,�,REC%,$database%)
�!    S$=key$(key%):H%=1:num%=�
�3    �select(keypadW%,25):�deselect(keypadW%,24)
�-    � �softerror(" ("+S$+")",56):abort%=�
�  �
��
�� abort% �=addr
�val$=�type(key%)
�� val$="VAL" �
�  kl%=KL%(key%)
�  �
�  P%=�S$," ")
�  � P%>0 � S$=�S$,P%-1)
�  kl%=�(S$)
��
�P%=�search(S$,key%,1+H%)
�%� P%<0 � �selected(keypadW%,25) �
�  F%=file%
�  �
�    file%=(file%+1) � 6
�    top=8*file%+LH%
�     P%=�search(S$,key%,1+H%)
�  � P%>0 � file%=F%
��
�s� val$="VAL" � cond$="VAL($(!keyanchor%(key%)+P%+8))=VAL(S$)" � cond$="LEFT$($(!keyanchor%(key%)+P%+8),kl%)=S$"
�matches%=0
�
Ȏ � �
�$  � P%>=0 � num%:RecF%=�:addr=P%
�  � P%>=0:RecF%=�
�  ȕ �(cond$)
�     P%=�neighbour(key%,P%,0)
�  �
�\  P%=�neighbour(key%,P%,1):addr=P%:� ### Scan back to FIRST match & point addr at it ###
�  ȕ �(cond$)
�    matches%+=1
�     P%=�neighbour(key%,P%,1)
�  �
�-  � num%:�softerror(" (#"+�(REC%)+")",55)
)  :� 7:flash%=KF%(key%,0):addr=�(P%)
�
F$�text(keypadW%,36)=�(matches%)+" found":�redraw_icon(keypadW%,36)
!� disp% � �display(key%,addr)
	=addr
:
� �get_it_in(filename$)
)ș "OS_File",5,filename$ � d%,,ftype%
9ftype%=(ftype%>>8) � &FFF:wi%=block%!20:ic%=block%!24
	Ȏ ftype% �

t  � &7f1:� LastTable%=MaxTabs% � �softerror(�(MaxTabs%+1),32) � �drag_table(filename$):�show_table(Tablenumber%)
'  � &7f3:�drag_selection(filename$)
#  � &7f4:�drag_query(filename$)

%  � &7f5:�drag_options(filename$)
+  � &dfe:�start_import("CSV",block%!20)
K  � &ff9,&aff:�transfer_blob(block%!20,block%!24,REC%,filename$,ftype%)

  � &fff:
/  F=�(filename$):header$=�#F:�close_file(F)
  Ȏ wi% �
    � mainW%,-1:
    Ȏ � �
(      � header$="!SCRIPT POWERBASE":
/      � present%=7:�execute_file(filename$)
K      � ic%>0:�transfer_blob(block%!20,block%!24,REC%,filename$,ftype%)
%      :�start_import("text",wi%)
    �  
&    :� customise% � �special_drop
  �
  :
  Ȏ wi% �
    � reformW%:
    Ȏ reform$ �
 1      � "Merge":�merge_files(filename$,file%)
!+      � "Reformat":�reformat(filename$)
"	    �
#
    :
$    � d%=2 �
%#      Ȏ ��leaf(filename$),1) �
&        � "!":
'3        � ### Is it an Impression document? ###
(5        ș "OS_File",5,filename$+".!DocData" � d%
)        � d%=1 �
*(          document$=�leaf(filename$)
+;          � �document$,1)="!" � document$=�document$,2)
,>          block%!0=256:block%!12=0:block%!16=5:block%!20=0
-=          block%!24=0:block%!28=0:block%!32=0:block%!36=0
.4          block%!40=&2000:$(block%+44)=filename$
//          ș "Wimp_SendMessage",18,block%,0
06          mergewith$="Impression":Impref%=block%!8
18          $MergeTitle%="Data merge with "+mergewith$
2          �
36          � ### Is it a Powerbase application? ###
46          ș "OS_File",5,filename$+".Indices" � d%
5          � d%=2 �
6'            � present%>0 � �exit(0)
7(            $Title%=�leaf(filename$)
8&            �open_files(filename$)
9          �
:
        �
;        :
<7        � ### It's an ordinary directory folder ###
=A        �transfer_blob(block%!20,block%!24,REC%,filename$,-1)
>      �
?	    �
@  �
A�
B�
C:
D� �open_files(f$)
E� I%,J%,F%,A$
F#ș "OS_File",5,f$+".Dbase" � d%
G"� d%=1 � � fatal_err%,�msg(42)
H&ș "OS_File",5,f$+".Database" � d%
I"� d%=1 � present%=present% � 4
J(ș "OS_File",5,f$+".PrimaryKey" � d%
K"� d%=1 � present%=present% � 2
L"ș "OS_File",5,f$+".Form" � d%
M"� d%=1 � present%=present% � 1
N0ș "OS_File",5,f$+".UsrSprites" � d%,,,,len%
O� d%=1 �
P5  �create_named_sliding_block(logoanchor%,len%+8)
Q&  base%=!logoanchor%:!base%=len%+4
R/  ș "OS_File",255,f$+".UsrSprites",base%+4
S  logosloaded%=�
T�
U#ș "OS_CLI","Set DBase$Dir "+f$
V$database%=f$
WȎ present% �
X1  � 0,1,5:Access%=�:Modify%=�:�resume_opening
Y  � 7:�access(f$)
Z%  :�wimp_error(�,254,0,�msg(24))
[�
\�
]:
^� �access(f$)
_� L%,P%,keybase%
`F=�(f$+".Colours")
a(� F=0 � � fatal_err%,f$+"."+�msg(18)
b
�#F=35
c �#F,S$:$Read%=�encrypt(S$,�)
d!�#F,S$:$Write%=�encrypt(S$,�)
e#�#F,S$:$Manager%=�encrypt(S$,�)
f� I%=9 � 15
g  �select(passW%,I%)
h� I%
i�deselect(passW%,16)
jI%=9
kȕ I%<17 � � �#F
l$  �#F,Z%:�set_icon(passW%,I%,Z%)
m  I%+=1
n�
o� � �#F � �#F,logpath$
p�close_file(F)
q� $Manager%="" �
r  Access%=�:Modify%=�:pw%=0
s  �resume_opening
t  �
u;  $AccessTitle%="!Powerbase opening "+�leaf($database%)
v  �open_window(accessW%)
w  $Password%=""
x  �set_caret(accessW%,0)
y&  ș "Wimp_GetWindowState",,block%
zC  ȗ ȓ block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
{  �
|  act%=0
}  �
~
    �poll
  � accessbutton%>0
�  Ȏ accessbutton% �
�#    � 2:�close_window(accessW%)
�)    present%=�:accessbutton%=0:act%=1
�    � 3:
�     password$=�u($Password%)
�    Ȏ password$ �
�6      � $Manager%:Access%=�:Modify%=�:act%=2:pw%=3
�4      � $Write%:Access%=�:Modify%=�:act%=2:pw%=2
�3      � $Read%:Access%=�:Modify%=�:act%=2:pw%=1
�      :accessbutton%=0:� 7
�1      $�text(accessW%,1)="Password not known"
�#      �dcolour(accessW%,1,11,1)
�      delay%=�+150
�      �
�        �poll
�      � �>delay%
�G      $Password%="":�redraw_icon(accessW%,0):�set_caret(accessW%,0)
�4      $�text(accessW%,1)="Type in your password"
�"      �dcolour(accessW%,1,7,1)
�	    �
�  �
�  � act%>0
�  �close_window(accessW%)
�  �getscreensize(W%,H%)
�  ȗ ȓ 0,0,W%,H%
�   � act%=2 � �resume_opening
��
��
�:
�� �resume_opening
�ș "Hourglass_On"
�&� �selected(passW%,16) � �open_log
�'ș "OS_File",5,f$+".UserFuncs" � d%
�� d%=1 � ț f$+".UserFuncs"
�(�read_colours($database%+".Colours")
�0ș "OS_File",5,f$+".PrintRes.PrintOpts" � d%
�� d%=1 �
�-  �drag_options(f$+".PrintRes.PrintOpts")
�8  � �drag_options("<Pbase$Dir>.Resources.PrintOpts")
��
�� �f$,3)="RAM" � ram%=�
�9*Set Alias$Tables Filer_OpenDir <Dbase$Dir>.ValTables
�;*Set Alias$Resources Filer_OpenDir <Dbase$Dir>.PrintRes
�;*Set Alias$JobsDone Filer_OpenDir <Dbase$Dir>.PrintJobs
��lit(menu%(0),1,�)
��lit(menu%(0),3,�)
��lit(menu%(0),4,�)
�(�lit(menu%(1),6,�selected(passW%,9))
�)�lit(menu%(3),8,�selected(passW%,15))
��lit(menu%(7),0,Access%)
��lit(menu%(7),1,Modify%)
��lit(menu%(7),2,Access%)
��lit(menu%(7),3,Access%)
��lit(menu%(7),4,Access%)
��lit(menu%(2),0,Access%)
��lit(menu%(0),2,Modify%)
��lit(menu%(10),0,Access%)
��lit(menu%(10),2,Access%)
��lit(menu%(10),3,Access%)
��lit(menu%(13),0,Access%)
��lit(menu%(17),0,Modify%)
�'�lit(menu%(3),0,((present% � 4)>0))
�'�lit(menu%(9),1,((present% � 4)=0))
�� I%=1 � 6
�$  �lit(menu%(3),I%,(present%=7))
�� I%
��limit_actions(Access%)
�� present%<4 � design%=�
� � present%=5 � �adjust_on(�)
��lit(menu%(9),5,�)
�fields%=�get_form(Fptr%)
�� fields%>0 �
�%  starthere%=field%(�first_field)
�%  �field_menu(fieldmenu%,fields%)
�9  �create_named_sliding_block(transanchor%,Length%+1)
��
�.� � adjust% � �lit(menu%(9),2,(fields%>0))
��load_calcs
�Ȏ present% �
�
  � 0:
�-  $RecInfo%="No record design exists yet"
�  � I%=1 � 4
�    �lit(menu%(9),I%,�)
�
  � I%
�  �open_window(mainW%)
�  � !formanchor%=0 �
�2    �extend_named_sliding_block(formanchor%,0)
�    Fptr%=!formanchor%
�     fields%=0:Fieldnumber%=0
�  �
�
  � 1:
�8  $RecInfo%="Record design exists, but no datafiles"
�  � �first_field>0 �
�    �lit(menu%(9),3,�)
�    �lit(menu%(9),4,�)
�  �
�  �open_window(mainW%)
�
  � 5:
�6  $RecInfo%="No primary key index file exists yet"
�6  ș "OS_File",5,$database%+".Database" � ,,,,len%
�-  RA%=(len% � Length%)-1:$Records%=�(RA%)
�-  � �first_field>0 � �open_window(mainW%)
�
  � 7:
�+  �lit(menu%(1),7,�selected(passW%,13))
�+  �lit(menu%(1),8,�selected(passW%,13))
�+  �lit(menu%(1),2,�selected(passW%,14))
�6  ș "OS_File",5,$database%+".Database" � ,,,,len%
�-  RA%=(len% � Length%)-1:$Records%=�(RA%)
�-  �open_index($database%+".PrimaryKey",0)
�$  key%=0:file%=0:top=8*file%+LH%
�  �set_keydata(key%)
�l  keybase%=!keyanchor%(0):� keybase%!4<=100 � keybase%!4>0 � $Increment%=�(keybase%!4) � $Increment%="0"
�,  f$=$database%+".Indices":R4%=0:Keys%=0
�  ȕ R4%<>-1
�    Keys%+=1
�5    ș "OS_GBPB",9,f$,block%,1,R4%,11 � ,,K$,,R4%
�A    � R4%<>-1 � �open_index(f$+"."+K$,Keys%):�colour(Keys%,2)
�  �
�  Keys%-=1
�4  � extrakeys$<>"" � �softerror(�extrakeys$),96)
�  �colour(0,0):�colour(0,1)
�  �get_tables
�  key%=0
�  �count(key%,RU%)
�  �joke
�  �show_windows
��
�ș "Hourglass_Off"
$dbase%=�$Title%,2)
�redraw_icon(-2,pbaseicon%)
f$=$database%+".Choices"
ș "OS_File",5,f$ � d%
� d%=1 � �get_choices(f$)
-ș "OS_File",5,$database%+".Special" � d%
0� d%=1 � ț $database%+".Special":�customise
�
:
	� �joke

S$=$�val(keypadW%,17)
*� ��$,5,6)="01 Apr" � ��$,17,2)<"12" �
!  S$="Stoilet"+�$block%!32,8)

#  � S$="Sdelete"+�$block%!32,8)
�
$�val(keypadW%,17)=S$
�
:
� �get_choices(f$)
� F,S$,C$,P%
F=�(f$)
�
2  S$=�#F:P%=�S$," "):C$=�S$,P%+1):S$=�S$,P%-1)

  Ȏ S$ �
D    � "Validate":validate%=(C$="ON"):�tick(menu%(2),3,validate%)
G    � "Relations":relations%=(C$="ON"):�tick(menu%(2),4,relations%)
B    � "Warning":delwarn%=(C$="ON"):�tick(menu%(10),7,delwarn%)
    � "Autosave":
    Ȏ �C$,4) �
.      � "OFF ":mode%=0:$Interval%="10 min"
,      � "WARN":mode%=1:$Interval%=�C$,5)
,      � "AUTO":mode%=2:$Interval%=�C$,5)
 	    �
!    �set_auto(mode%)
"    � "Autobalance":
#    Ȏ �C$,4) �
$&      � "OFF ":�set_autobalance(�)
%5      � "AUTO":$Every%=�C$,5):�set_autobalance(�)
&	    �
'    � "Separator":
(    $Delim%=""
)    Ȏ C$ �
*!      � "Comma":sep$=",":P%=0
+       � "TAB":sep$=�(9):P%=1
,       � "CR":sep$=�(13):P%=2
-       � "LF":sep$=�(10):P%=3
.#       $Delim%=C$:sep$=C$:P%=4
/	    �
0#    �tick_one(menu%(15),0,3,P%)
12    $�text(csvW%,14)=C$:�redraw_icon(csvW%,14)
2    � "Terminator":
3    $Termin%=""
4    Ȏ C$ �
5!      � "CR":term$=�(13):P%=0
6!      � "LF":term$=�(10):P%=1
7*      � "CR LF":term$=�(13)+�(10):P%=2
8*      � "LF CR":term$=�(10)+�(13):P%=3
9*      � "CR CR":term$=�(13)+�(13):P%=4
:*      � "LF LF":term$=�(10)+�(10):P%=5
;&      : $Termin%=C$:term$=C$:P%=6
<	    �
=#    �tick_one(menu%(20),0,5,P%)
>2    $�text(csvW%,15)=C$:�redraw_icon(csvW%,15)
?-    � "Quotes":�set_icon(csvW%,0,C$="ON")
@-    � "Header":�set_icon(csvW%,1,C$="ON")
A-    � "Blanks":�set_icon(csvW%,2,C$="ON")
B*    � "Key":�set_icon(csvW%,3,C$="ON")
CB    � "Data":�set_icon(csvW%,4,(C$="ON" � �selected(csvW%,1)))
D/    � "Display":�set_icon(csvW%,11,C$="ON")
E-    � "Strip":�set_icon(csvW%,16,C$="ON")
F    � "CaseSpecific":
G'    �set_icon(matchW%,16,(C$="ON"))
H(    �set_icon(savesubW%,5,(C$="ON"))
I'    �set_icon(changeW%,5,(C$="ON"))
J%    �set_icon(moveW%,9,(C$="ON"))
K'    �set_icon(mergeW%,12,(C$="ON"))
L(    �set_icon(keypadW%,32,(C$="ON"))
M    � "Duplication":
N-    dup%=(C$="ON"):�tick(menu%(3),8,dup%)
O  �
P	� �#F
Q.�icon_bit(22,csvW%,4,(�selected(csvW%,1)))
R�close_file(F)
S�
T:
U� �save_choices(f$)
V
� F,C$
WF=�(f$)
X&� validate%=� � C$="ON" � C$="OFF"
Y�#F,"Validate "+C$
Z'� relations%=� � C$="ON" � C$="OFF"
[�#F,"Relations "+C$
\%� delwarn%=� � C$="ON" � C$="OFF"
]�#F,"Warning "+C$
^Ȏ autosave% �
_  � 0:C$="OFF "
`  � 1:C$="WARN"+$Interval%
a  � 2:C$="AUTO"+$Interval%
b�
c�#F,"Autosave "+C$
dȎ autobalance% �
e  � 0:C$="OFF "
f  � 1:C$="AUTO"+$Every%
g�
h�#F,"Autobalance "+C$
i-� �selected(csvW%,0) � C$="ON" � C$="OFF"
j�#F,"Quotes "+C$
k-� �selected(csvW%,1) � C$="ON" � C$="OFF"
l�#F,"Header "+C$
m-� �selected(csvW%,2) � C$="ON" � C$="OFF"
n�#F,"Blanks "+C$
o-� �selected(csvW%,3) � C$="ON" � C$="OFF"
p�#F,"Key "+C$
q-� �selected(csvW%,4) � C$="ON" � C$="OFF"
r�#F,"Data "+C$
s
Ȏ sep$ �
t  � ",":C$="Comma"
u  � �(9):C$="TAB"
v  � �(10):C$="LF"
w  � �(13):C$="CR"
x  :C$=sep$
y�
z�#F,"Separator "+C$
{Ȏ term$ �
|  � �(13):C$="CR"
}  � �(10):C$="LF"
~  � �(13)+�(10):C$="CR LF"
  � �(10)+�(13):C$="LF CR"
�  � �(13)+�(13):C$="CR CR"
�  � �(10)+�(10):C$="LF LF"
�  :C$=term$
��
��#F,"Terminator "+C$
�.� �selected(csvW%,11) � C$="ON" � C$="OFF"
��#F,"Display "+C$
�.� �selected(csvW%,16) � C$="ON" � C$="OFF"
��#F,"Strip "+C$
�
Ȏ � �
��  � �selected(matchW%,16),�selected(savesubW%,5),�selected(changeW%,5),�selected(moveW%,9),�selected(mergeW%,12),�selected(keypadW%,32):C$="ON"
�  :C$="OFF"
��
��#F,"CaseSpecific "+C$
�� dup% � C$="ON" � C$="OFF"
��#F,"Duplication "+C$
��close_file(F)
�ș "OS_File",18,f$,&fff
��
�:
�� �open_index(f$,key%)
�� keybase%,I%
�:� key%>MaxKeys% � extrakeys$+=�leaf(f$)+",":Keys%-=1:�
�?� keyanchor%(key%) � �scrap_sliding_block(keyanchor%(key%))
� ș "OS_File",5,f$ � ,,,,len%
�6�create_named_sliding_block(keyanchor%(key%),len%)
�)ș "OS_File",255,f$,!keyanchor%(key%)
�Index$(key%)=�leaf(f$)
�keybase%=!keyanchor%(key%)
�� key%=0 �
�  � I%=0 � 5
�%    $Date%(I%)=$(keybase%+8+9*I%)
�
  � I%
��
�KF%(key%,0)=keybase%!62
�KF%(key%,1)=keybase%!66
�KL%(key%)=keybase%?70
�!case%(key%)=(keybase%?71=255)
�� I%=0 � 3
�&  KW%(key%,I%)=!(keybase%+74+I%*4)
�� I%
��
�:
�� �get_tables
�� lk,F%,d%,R4%,f$,name$
�$f$=$database%+".ValTables":R4%=0
�,ș "OS_File",5,$database%+".Tables" � d%
�"� d%=2 � � fatal_err%,�msg(18)
�� �
�/� � �:�close_file(lk):�wimp_error(�,�,�,�$)
�lk=�($database%+".Link")
�� lk>0 �
�  !block%=mainW%
�  ȕ � �#lk
�
    F%+=1
�    �#lk,link$(F%)
�    name$=�link$(F%))
�    � �name$,1)<>"@" �
�      � name$<>"" �
�+        � �(name$)<58 � name$=�name$,2)
�6        �set_icon_cols(mainW%,field%(F%),fcol%(6))
�.        � d%=0 � �drag_table(f$+"."+name$)
�      �
�	    �
�  �
�  link$(0)="LOADED"
�  �close_file(lk)
��
�:� ### Force loading of unlinked but flagged tables ###
�ȕ R4%<>-1
�6  ș "OS_GBPB",9,f$,block%,1,R4%,11 � ,,name$,,R4%
�;  � R4%<>-1 � � �name$)="!" � �drag_table(f$+"."+name$)
��
�� �
�2� extratabs$<>"" � �softerror(�extratabs$),97)
��
�:
�� �load_calcs
�� F%,F1%,P%,calc$
�update$()=""
�cl=�($database%+".Calc")
�� cl>0 �
�  ȕ � �#cl
�+    F%+=1:F$=�~(F%):� F%<16 � F$="0"+F$
�"    �#cl,calc$:calc$(F%)=calc$
�    Ȏ chartype%(F%) �
�      � 6,7:
�      �
�!        P%=�calc$,"$Rf%(",P%)
�?        � P%>0 � F1%=�(�calc$,P%+5)):update$(F1%)+=F$:P%+=5
�      � P%=0
�      �
�         P%=�calc$,"FNn(",P%)
�?        � P%>0 � F1%=�(�calc$,P%+4)):update$(F1%)+=F$:P%+=4
�      � P%=0
�.      � �calc$,"TIME$")>0 � update$(0)+=F$
�	    �
�  �
�  calc$(0)="LOADED"
�  �close_file(cl)
��
��
�:
�� �get_form(� Fptr%)
�+� F,L%,N%,I%,V%,x%,y%,xlim%,ylim%,text%
�buttonfield%()=0
�r� design% � dflg%=(winback%<<28)+&7016731:dval%=hand%:func%=1 � dflg%=(winback%<<28)+&7010731:dval%=-1:func%=0
�F=�($database%+".Form")
�� F>0 �
�  �#F,N%
�&  � N%>127 � � fatal_err%,�msg(98)
�2  formlen%=&100:forminc%=formlen%:form_incs%=0
�7  �extend_named_sliding_block(formanchor%,formlen%)
�9  Fptr%=!formanchor%:Rf%(0)=Fptr%:$Rf%(0)="":Fptr%+=1
�  Length%=0
�  � I%=1 � N%
�@    �#F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%,char%,fix%,bbox%
�    Ȏ � �
�/      � bbox%=0 � len%=0:width%=0:height%=0
�0      � bbox%=0:width%=len%*16+16:height%=48
�6      � bbox%<&10000:width%=bbox%*16+16:height%=48
�2      :width%=bbox% � &FFFF:height%=bbox%>>16
�	    �
�    � design% �
�      Ȏ char% �
�1        � 0,1,2,3,4,5,6,7,8,39,40:fval%=hand%
�"        :fval%=hvalid%(char%)
�      �
      �
      Ȏ � �
=        � char%>8 � char%<32:fval%=�val(keypadW%,char%-9)
!        :fval%=valid%(char%)
      �
	    �
"    x%=xf%+width%+32:y%=yf%-16
    � x%>xlim% � xlim%=x%
    � y%<ylim% � ylim%=y%
	'    y%=yd%-16:� y%<ylim% � ylim%=y%

    Length%+=len%+1
F    � design%=� � char%=39 � len%=(height% � 40)*((width% � 16)-4)
7    len%(I%)=len%:chartype%(I%)=char%:fix%(I%)=fix%

    L%=�(Desc$)
1    � Fptr%-!formanchor%+L%+len%+2>formlen% �
*      form_incs%+=1:formlen%+=forminc%
;      �extend_named_sliding_block(formanchor%,formlen%)
	    �
    $Fptr%=Desc$
Q    desc%(I%)=�create_icon(mainW%,xd%,yd%,L%*16+8,48,dflg%,"",Fptr%,dval%,L%)
-    Fptr%+=L%+1:Rf%(I%)=Fptr%:$Rf%(I%)=""
0    �icon_design(char%,func%,width%,height%)
T    � char%=59 � � design% � $Fptr%=Tag$(I%):len%=�(Tag$(I%)):fval%=!logoanchor%
\    field%(I%)=�create_icon(mainW%,xf%,yf%,width%,height%,iflags%,"",Fptr%,fval%,len%+1)
    Ȏ char% �
h      � 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:buttonfield%(char%-9)=I%
6      � 40:Rf%(I%)=�create_anchor("Picture"+�(I%))
?      � 3,6,46,47,54,56,57:�icon_bit(9,mainW%,field%(I%),�)
	    �
    Fptr%+=len%+1

  � I%
  �close_file(F)
 O  �extend_named_sliding_block(formanchor%,Fptr%-!formanchor%):form_incs%+=1
!  �setup_select(N%)
"  � N%=0
#�
$/� (present% � 4)=0 � xlim%=1279:ylim%=-1023
%!block%=0:block%!4=ylim%
&block%!8=xlim%:block%!12=0
'%ș "Wimp_SetExtent",mainW%,block%
(!block%=mainW%
)$ș "Wimp_GetWindowState",,block%
*block%!4=0
+4� ylim%>-840 � block%!8=900+ylim% � block%!8=184
,3� xlim%<1240 � block%!12=xlim% � block%!12=1240
-block%!16=900
. ș "Wimp_OpenWindow",,block%
/=N%
0:
1� �setup_select(fields%)
2� S$,I%,J%,Fptr%,rows%
3&selectlen%=&200:selinc%=selectlen%
46�create_named_sliding_block(selanchor%,selectlen%)
5Fptr%=!selanchor%
6� I%=1 � fields%
7*  � Fptr%-!selanchor%+144>selectlen% �
8    selectlen%+=selinc%
9:    �extend_named_sliding_block(selanchor%,selectlen%)
:  �
;  Ȏ chartype%(I%) �
<    � 3,6,8,46,47,54,56,57:
=#    rows%+=1:�lit(menu%(6),6,�)
>W    handle%=�create_icon(pselectW%,16,-rows%*48-56,240,48,&17000531,"",Fptr%,-1,15)
?#    S$=$�text(mainW%,desc%(I%))
@7    � �(S$)>8 � S$=�S$,8)+"  " � S$+=�10-�(S$)," ")
A-    $Fptr%=S$+Tag$(I%):Fptr%+=�($Fptr%)+1
B    � J%=0 � 3
Cb      handle%=�create_icon(pselectW%,278+J%*112,-rows%*48-52,44,44,&0740B13B,"",Fptr%,tick%,1)
D      $Fptr%="":Fptr%+=1
E    � J%
F    calcrow%?I%=rows%
G    :calcrow%?I%=0
H  �
I� I%
J#!block%=0:block%!4=-rows%*48-56
Kblock%!8=700:block%!12=0
L(ș "Wimp_SetExtent",pselectW%,block%
M�
N:
O� �enable_row(R%,on%)
P� I%
Q� R%>0 �
R  � I%=R%*5-3 � R%*5
S&    �icon_bit(22,pselectW%,I%,on%)
T
  � I%
U�
V�
W:
X� �save_form(f$)
Y,� F,I%,xd%,yd%,xf%,yf%,w%,h%,bbox%,type%
Z� fields%=0 � �
[
Length%=0
\!block%=mainW%
]F=�(f$)
^�#F,fields%
_� I%=1 � fields%
`(  dicon%=desc%(I%):ficon%=field%(I%)
a4  block%!4=dicon%:ș "Wimp_GetIconState",,block%
b   xd%=block%!8:yd%=block%!12
c  Desc$=$(block%!28)
d4  block%!4=ficon%:ș "Wimp_GetIconState",,block%
e   xf%=block%!8:yf%=block%!12
f2  w%=block%!16-block%!8:h%=block%!20-block%!12
g  bbox%=(h%<<16)+w%
hN  �#F,Desc$,Tag$(I%),xd%,yd%,xf%,yf%,len%(I%),chartype%(I%),fix%(I%),bbox%
i  Length%+=len%(I%)+1
jA  field$(I%)="":� Rf%(I%)>0 � chartype%(I%)<>40 � $Rf%(I%)=""
k� I%
l�close_file(F)
mș "OS_File",18,f$,&7f2
n�lit(menu%(0),3,�)
o�lit(menu%(0),4,�)
p�
q:
r$� �make_empty_index(RA%,key%,Z%)
s� I%,K%,P%,KLM%,S$
tș "Hourglass_On"
uS$=�KL%(key%),".")
vKLM%=KL%(key%)+13
wP%=LH%+48+(RA%+1)*KLM%
x;� Z% � �create_named_sliding_block(keyanchor%(key%),P%)
ykeybase%=!keyanchor%(key%)
zkeybase%!0=138
{keybase%!4=�($Increment%)
|$date%=�6,�(1)):�date(key%)
}keybase%!62=KF%(key%,0)
~keybase%!66=KF%(key%,1)
keybase%?70=KL%(key%)
�#keybase%?71=�selected(keyW%,20)
�keybase%?72=0:keybase%?73=0
�� I%=0 � 3
�(  !(keybase%+74+(I%*4))=KW%(key%,I%)
�� I%
�� I%=0 � 5
�  P%=I%*8+LH%
�  !(keybase%+P%)=-P%
�  !(keybase%+P%+4)=P%
�� I%
�P%=!keybase%
�� I%=0 � RA%-1
�.  ș "Hourglass_Percentage",(I%*100) � RA%
�  !(keybase%+P%)=P%+KLM%
�  !(keybase%+P%+4)=0
�  $(keybase%+P%+8)=S$
�#  !(keybase%+P%+KL%(key%)+9)=I%
�  P%+=KLM%
�� I%
�!(keybase%+P%)=0
�!(keybase%+P%+4)=0
�$(keybase%+P%+8)=S$
� !(keybase%+P%+KL%(key%)+9)=0
�ș "Hourglass_Off"
��
�:
�� �save_recs(f$,RA%)
�� dbasehandle%,I%,J%,rec$
�rec$=�fields%-1,�(10))
�ș "Hourglass_On"
�dbasehandle%=�(f$)
�� I%=0 � RA%
�  �#dbasehandle%=I%*Length%
�  �#dbasehandle%,rec$
�.  ș "Hourglass_Percentage",(I%*100) � RA%
�� I%
�"�#dbasehandle%=(RA%+1)*Length%
��close_file(dbasehandle%)
�ș "OS_File",18,f$,&7f2
�ș "Hourglass_Off"
��
�:
�� �clear
�� REC%,action$,ex%,ptr%
�8Search$=�parse($�text(moveW%,7),�selected(moveW%,9))
�9ș "Wimp_WhichIcon",moveW%,block%,&003F0000,&00210000
�movetype%=!block%-1
�)P%=�Title$,". ")+2:Title$=�Title$,P%)
�H� Title$<>"All records" � Title$=" when "+Title$ � Title$=" "+Title$
�9action$=�"Move �DeleteMove �",movetype%*6+7,6)+Title$
�� � �confirm(action$) � �
�ș "Hourglass_On"
�*dbasehandle%=�($database%+".Database")
��earmark
��close_file(dbasehandle%)
�ptr%=!tempanchor%
�%subtotal%=�count_recs(key%,zero%)
�� REC%=0 � RA%-1
�<  ex%+=1:ș "Hourglass_Percentage",(ex%*100) � subtotal%
�  � ptr%?REC%=255 �
�(    �read(fields%,�,REC%,$database%)
�%    addr=�shift(movetype%,key%,0)
�  �
�
� REC%
�%�scrap_sliding_block(tempanchor%)
�ș "Hourglass_Off"
�ș "Wimp_CreateMenu",,-1
�addr=�moveto(key%,top,1)
��
�:
�� �export_subset(f$)
�M� I%,F,R%,recs%,ptr%,count%,subtotal%,blobs%,ex%,Z%,len%,source$,dest$,O$
�;ș "OS_CLI","Copy "+$database%+".Form "+f$+".Form ~C~V"
�Q� link$(0)="LOADED" � ș "OS_CLI","Copy "+$database%+".Link "+f$+".Link ~C~V"
�Q� calc$(0)="LOADED" � ș "OS_CLI","Copy "+$database%+".Calc "+f$+".Calc ~C~V"
�Fș "OS_CLI","Copy "+$database%+".ValTables "+f$+".Valtables ~C~VR"
�Bș "OS_CLI","Copy "+$database%+".Colours "+f$+".Colours ~CF~V"
�/ș "OS_File",5,$database%+".UserFuncs" � d%
�O� d%=1 � ș "OS_CLI","Copy "+$database%+".UserFuncs "+f$+".UserFuncs ~CF~V"
�0ș "OS_File",5,$database%+".UsrSprites" � d%
�Q� d%=1 � ș "OS_CLI","Copy "+$database%+".UsrSprites "+f$+".UsrSprites ~CF~V"
�ș "Hourglass_On"
�"blobs%=�find_blobs($database%)
�>Search$=�parse($�text(savesubW%,0),�selected(savesubW%,5))
�*dbasehandle%=�($database%+".Database")
��earmark
�F=�(f$+".Database")
�ptr%=!tempanchor%
�%subtotal%=�count_recs(key%,zero%)
�� I%=0 � RA%-1
�  � ptr%?I%=255 �
�    ex%=-1
�    ȕ ex%<blobs%
�      ex%+=1:F%=Ext%(ex%)
�@      �copy_blob($database%,f$,I%,recs%,F%,F%,chartype%(F%))
�	    �
�<    �readsmarray(dbasehandle%,I%):�writesmarray(F,recs%)
�    count%+=1
�:    ș "Hourglass_Percentage",(count%*100) � subtotal%
�  �
�� I%
�%�scrap_sliding_block(tempanchor%)
�=F$()="":�writesmarray(F,recs%):�#F=Length%*recs%:recs%-=1
�� K%=0 � Keys%
�,  KL%(MaxKeys%+1)=KL%(K%):val$=�type(K%)
�!  KF%(MaxKeys%+1,0)=KF%(K%,0)
�!  KF%(MaxKeys%+1,1)=KF%(K%,1)
�  � I%=0 � 3
�%    KW%(MaxKeys%+1,I%)=KW%(K%,I%)
�
  � I%
�+  �make_empty_index(recs%,MaxKeys%+1,�)
�  � I%=0 � recs%-1
�    �readsmarray(F,I%)
�    KEY$=�key2(K%,1)
�"    �insert(�,KEY$,MaxKeys%+1)
�2    ș "Hourglass_Percentage",(I%*100) � recs%
�
  � I%
�&  keybase%=!keyanchor%(MaxKeys%+1)
�\  ș "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(MaxKeys%+1) � ,,filelength%
�,  � K%>0 � index$="Indices." � index$=""
�R  ș "OS_File",10,f$+"."+index$+Index$(K%),&7f0,,keybase%,keybase%+filelength%
�2  �scrap_sliding_block(keyanchor%(MaxKeys%+1))
�� K%
��close_file(F)
��close_file(dbasehandle%)
�'ș "OS_File",18,f$+".Database",&7f2
�
export%=�
�ș "Hourglass_Off"
�
:
� �find_blobs(f$)
� N%,R4%,S$
	N%=-1
ȕ R4%<>-1
3  ș "OS_GBPB",9,f$,block%,1,R4%,11 � ,,S$,,R4%
  Ȏ �S$,4) �
)    � "Memo":N%+=1:Ext%(N%)=�(�S$,5))
	)    � "Draw":N%+=1:Ext%(N%)=�(�S$,5))

)    � "Spri":N%+=1:Ext%(N%)=�(�S$,7))
  �
�

=N%
:
� �earmark
� I%,P%
5� tempanchor% � �scrap_sliding_block(tempanchor%)
0�create_named_sliding_block(tempanchor%,RA%)
ptr%=!tempanchor%
� I%=0 � RA%-1
  ptr%?I%=0
� I%
P%=�neighbour(key%,top,1)
 �scan_file("P%<>top",key%,2)
�
:

� �rotate
� � Access% � �
� �confirm(�msg(49))=� � �
� keybase%
� I%,L%,Z%,Q%,R%,S%,key%
 � key%=0 � Keys%
!   keybase%=!keyanchor%(key%)
"  S%=LH%+40
#  Z%=keybase%!S%
$  � I%=S%-8 � S%-40 �-8
%)    L%=keybase%!I%:R%=keybase%!(I%+4)
&=    � L%>0 � keybase%!(I%+8)=L% � keybase%!(I%+8)=-(I%+8)
'
  � I%
(>  � Z%>0 � keybase%!(S%-40)=Z% � keybase%!(S%-40)=-(S%-40)
)  � I%=S%-40 � S% � 8
*    Q%=I%-8
+    � Q%=S%-48 � Q%=S%
,!    PR%=�neighbour(key%,I%,0)
-!    SU%=�neighbour(key%,I%,1)
.'    � PR%>S% � keybase%!(PR%+4)=-I%
/#    � SU%>S% � keybase%!SU%=-I%
0
  � I%
1
� key%
2$date%=�6,�(1))
3warn%=�
4�
5:
6� �create_index
7� indexing% � printing% � �
80� Keys%=MaxKeys% � �softerror(�(Keys%),95):�
97� file%,top,P%,KEY$,REC%,val$,zero%,abort%,replace%
:
newkey%=0
;;f$=Tag$(Keyfld0%):� Keyfld1%>0 � f$+="+"+Tag$(Keyfld1%)
<�
=  newkey%+=1
>(� Index$(newkey%)=f$ � newkey%>Keys%
?
Ȏ � �
@  � newkey%<=Keys%:
A     � �confirm(�msg(50))=� �
B3      �scrap_sliding_block(keyanchor%(newkey%))
C      replace%=�
D      � abort%=�
E	    �
F:  � Keys%>MaxKeys%:Keys%-=1:�softerror("",31):abort%=�
G  :Keys%=newkey%
H�
I� abort% � �
J*block%!8=0:block%!12=keyW%:block%!16=7
K%ș "Interface_SlabButton",,block%
L�copy_keydata(newkey%)
MIndex$(newkey%)=f$
N-f$=$database%+".Indices."+Index$(newkey%)
O$�make_empty_index(RA%,newkey%,�)
P�lit(menu%(0),2,�)
Q�limit_actions(�)
R� �
S � � �:� �:�abort_index(f$):�
T*dbasehandle%=�($database%+".Database")
Uindexing%=�
V�update_stats
W� file%=0 � 5
X  top=file%*8+LH%
Y  P%=�neighbour(key%,top,1)
Z  val$=�type(newkey%)
[  ș "Hourglass_On"
\"  �scan_file("P%<>top",key%,4)
]� file%
^�end_index
_�colour(newkey%,2)
`warn%=�
a� �
bM� �selected(passW%,16) � �#loghandle%,"Index "+Index$(newkey%)+" created"
c�
d:
e� �abort_index(f$)
f�end_index
g� replace% �
h  �open_index(f$,newkey%)
i  �
j  � index%=newkey% � Keys%
k)    Index$(newkey%)=Index$(newkey%+1)
l  � index%
m/  �scrap_sliding_block(keyanchor%(newkey%))
n  Keys%-=1
o  newkey%=0
p�
q� �=17 �
r  �softerror("",43)
s  � �wimp_error(�,�,�,�$)
t�
u�
v:
w� �end_index
xș "Hourglass_Smash"
yindexing%=�
z�limit_actions(Access%)
{ș "Wimp_CreateMenu",,-1
|�lit(menu%(0),2,Modify%)
}�close_file(dbasehandle%)
~�
:
�� �shift(t%,k%,m%)
�� a%,key%,fi%,I%,F$
�� � Access% �=addr
�� REC%=RA% �=addr
�1� t%=0 � m%=1 � � �confirm(�msg(51))=� �=addr
�� key%=0 � Keys%
�2  N$=�key(key%):kl%=KL%(key%):val$=�type(key%)
�  �delete(N$,key%)
�  � N$="*Failed*" �=addr
�  � key%=k% � a%=SU%
�   � t%=1 � fi%=(file%+1) � 6
�)  � t%=-1 � fi%=(file%-1-6*(file%=0))
�  top=8*fi%+LH%
�
  Ȏ t% �
�    � 0:
�    � I%=1 � fields%
�      V%=chartype%(I%)
�      Ȏ V% �
�        � 36,39:
�R        � �blob_path(�,$database%,REC%,I%,V%,F$)>=0 �:ș "OS_CLI","Delete "+F$
�        � 9,37:
�R        � �blob_path(�,$database%,REC%,I%,V%,F$)>=0 �:ș "OS_CLI","Delete "+F$
�        � 38:
�R        � �blob_path(�,$database%,REC%,I%,V%,F$)>=0 �:ș "OS_CLI","Delete "+F$
�      �
�    � I%
�
    :
�8    �insert(�,N$,key%):date%?fi%=1:$Date%(fi%)=�date
�  �
�  top=8*file%+LH%
�  date%?file%=1
�  $Date%(file%)=�date
�
� key%
�� �selected(passW%,16) �
�  � t%=0 �
�)    �#loghandle%,logentry$+" Deleted"
�8    � �#loghandle%,logentry$+" ===> subfile "+�(fi%)
�  �
��
�warn%=�
�=a%
�:
�� �type(key%)
�� F%,V$
�)� key%>=0 � F%=KF%(key%,0) � F%=-key%
�Ȏ chartype%(F%) �
�#  � 3,6,46,47,54,56,57:V$="VAL"
��
�=V$
�:
�� �confirm(string$)
�!block%=255
�$(block%+4)=string$
�]ș "Wimp_ReportError",block%,(1<<0)+(1<<1)+(1<<4),"Powerbase: please confirm:" � ,result%
�=result%=1
�:
�,� �getscreensize(� S_Width%,� S_Height%)
�� H1%,V1%,H2%,V2%,End%
�$H1%=0:V1%=4:H2%=8:V2%=12:End%=16
�9Mi%!H1%=4:Mi%!V1%=5:Mi%!H2%=11:Mi%!V2%=12:Mi%!End%=-1
�$ș "OS_ReadVduVariables",Mi%,Mo%
�)S_Width%=(1<<(Mo%!H1%))*((Mo%!H2%)+1)
�*S_Height%=(1<<(Mo%!V1%))*((Mo%!V2%)+1)
��
�:
�� �match
��check_change
�&� � common% � $�text(matchW%,0)=""
��redraw_icon(matchW%,0)
��open_window(matchW%)
��set_caret(matchW%,0)
�&$�text(matchW%,3)=Tag$(Match_tag%)
�2�tick_one(fieldmenu%,0,fields%-1,Match_tag%-1)
��redraw_icon(matchW%,3)
�$�text(matchW%,14)=""
��redraw_icon(matchW%,14)
�a� �selected(matchW%,27) � $�text(matchW%,25)="Number found" � $�text(matchW%,25)="Time taken"
��redraw_icon(matchW%,25)
�"fieldfunc$="match":matching%=�
��
�:
�I� List printing -----------------------------------------------------
�:
�� �print_this
�%f$=$database%+".PrintRes.Default"
�ș "OS_File",5,f$ � d%
� � d%=1 � �drag_selection(f$)
�!old%=�selected_esg(printW%,3)
��deselect(printW%,old%)
��select(printW%,24)
��mouse(0,0,4,matchW%,24)
��clear_selection
��deselect(printW%,24)
��select(printW%,old%)
��
�:
� � �do_it(Search$,displayed%)
�� printing% � �
�� zero%,P%,rec%
�� �
�Form$=printorder$
�� Form$="" �
�  � W%=0 � 1
�    � KF%(0,W%)>0 �
�:      F$=�~(KF%(0,W%)):� �(F$)=1 � F$="0"+F$:Form$+=F$
�}      � � �selected(matchW%,27) � �select(mainW%,field%(KF%(0,W%))):printorder$+=F$:�lit(menu%(6),7,�):�lit(menu%(6),8,�)
�	    �
�
  � W%
��
�#Heading$="":Hlongest%=0:Sum()=0
�+Count%=0:examined%=0:printed%=0:sums%=0
��read_print_options
�N� �selected(printW%,40) � �find_max_lengths(displayed%) � maxlen%()=len%()
�LenLine%=�include_fields
�,numfirst%=�margin_warn:� numfirst%<0 � �
��list_head(0)
�$ș "Wimp_GetPointerInfo",,block%
��limit_actions(�)
��lit(menu%(0),2,0)
�printing%=�
�&ș "OS_ReadMonotonicTime" � stime%
�� � �:� �:�abort_printing:�
�*dbasehandle%=�($database%+".Database")
�ș "Hourglass_On"
�
Ȏ � �
�  � displayed%:
�%  �readsmarray(dbasehandle%,REC%)
�  �print_record(REC%)
-  � usekey%=-1 � �selected(matchW%,23)=�:
<  P%=�neighbour(key%,top,1):�scan_file("P%<>top",key%,1)
  :
#  P%=�search(useval$,usekey%,1)
I  � P%>=0 � k$=useval$:�scan_file("P%<>top AND k$=useval$",usekey%,1)
�
� �
�end_printing
�
	:

� �abort_printing
�end_printing
� �=17 �

  �softerror("",29)
  � �wimp_error(�,�,�,�$)
�
�
:
� �end_printing
� time%
2� format$="label" � thislab%>0 � �print_labels
&ș "OS_ReadMonotonicTime" � etime%
time%=etime%-stime%
z� �selected(matchW%,27) � $�text(matchW%,14)=�(printed%) � $�text(matchW%,14)=�(time% � 100)+"."+�(time% � 100)+" sec"
�redraw_icon(matchW%,14)
ș "Hourglass_Smash"
3� format$<>"label" � displayed%=� � �total_list
Ȏ reportdest$ �
  � "Window":
@  � (� scripton%) � (� �selected(matchW%,27)) � �screen_list
>  �extend_named_sliding_block(textanchor%,Count%*LenLine%)
  � "File":
 6  �close_file(texthandle%):ș "OS_File",18,f$,&fff
!  �close_window(saveW%)
"  � "Printer":
#@  �extend_named_sliding_block(textanchor%,Count%*LenLine%+1)
$B  Start%=!textanchor%:End%=Start%+Count%*LenLine%+1:Type%=&fff
%)  $Start%=pitch$:?(End%-1)=0:?End%=12
&;  block%!0=256:block%!12=0:block%!16=&80142:block%!20=0
'D  block%!24=0:block%!28=0:block%!32=0:block%!36=0:block%!40=&fff
(  $(block%+44)="List"
)'  ș "Wimp_SendMessage",18,block%,0
*�
+)printing%=�:scripton%=�:savetofile%=�
,�lit(menu%(0),2,Modify%)
-�limit_actions(Access%)
.�close_file(dbasehandle%)
/�
0:
1#� �find_max_lengths(displayed%)
2� P%,k$
3� �
4� � �:� �:�end_find_max:�
5maxlen%()=0
6*dbasehandle%=�($database%+".Database")
7ș "Hourglass_On"
8ș "Hourglass_LEDs",%11
9� displayed% �
:%  �readsmarray(dbasehandle%,REC%)
;  �get_lengths
<  �
=.  � usekey%=-1 � �selected(matchW%,23)=� �
>!    P%=�neighbour(key%,top,1)
?$    �scan_file("P%<>top",key%,0)
@	    �
A%    P%=�search(useval$,usekey%,1)
B    � P%>=0 �
C      k$=useval$
D8      �scan_file("P%<>top AND k$=useval$",usekey%,0)
E	    �
F  �
G�
Hș "Hourglass_LEDs",%00
Iș "Hourglass_Off"
J�close_file(dbasehandle%)
K�
L:
M� �get_lengths
N� I%,L%,F%,l%,F$
OI%=-1:L%=�(Form$)-1
Pȕ I%<L%
Q5  I%+=2:F%=�fnum(�Form$,I%,2)):F$=F$(F%):l%=�(F$)
R'  � l%>maxlen%(F%) � maxlen%(F%)=l%
S�
T�
U:
V� �end_find_max
Wș "Hourglass_Smash"
X�close_file(dbasehandle%)
Ymaxlen%()=len%()
Z� �=17 �
[  �softerror("",70)
\  � �wimp_error(�,�,�,�$)
]�
^�
_:
`� �print_record(REC%)
a+� I%,F%,N%,F$,SF$,Tab%,n$,y$,base%,pos%
b$� format$<>"label" � printed%+=1
c� �selected(matchW%,27) � �
d-thisrow%=-1:base%=!lineanchor%:pos%=base%
e6�heap_store(lineanchor%,LenLine%,0,pos%,0,margin$)
f� I%=1 � �(Form$)-1 � 2
g  F%=�fnum(�Form$,I%,2))
h-  � format$="label" � newline%=� newline%
i  N%+=1
j  � �selected(printW%,11) �
k-    F$=�expand(F$(F%),link$(F%),Len%,SF$)
l	    �
m!    F$=F$(F%):Len%=len%(F%)+2
n    Ȏ chartype%(F%) �
o      � 41,42,43,44,45:
p      Z%=�no_yes(F%,n$,y$)
q"      � F$=" " � F$=y$ � F$=n$
r!      � 3,6,8,46,47,54,56,57:
s-      �sums(F$,calcrow%?F%,chartype%(F%))
t      � format$="vert" �
u&        F$=�len%(F%)-�(F$)," ")+F$
v%        � F$=�justify(F$,N%,N%-1)
w      �
x	    �
y  �
z)  � �selected(printW%,12) � F$=�u(F$)
{  Ȏ chartype%(F%) �
|    � 37:F$="<Sprite>"
}    � 38:F$="<Drawfile>"
~  �
  Ȏ format$ �
�    � "horiz","table":
�>    �heap_store(lineanchor%,LenLine%,0,pos%,0,�tab(F$,N%))
�    � "vert":
�R    � �selected(printW%,2) � Head$=$�text(mainW%,(desc%(F%))) � Head$=Tag$(F%)
�8    Head$=margin$+�Tab%(1)-�(Head$)," ")+Head$+" : "
�$    pos%=base%:L%=�(Head$)+�(F$)
�8    �heap_store(lineanchor%,LenLine%,0,pos%,0,Head$)
�5    �heap_store(lineanchor%,LenLine%,0,pos%,0,F$)
�*    �list_line(REC%,lineanchor%,L%,32)
�D    � chartype%(F%)=36 � chartype%(F%)=39 � �print_memo(REC%,F%)
�#    �extra_lines(linefeed%-1,0)
�    � "label":
�    � newline% �
�n      � (F$<>"" � �selected(labelW%,16)=�) � thisrow%<=labrepl% � thisrow%+=1:Label$(thisrow%,thislab%)=F$
�      �
�/      Label$(thisrow%,thislab%)+=spacer$+F$
�	    �
�  �
�� I%
�Ȏ format$ �
�  � "horiz":
�0  �list_line(REC%,lineanchor%,pos%-base%,32)
�!  �extra_lines(linefeed%-1,0)
�  � "vert":
�  �rule_off(45)
�  � "table":
�  colpos%=pos%-base%
�8  �heap_store(lineanchor%,LenLine%,0,pos%,0,column$)
�0  �list_line(REC%,lineanchor%,pos%-base%,32)
�'  �extra_lines(linefeed%-1,colpos%)
�  � "label":
�,  Label$(labrepl%+1,thislab%)=�key2(0,1)
�3  thislab%+=1:� thislab%>labup% � �print_labels
��
�� format$<>"label" �
�O  � (printed% � LinesPerPage%)=0 � �selected(printW%,10)=� � displayed%=� �
�N    $(!lineanchor%)=margin$+�(12):�list_line(-1,lineanchor%,Lmargin%+1,32)
�    �list_head(1)
�  �
��
��
�:
�� �extra_lines(ex%,tab%)
�� base%,pos%
�ȕ ex%>0
�  Ȏ tab% �
�    � 0:�rule_off(32)
�
    :
�%    base%=!lineanchor%:pos%=base%
�    � I%=0 � tab%-1
�      pos%?I%=32
�    � I%
�    pos%+=tab%
�:    �heap_store(lineanchor%,LenLine%,0,pos%,0,column$)
�2    �list_line(REC%,lineanchor%,pos%-base%,32)
�  �
�  ex%-=1
��
��
�:
�� �print_memo(R%,F%)
�.� text%,B%,F$,sp%,L%,rem$,base%,pos%,Line$
�/� �blob_path(�,$database%,R%,F%,36,F$)>=0 �
�  text%=�(F$)
�  ȕ � �#text%
�&    Line$=margin$+rem$:L%=�(Line$)
�	    �
�      B%=�#text%
�      Line$+=�(B%):L%+=1
�      � B%=32 � sp%=L%
�)    � B%=10 � L%=LenLine%-3 � �#text%
�    Ȏ � �
�'      � B%=10:rem$="":Line$=�Line$)
�      � �#text%:rem$=""
�2      :rem$=�Line$,sp%+1):Line$=�Line$,sp%-1)
�	    �
�    pos%=!lineanchor%
�8    �heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
�0    �list_line(REC%,lineanchor%,�(Line$),32)
�  �
�  �close_file(text%)
��
��
�:
�� �print_labels
�$� I%,Line$,S$,linesprinted%,pos%
�� I%=0 � labrepl%-1
�  Line$=margin$
�  � K%=0 � thislab%-1
�    S$=Label$(I%,K%)
�!    � �selected(labelW%,11) �
�9      � I%=labsubst% � S$="" � S$=Label$(labrepl%,K%)
�	    �
�9    � K%=thislab%-1 � W%=longestfield% � W%=labwidth%
�    � �(S$)>W% � S$=�S$,W%)
�     Line$+=S$+�W%-�(S$)," ")
�
  � K%
�  pos%=!lineanchor%
�6  �heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
�.  �list_line(REC%,lineanchor%,�(Line$),32)
�  linesprinted%+=1
�� I%
�� �selected(labelW%,13) �
�  �rule_off(32)
�  Line$=""
�  � K%=0 � thislab%-1
�(    S$="("+Label$(labrepl%+1,K%)+")"
�'    Line$+=S$+�labwidth%-�(S$)," ")
�
  � K%
�  pos%=!lineanchor%
�6  �heap_store(lineanchor%,LenLine%,0,pos%,0,Line$)
�.  �list_line(REC%,lineanchor%,�(Line$),32)
�  linesprinted%+=1
��
�rows_printed%+=1
�� rows_printed%=labrows% �
�L  $(!lineanchor%)=margin$+�(12):�list_line(-1,lineanchor%,Lmargin%+1,32)
�  �list_head(1)
�  rows_printed%=0
�  �
�  �
�    �rule_off(32)
�    linesprinted%+=1
�  � linesprinted%=labdepth%
��
�&thislab%=0:thisrow%=-1:Label$()=""
��
�:
� �read_print_options
� S$
thislab%=0:LinesPerPage%=0
@� usekey%=-1 � S$=Index$(key%) � S$=Index$(usekey%)+" index"
Title1$="Ordered by "+S$
2� �selected(printW%,19) � Title1$+=" ("+�$+")"
Title2$=$�text(printW%,18)
+�lit(menu%(18),1,�selected(printW%,10))
!Ȏ �selected_esg(printW%,2) �
	  � 4:cpi%=5:p$="3"

  � 7:cpi%=10:p$="0"
  � 8:cpi%=12:p$="1"
  � 6:cpi%=17:p$="2"

�
pitch$=�pitch(p$)
3Lmargin%=�($�text(printW%,30)):Tab%(0)=Lmargin%
margin$=�Lmargin%," ")
"Tmargin%=�($�text(printW%,32))
#TextLine%=�($�text(printW%,34))
#linefeed%=�($�text(printW%,17))
#colwidth%=�($�text(printW%,45))
*s$=$�text(printW%,43):s%=�(s$):c$=�s$)

Ȏ � �
  � s%=0:spacer$=s$
'  � c$<"0" � c$>"9":spacer$=�s%,c$)
  :spacer$=�s%," ")
�
?� linefeed%=0 � linefeed%=1:$�text(printW%,17)=�(linefeed%)
%pagelength%=�($�text(printW%,16))
F� pagelength%=0 � pagelength%=70:$�text(printW%,16)=�(pagelength%)
!Ȏ �selected_esg(printW%,3) �
  � 23:
   format$="horiz"
!9  LinesPerPage%=(pagelength%-Tmargin%-15) � linefeed%
"  � 24:format$="vert"
#J  LinesPerPage%=(pagelength%-Tmargin%-15) � (linefeed%*(�(Form$) � 2))
$  � 25:
%  format$="table"
&$  columns%=�($�text(printW%,15))
'0  column$=�columns%,"|"+�colwidth%," "))+"|"
(9  LinesPerPage%=(pagelength%-Tmargin%-15) � linefeed%
)  � 26:
*  format$="label"
+)  labwidth%=�($�text(labelW%,4))*cpi%
,&  labdepth%=�($�text(labelW%,6))*6
-1  labrows%=(pagelength%-Tmargin%) � labdepth%
.  rows_printed%=0
/%  labup%=�selected_esg(labelW%,1)
0$  labrepl%=�($�text(labelW%,10))
1'  labsubst%=�($�text(labelW%,12))-1
2%  Title$="":Title1$="":Title2$=""
3�
4!Ȏ �selected_esg(printW%,4) �
5  � 38:reportdest$="Window"
6  � 39:reportdest$="File"
7   � 41:reportdest$="Printer"
8�
9'� LinesPerPage%=0 � LinesPerPage%=1
:�
;:
<� �pitch(p$)
=4� �selected(printW%,42) �=�(31)+"9"+p$+"01" �=""
>:
?� �list_head(place%)
@� place%=0 �
A  Ȏ reportdest$ �
B    � "Window","Printer":
C    RU%=�($used%)
DO    � RU%<5 � textblocksize%=5*LenLine% � textblocksize%=(RU% � 5)*LenLine%
E$    textblockinc%=textblocksize%
F?    �extend_named_sliding_block(textanchor%,textblocksize%)
G    TextPtr%=!textanchor%
H    recblocksize%=400
I=    �extend_named_sliding_block(recanchor%,recblocksize%)
J&    � "File"::�#texthandle%,pitch$
K  �
L�
M�extra_lines(Tmargin%,0)
N� � displayed% �
O  �send_title(Title$)
P  �send_title(Title1$)
Q  �send_title(Title2$)
R�
SȎ format$ �
T  � "horiz":
U   Ȏ �selected(printW%,29) �
V    � �:
WV    � �selected(printW%,42) � $(!lineanchor%)=uon$:�list_line(-1,lineanchor%,2,32)
X.    �list_line(-1,headanchor%,LenLine%,32)
Y    � �:
Z    �rule_off(45)
[.    �list_line(-1,headanchor%,LenLine%,32)
\    �rule_off(45)
]  �
^  � "table":
_&  �rule_off(32):$(TextPtr%-3)=uon$
`  �rule_off(32)
a,  �list_line(-1,headanchor%,LenLine%,32)
b  �rule_off(32)
c  � "vert":�rule_off(45)
d�
eheader_lines%=Count%
f�
g:
h,� �list_line(REC%,anchor%,length%,char%)
i
Count%+=1
jȎ reportdest$ �
k  � "Window","Printer":
l)  �pad_line(LenLine%-length%-1,char%)
mP  �heap_store(textanchor%,textblocksize%,textblockinc%,TextPtr%,LenLine%,"")
nH  ș "Wimp_TransferBlock",mytask%,!anchor%,mytask%,TextPtr%,LenLine%
o!  � Count%*4>=recblocksize% �
p    recblocksize%+=400
q=    �extend_named_sliding_block(recanchor%,recblocksize%)
r  �
s"  !(!recanchor%+Count%*4)=REC%
t  TextPtr%+=LenLine%
u  � "File":
v)  �pad_line(LenLine%-length%-1,char%)
w2  ș "OS_GBPB",2,texthandle%,!anchor%,LenLine%
x�
y	�poll
z�
{:
|� �pad_line(bytes%,char%)
}� base%,ptr%,I%
~/base%=!anchor%:ptr%=base%+LenLine%-bytes%-1
� bytes%>0 �
�  � I%=0 � bytes%-2
�    ptr%?I%=char%
�
  � I%
��
�ptr%?(bytes%-1)=32
�ptr%?bytes%=10
��
�:
�� �rule_off(char%)
�� base%
�base%=!lineanchor%
�$base%=margin$
�-�list_line(-1,lineanchor%,Lmargin%,char%)
��
�:
�� �total_list
�� C%,L%,base%,pos%,L$
�#L$=margin$+"Total "+�(printed%)
�!base%=!lineanchor%:pos%=base%
�Ȏ format$ �
�  � "horiz":
�/  � � �selected(printW%,29) � �rule_off(45)
�  �ctotals(numfirst%)
�1  � �(L$)>LenLine%-2 � L$=margin$+�(printed%)
�3  �heap_store(lineanchor%,LenLine%,0,pos%,0,L$)
�0  �list_line(REC%,lineanchor%,pos%-base%,32)
�/  � � �selected(printW%,29) � �rule_off(45)
�  � "table":
�  �rule_off(32)
�%  �extra_lines(linefeed%,colpos%)
�  �ctotals(numfirst%)
��
��lit(menu%(6),7,�)
��
�:
�� �send_title(T$)
�� C$,L$,P%,L%
�� T$="" � �
�L%=LenLine%-Lmargin%-1
�ȕ �(T$)>=L%
�  P%=�(T$)
�  �
�    P%-=1:C$=�T$,P%,1)
�(  � (�"= ,.;:",C$)>0 � P%<L%) � P%=0
�  � P%=0 �
�'    L$=margin$+�T$,L%-1):T$=�T$,L%)
�)    � L$=margin$+�T$,P%):T$=�T$,P%+1)
�  �
�  $(!lineanchor%)=L$
�)  �list_line(-1,lineanchor%,�(L$),32)
��
�$(!lineanchor%)=margin$+T$
�0�list_line(-1,lineanchor%,Lmargin%+�(T$),32)
��
�:
�� �screen_list
�!!block%=0:block%!4=-Count%*32
�(block%!8=(LenLine%-1)*16:block%!12=0
�%ș "Wimp_SetExtent",listW%,block%
�!block%=listW%
�$ș "Wimp_GetWindowState",,block%
�;x%=(block%!12+block%!4) � 2:y%=(block%!16+block%!8) � 2
�"block%!12=block%!4+LenLine%*16
�� Count%<28 �
�"  block%!16=block%!8+Count%*32
�  �
�  block%!16=block%!8+32*28
��
�!ș "Wimp_CloseWindow",,block%
��open_window(listW%)
�
Listed%=�
��show_menu(menu%(18),x%,y%)
��
�:
�� �sort_list
�� I%
�.ind%=!textanchor%+LenLine%*header_lines%-1
�� I%=0 � printed%-1
�  ind%+=LenLine%
�  block%!(I%*4)=ind%
�� I%
�jș "OS_HeapSort",printed%,(block% � (1<<30) � (1<<31)),4,,!textanchor%+LenLine%*header_lines%,LenLine%
��redraw(listW%)
��
�:
�� �lose_list
��close_window(listW%)
�%�scrap_sliding_block(textanchor%)
�$�scrap_sliding_block(recanchor%)
�
Listed%=�
��
�:
�� �parse(S$,case%)
�~� val%,I%,P%,F%,f%,t%,flag%,left%,right%,search$,field$,op$,bo$,target$,targ$,f$,t$,E$,E1$,TitFd$,TitTg$,simple%,date$,SF$
�usekey%=-1:useval$=""
�Q� S$="" � �u(S$)="ALL" � Title$=��leaf($database%),2)+". All records":="TRUE"
�simple%=�simple(S$)
�S$+=" ":Title$=""
�ȕ �(S$)>0
�  W$=�word(S$," ")
�5  � W$="NOT" � �S$,1)<>"(" � � moan_err%,�msg(60)
�  �strip_brackets
�  � �(W$)>0 �
�*    flag%=�:TitFd$="":TitTg$="":op$=""
�    Ȏ W$ �
�5      � "AND","OR","NOT":E$=W$:Title$+=" "+E$+" "
�+      � "&":E$="AND":Title$+=" "+E$+" "
�      :
�      E$=""
�      �split
�      ȕ �(field$)>0
�$        f$=�u(�word(field$,","))
�        f%=�field(f$,�)
�        f$="F$("+�(f%)+")"
�(        � � case% � f$="FNu("+f$+")"
�%        � val% � f$="VAL("+f$+")"
�        Ȏ chartype%(f%) �
�3          � 5,51,52:f$="FNreverse_date("+f$+")"
�
        �
�        targ$=target$
�        ȕ �(targ$)>0
�'          t$=�word(targ$,","):u$=t$
�B          � � flag% � TitTg$+=�expand(t$,link$(f%),L%,SF$)+","
�2          � chartype%(f%)>40 � t$=�pos_neg(t$)
�           Ȏ chartype%(f%) �
�            � 5,51,52:
�K            � �check_date(t$,2,date$)=� � t$=�reverse_date(date$):u$=t$
�          �
          t$=""""+t$+""""
'          � val% � t$="VAL("+t$+")"
          � f%=0 �
            Ȏ op$ �
;              � "{","=":E1$="FNany("+t$+","""+op$+""")"
.              � "}{":� moan_err%,�msg(100)
.              � "<>":� moan_err%,�msg(101)
7              :� moan_err%,""""+op$+""""+�msg(102)
            �
	            �

            Ȏ op$ �
4              � "{":E1$="INSTR("+f$+","+t$+")>0"
5              � "}{":E1$="INSTR("+f$+","+t$+")=0"

              � "=":
              E1$=f$+op$+t$
,              � simple%=� � usekey%=-1 �
+                foundkey%=�is_a_key(f%)
@                � foundkey%>=0 � � KL%(foundkey%)=len%(f%) �
2                  usekey%=foundkey%:useval$=u$
                �
              �
!              :E1$=f$+op$+t$
            �
          �
@          � �(E$)+�(E1$)>255 � � moan_err%,�msg(6) � E$+=E1$
@          � �(E$)+�(bo$)>255 � � moan_err%,�msg(6) � E$+=bo$

        �
        flag%=�
      �
      E$=�E$,�(E$)-�(bo$))
      � �E$,bo$)>0 �
=        � �(E$)>253 � � moan_err%,�msg(6) � E$="("+E$+")"
       �
!	    �
"  �
#  �add_brackets
$
  E$+=" "
%  � �(search$)+�(E$)>255 �
&    � moan_err%,�msg(6)
'    � search$+=E$
(    �build_title
)  �
*�
+,Title$=��leaf($database%),2)+". "+Title$
,� usekey%>=0 �
-*  kl%=KL%(usekey%):val$=�type(usekey%)
.  � �deselect(matchW%,23)
/�
0=search$
1:
2� �pos_neg(s$)
3Ȏ s$ �
4*  � "+","y","Y","*","�","T","t":s$=" "
5)  � "-","n","N","x","X","F","f":s$=""
6�
7=s$
8:
9� �simple(S$)
:Q� �S$,"=")>0 � (�S$,",")=0 � �S$,"-")=0 � �S$,"OR")=0 � �S$,"NOT")=0) �=� �=�
;:
<� �word(� S$,sep$)
=� P%,W$,Q1%,Q2%
>�
?'  Q1%=�S$,""""):Q2%=�S$,"""",Q1%+1)
@  P%=�S$,sep$,P%)
A  Ȏ � �
B-    � (P%>Q1% � P%<Q2%),(P%>Q2% � Q2%>0):
C5    S$=�S$,Q1%-1)+�S$,Q1%+1,Q2%-Q1%-1)+�S$,Q2%+1)
D9    P%=Q2%-2:� ### S$ is now 2 characters shorter ###
E)    � Q1%>0 � Q2%=0:�softerror("",93)
F     S$=�S$,Q1%-1)+�S$,Q1%+1)
G  �
H� Q1%+Q2%=0 � P%<Q1%
IW$=�S$,P%-1)
JS$=�S$,P%+1)
K=W$
L:
M� �any(targ$,op$)
N� F%,found%,case%,F$
Ocase%=�selected(matchW%,16)
P�
Q  F%+=1:F$=F$(F%)
R  � � case% � F$=�u(F$)
S  Ȏ op$ �
T'    � "{":� �F$,targ$)>0 � found%=�
U#    � "=":� F$=targ$ � found%=�
V  �
W� found% � F%=fields%
X=found%
Y:
Z� �split
[� X$,Q%,I%
\8X$=">=>=,<=<=,<>,}{,>=,<=,==,>>,<<,{{,=,<,>,{,":P%=0
]ȕ �(X$)>0 � P%=0
^,  Q%=�X$,","):op$=�X$,Q%-1):X$=�X$,Q%+1)
_  P%=�W$,op$)
`�
a� P%>0 �
b  field$=�W$,P%-1)
c   target$=�W$,P%+�(op$))+","
d%  � � case% � target$=�u(target$)
e  field$=�exp_field
f  Ȏ op$ �
g    � "<>","}{":bo$="AND"
h    � "<=",">=":bo$="OR"
i    � "<=<=",">=>=":
j    op$=�op$,2):bo$="AND"
k    � "==","<<",">>","{{":
l    op$=�op$,1):bo$="AND"
m    :bo$="OR"
n  �
o  � � moan_err%,�msg(40)
p�
q�
r:
s� �exp_field
t� P%,I%,F1%,F2%,F$
uP%=�field$,"-")
v� P%=0 �
w  F$=field$+","
x  �
y!  F1%=�field(�field$,P%-1),�)
z!  F2%=�field(�field$,P%+1),�)
{  � F1%>F2% � Ȕ F1%,F2%
|  � I%=F1% � F2%
}    F$+=Tag$(I%)+","
~
  � I%
�
�=F$
�:
�� �fnum(S$)
�� N%
�N%=�("&"+S$)
�newline%=((N% � 128)>0)
�=(N% � 127)
�:
�� �field(f$,Z%)
�� I%,F%,desc$
�%� f$="@" � TitFd$="Any field ":=0
�
val%=�
�0� �f$,1)="[" � �f$)="]" � f$=��f$),2):val%=�
�ȕ I%<fields%
�  I%+=1
�#  � �u(Tag$(I%))=�u(f$) � F%=I%
��
�� F%>0 � Z%=� �
�$  desc$=$�text(mainW%,desc%(F%))
�6  � desc$<>"" � TitFd$+=desc$+"," � TitFd$+=f$+","
�5  � � F%=0 � � moan_err%,�msg(8)+" ("+f$+")"+�(0)
��
�Ȏ chartype%(F%) �
�!  � 3,6,46,47,54,56,57:val%=�
��
�=F%
�:
�%� �find_fields(S$,sep$,� length%)
�� f$,F$,C$,P%,Q%,F%
�Q%=1:length%=0
��
�  P%=�S$,sep$,Q%)
�  � P%>0 � f$=�S$,Q%,P%-Q%)
�  F%=�field(f$,�)
�  length%+=len%(F%)+1
�  F$=�~(F%)
�  � �(F$)=1 � F$="0"+F$
�  C$+=F$
�
  Q%=P%+1
�� P%=�(S$)
�length%+=�(�(RA%))+1
�=C$
�:
�� �strip_brackets
�ȕ �W$,1)="("
�  left%+=1:W$=�W$,2)
��
�ȕ �W$)=")"
�  right%+=1:W$=�W$)
��
��
�:
�� �add_brackets
�ȕ left%>0
�  E$="("+E$:left%-=1
��
�ȕ right%>0
�  E$+=")":right%-=1
��
��
�:
�� �build_title
�
� change%
�#TitFd$=�TitFd$):TitTg$=�TitTg$)
�� �TitFd$,",")>0 �
�  Ȏ bo$ �
�&    � "OR":TitFd$="One of:"+TitFd$
�    � "AND":
�    Ȏ op$ �
�;      � "<>":TitFd$="None of:"+TitFd$:op$="=":change%=�
�;      � "}{":TitFd$="None of:"+TitFd$:op$="{":change%=�
�#      :TitFd$="All of:"+TitFd$
�	    �
�  �
��
�� �TitTg$,",")>0 �
�  Ȏ bo$ �
�&    � "OR":TitTg$="One of:"+TitTg$
�    � "AND":
�    Ȏ op$ �
�1      � "<>":TitTg$="None of:"+TitTg$:op$="="
�1      � "}{":TitTg$="None of:"+TitTg$:op$="{"
�I      :� change% � TitTg$="Any of:"+TitTg$ � TitTg$="All of:"+TitTg$
�	    �
�  �
��
�Ȏ op$ �
�  � "{":op$=" contains "
�%  � "}{":op$=" does not contain "
��
�Title$+=TitFd$+op$+TitTg$
��
�:
�0� �expand(string$,table$,� ExpLen%,� subst$)
�U� p$,s$,start%,F%,I%,T%,ind%,row%,Rec%,Rows%,TabFields%,field%,sfield%,pos%,spos%
�subst$=string$
�9� table$="" � ExpLen%=0:=string$:� ### Not linked ###
�&field%=�(�table$)):table$=�table$)
�U� �(table$)<58 � �(table$)<>-1 � sfield%=�(table$):table$=�table$,2) � sfield%=-1
�T%=�table_number(table$)
�9� T%<0 � ExpLen%=0:=string$:� ### Table not found ###
�p$=printrel$(T%)
�;T$=�table_info(T%,Rows%,TabFields%,Rec%,tabfieldlen%())
�,pos%=�table_field(field%,tabfieldlen%())
�=� sfield%>=0 � spos%=�table_field(sfield%,tabfieldlen%())
�� p$<>"" �
�  ExpLen%=0
�  � I%=1 � �(p$)
�    F%=�(�p$,I%,1))
�#    ExpLen%+=tabfieldlen%(F%)+2
�
  � I%
�  ExpLen%-=2
�  � ExpLen%=tabfieldlen%(1)
��
�4start%=!tabanchor%(T%)+160-Rec%:ind%=start%+pos%
��
�  row%+=1:ind%+=Rec%
� � row%>Rows% � $ind%=string$
�B� row%>Rows% � subst$="":=string$:� ## String not in table ###
�=ind%=start%+row%*Rec%:� sfield%>=0 � subst$=$(ind%+spos%)
�� p$<>"" �
�  � I%=1 � �(p$)
�    F%=�(�p$,I%,1))
�,    pos%=�table_field(F%,tabfieldlen%())
�4    s$+=�pad($(ind%+pos%),tabfieldlen%(F%))+"  "
�
  � I%
�  s$=��s$))
�C  � ind%+=tabfieldlen%(0)+1:s$=$ind%:� ### Return 2nd field ###
�
=s$
:
� �n(F%)
V� T%,row%,ind%,start%,Rows%,Rec%,TabFields%,pos%,valpos%,N%,field%,name$,table$,S$
� link$(F%)="" �=0
S$=$Rf%(F%)
name$=link$(F%)
$field%=�(�name$)):table$=�name$)
	6� �(table$)<58 � �(table$)<>-1 � table$=�table$,2)

/table%=�table_number(table$):� table%<0 �=0
?T$=�table_info(table%,Rows%,TabFields%,Rec%,tabfieldlen%())
.� TabFields%=field% � �softerror("",54):=0

,pos%=�table_field(field%,tabfieldlen%())
1valpos%=�table_field(field%+1,tabfieldlen%())
'start%=!tabanchor%(table%)+160-Rec%

� row%+=1
   ind%=start%+row%*Rec%+pos%
� row%>Rows% � S$=$ind%
� row%<=Rows% �
#  ind%=start%+row%*Rec%+valpos%
  N%=�($ind%)
  � N%=0
�
=N%
:
� �pad(s$,L%)
ȕ �(s$)<L%

  s$+=" "
�
=s$
:
 � �include_fields
!t� Hdlen%,Datlen%,hlm%,dlm%,I%,F%,f$,Head$,limit%,pad%,col%,fail%,n$,y$,SF$,memo%,base%,pos%,blocksize%,blockinc%
"'blocksize%=256:blockinc%=blocksize%
#7�extend_named_sliding_block(headanchor%,blocksize%)
$!base%=!headanchor%:pos%=base%
%@�heap_store(headanchor%,blocksize%,blockinc%,pos%,0,margin$)
&� I%=1 � �(Form$)-1 � 2
'  F%=�fnum(�Form$,I%,2))
(  Ȏ chartype%(F%) �
)0    � 36,39:dlm%=TextLine%:memo%=�:�set_vert
*    � 41,42,43,44,45:
+!    Datlen%=�no_yes(F%,n$,y$)
,E    � ### Get data length for strings printed for check boxes ###
-  �
.  � �selected(printW%,11) �
//    f$=�expand("@#*",link$(F%),Datlen%,SF$)
0)    � Datlen%=0 � Datlen%=maxlen%(F%)
1	    �
2    Datlen%=maxlen%(F%)
3  �
4#  � Datlen%>dlm% � dlm%=Datlen%
5P  � �selected(printW%,2) � Head$=$�text(mainW%,(desc%(F%))) � Head$=Tag$(F%)
6  Hdlen%=�(Head$)
7!  � Hdlen%>hlm% � hlm%=Hdlen%
8  Ȏ format$ �
9    � "horiz","table":
:-    pad%=Datlen%-Hdlen%:� pad%<0 � pad%=0
;    Ȏ chartype%(F%) �
<c      � 3,6,46,47,54,56,57:� �selected(printW%,11) � Head$+=�pad%," ") � Head$=�pad%," ")+Head$
=A      � ### Right justify numbers unless Expand option on ###
>      :Head$+=�pad%," ")
?	    �
@J    �heap_store(headanchor%,blocksize%,blockinc%,pos%,0,Head$+spacer$)
A#    Tab%((I%+1) � 2)=pos%-base%
B  �
C� I%
DȎ format$ �
E  � "horiz":L%=pos%-base%+2
F  � "vert":
G  � memo% �
H    L%=TextLine%+5
I!    � L%=Lmargin%+hlm%+dlm%+6
J  �
K  Tab%(1)=hlm%
L  � "table":
M  col%=�(column$)
NF  �heap_store(headanchor%,blocksize%,blockinc%,pos%,0,column$+" ")
O  ?pos%=10:L%=pos%-base%+1
P  � "label":
Q  longestfield%=dlm%
R)  L%=labup%*labwidth%+dlm%+Lmargin%+1
S�
T1�extend_named_sliding_block(lineanchor%,L%+8)
U=L%
V:
W� �no_yes(F%,� no$,� yes$)
X� P%,V$,L%
YV$=$�val(mainW%,field%(F%))
ZP%=�V$,"Q")
[� P%>0 �
\  V$=�V$,P%+1)
]  P%=�V$,",")
^  no$=�V$,P%-1)
_  yes$=�V$,P%+1)
`  � no$="N":yes$="Y"
a�
b
L%=�(no$)
c� �(yes$)>L% � L%=�(yes$)
d=L%
e:
f9� �heap_store(anchor%,� size%,inc%,� ptr%,L%,string$)
g!� string$<>"" � L%=�(string$)
h � ptr%-!anchor%+L%+1>size% �
i  size%+=inc%
j0  �extend_named_sliding_block(anchor%,size%)
k�
l3� string$<>"" � $ptr%=string$:ptr%+=L%:?ptr%=10
m�
n:
o� �set_vert
p�deselect(printW%,23)
q�deselect(printW%,25)
r�deselect(printW%,26)
s�select(printW%,24)
tformat$="vert"
u?LinesPerPage%=(pagelength%-10) � (linefeed%*(�(Form$) � 2))
v'� LinesPerPage%=0 � LinesPerPage%=1
w�
x:
y� �drag_selection(f$)
z� F%,I%,T%,F
{F=�(f$)
|printorder$=�#F
}	T%=-1
~ȕ � �#F
  T%+=1
�  printrel$(T%)=�#F
��
��close_file(F)
�� F%=1 � fields%
�  � chartype%(F%)>40 �
�.    col%=�get_icon_cols(mainW%,field%(F%))
�E    � (col% � %1111)<2 � col%=((col%>>4) � (col%<<4)) � %11111111
�.    �set_icon_cols(mainW%,field%(F%),col%)
�&    � �deselect(mainW%,field%(F%))
�  �
�� F%
�!� I%=1 � �(printorder$)-1 � 2
�"  F%=�fnum(�printorder$,I%,2))
�  � chartype%(F%)>40 �
�.    col%=�get_icon_cols(mainW%,field%(F%))
�0    col%=((col%>>4) � (col%<<4)) � %11111111
�.    �set_icon_cols(mainW%,field%(F%),col%)
�$    � �select(mainW%,field%(F%))
�  �
�� I%
��lit(menu%(6),7,�)
��lit(menu%(6),8,�)
��
�:
�� �select_all
�� F%,T%,F$
�printorder$=""
�� F%=1 � fields%
�  Ȏ chartype%(F%) �
�    � 41,42,43,44,45:
�.    col%=�get_icon_cols(mainW%,field%(F%))
�F    � (col% � %1111)>=2 � col%=((col%>>4) � (col%<<4)) � %11111111
�.    �set_icon_cols(mainW%,field%(F%),col%)
�'    F$=�~(F%):� �(F$)=1 � F$="0"+F$
�    printorder$+=F$
�    � 0,1,2,4,5,7,8:
�    � len%(F%)>0 �
�)      F$=�~(F%):� �(F$)=1 � F$="0"+F$
�      printorder$+=F$
�$      �select(mainW%,field%(F%))
�	    �
�(    � 36,39,48,49,50,51,52,53,55,58:
�'    F$=�~(F%):� �(F$)=1 � F$="0"+F$
�    printorder$+=F$
�"    �select(mainW%,field%(F%))
�    � 3,6,46,47,54,56,57:
�'    F$=�~(F%):� �(F$)=1 � F$="0"+F$
�    printorder$+=F$
�"    �select(mainW%,field%(F%))
�"    �enable_row(calcrow%?F%,�)
�  �
�� F%
��lit(menu%(6),7,�)
��lit(menu%(6),8,�)
��
�:
�� �clear_selection
�� F%,T%
�� F%=1 � fields%
�  Ȏ chartype%(F%) �
�    � 41,42,43,44,45:
�.    col%=�get_icon_cols(mainW%,field%(F%))
�E    � (col% � %1111)<2 � col%=((col%>>4) � (col%<<4)) � %11111111
�.    �set_icon_cols(mainW%,field%(F%),col%)
�V    � 3,6,8,46,47,54,56,57:�enable_row(calcrow%?F%,�):�deselect(mainW%,field%(F%))
�&    :�deselect(mainW%,field%(F%))
�  �
�� F%
�printorder$=""
�� T%=0 � LastTable%
�  printrel$(T%)=""
�� T%
��lit(menu%(6),7,�)
��lit(menu%(6),8,�)
��
�:
�� �drag_query(f$)
�� F%,I%,Q$
�� �selected(keypadW%,22) �
�,  ș "OS_File",255,f$,�text(keypadW%,29)
�  �set_caret(keypadW%,29)
�  �redraw_icon(keypadW%,29)
�  �
�*  ș "OS_File",255,f$,�text(matchW%,0)
�  �open_window(matchW%)
�  �set_caret(matchW%,0)
�  �redraw_icon(matchW%,0)
��
��
�:
�� �drag_options(f$)
�� F,I%,set%,ic%
�F=�(f$)
�� �
�� � �:� �:�end_load:�
�� +0
�� I%=1 � 13
�  � ic%
�*  �#F,set%:�set_icon(printW%,ic%,set%)
�� I%
�� I%=1 � 9
�  � ic%
�  �#F,$�text(printW%,ic%)
�  �redraw_icon(printW%,ic%)
�� I%
�� I%=1 � 7
�  � ic%
�*  �#F,set%:�set_icon(printW%,ic%,set%)
�� I%
�� I%=1 � 3
�  � ic%
�*  �#F,set%:�set_icon(labelW%,ic%,set%)
�� I%
�� I%=1 � 4
�  � ic%
�  �#F,$�text(labelW%,ic%)
�� I%
�� I%=1 � 3
�  � ic%
�*  �#F,set%:�set_icon(labelW%,ic%,set%)
�� I%
��close_file(F)
�2�icon_bit(22,printW%,15,�selected(printW%,25))
�2�icon_bit(22,printW%,45,�selected(printW%,25))
�2�icon_bit(22,labelW%,12,�selected(labelW%,11))
�:
�8� 1,2,4,6,7,8,23,24,25,26,38,39,41:REM Radio buttons
�4� 15,16,17,18,30,32,34,43,45:REM Writable fields
.� 10,11,12,19,29,40,42:REM Option switches
 � In Label Definition window
� 0,1,2:REM Radio buttons
$� 4,6,10,12:REM Writeable fields
"� 11,13,16:REM Option switches
:
�
:
� �end_load
	�close_file(F)


Ȏ � �
7  � 222:�wimp_error(�,fatal_err%,�,f$+" not found")

  � 6:

F  �wimp_error(�,moan_err%,�,f$+" is too old and is being deleted")
  ș "OS_CLI","Delete "+f$
P  � �leaf(f$)="PrintOpts" � �drag_options("<Pbase$Dir>.Resources.PrintOpts")
%  :�wimp_error(�,moan_err%,�,�$)
�
�
:
� �design_field
� w%,h%
posx%=x%:posy%=y%
3!block%=mainW%:ș "Wimp_GetWindowState",,block%
x%+=block%!20-block%!4
y%+=block%!24-block%!16
Ȏ b% � %1111111 �
  � 16:
A  � (ic% � 2)=1 � drag%=6:dragbutt%=16 � drag%=5:dragbutt%=64
"  �init_drag(mainW%,ic%,drag%)

  � 2:
  $InsText%=""
 3  �deselect(createW%,�selected_esg(createW%,1))
!  � ic%>=0 �
"    �lit(menu%(9),0,�)
#B    !block%=mainW%:block%!4=ic%:ș "Wimp_GetIconState",,block%
$M    x%=block%!8:y%=block%!12:w%=block%!16-block%!8:h%=block%!20-block%!12
%$    Fieldnumber%=�get_field(ic%)
&%    type%=chartype%(Fieldnumber%)
'    Ȏ type% �
(      � 0,1,2,3,4,5,6,7,8:
)      �select(createW%,21)
*      �set_limits(1,0,8,8)
+      � 36,37,38,39,40:
,      �select(createW%,22)
-"      �set_limits(36,36,40,11)
.      � 41,42,43,44,45:
/      �select(createW%,24)
0"      �set_limits(41,41,45,14)
16      � 46,47,48,49,50,51,52,53,54,55,56,57,58,59:
2      �select(createW%,35)
3"      �set_limits(46,46,59,16)
4      :
5      �select(createW%,23)
6       �set_limits(9,9,35,19)
7	    �
8    fieldtype%=type%
9R    �tick_one(menu%(menunumber%),0,lasttype%-firsttype%,fieldtype%-firsttype%)
:4    $FtitleText%="Modify field "+�(Fieldnumber%)
;5    $DescText%=$�text(mainW%,desc%(Fieldnumber%))
<$    $TagText%=Tag$(Fieldnumber%)
='    $LenText%=�(len%(Fieldnumber%))
>$    $ValText%=vname$(fieldtype%)
?l    � fix%(Fieldnumber%)>0 � $Fixpt%=�(fix%(Fieldnumber%)):�select(createW%,14) � �deselect(createW%,14)
@:    �icon_bit(22,createW%,13,(�selected(createW%,14)))
A?    �icon_bit(22,createW%,14,(fieldtype%=3 � fieldtype%=6))
B#    �icon_bit(22,createW%,18,�)
C[    �icon_bit(22,createW%,6,(fieldtype%<9 � fieldtype%=46 � fieldtype%=47) � � adjust%)
D+    �icon_bit(22,createW%,30,� adjust%)
E#    �icon_bit(22,createW%,29,�)
F@    �icon_bit(22,createW%,15,(fieldtype%=3 � fieldtype%=47))
G0    �icon_bit(22,createW%,25,(fieldtype%=3))
H*    C$=calc$(Fieldnumber%):P%=�C$,"|")
I8    � P%>0 � $mintext%=�C$,P%-1):$maxtext%=�C$,P%+1)
J    � I%=21 � 24
K-      �icon_bit(22,createW%,I%,� adjust%)
L    � I%
M+    �icon_bit(22,createW%,35,� adjust%)
N+    �icon_bit(22,createW%,39,� adjust%)
O+    �icon_bit(22,createW%,40,� adjust%)
P	    �
Q"    �lit(menu%(9),0,� adjust%)
R    �select(createW%,21)
S    �set_limits(1,0,8,8)
T.    $FtitleText%="New field "+�(fields%+1)
U/    $DescText%="":$TagText%="":$LenText%=""
V-    $Fixpt%="2":$mintext%="":$maxtext%=""
W    �deselect(createW%,14)
X#    �icon_bit(22,createW%,13,�)
Y#    �icon_bit(22,createW%,14,�)
Z#    �icon_bit(22,createW%,15,�)
[#    �icon_bit(22,createW%,25,�)
\#    �icon_bit(22,createW%,29,�)
]#    �icon_bit(22,createW%,30,�)
^#    �icon_bit(22,createW%,39,�)
_#    �icon_bit(22,createW%,40,�)
`+    �icon_bit(22,createW%,18,� adjust%)
a  �
b9  $boxX%=�(x%):$boxY%=�(y%):$boxW%=�(w%):$boxH%=�(h%)
c  �close_window(createW%)
d,  �show_menu(menu%(9),posx%-64,posy%-20)
e0  � 64:�init_drag(mainW%,ic%,5):dragbutt%=64
f�
g�
h:
i(� �remove_field(Field%,con%,� Calc$)
j� F%
k'� con% � � �confirm(�msg(53))=� � �
l)!block%=mainW%:block%!4=desc%(Field%)
m"ș "Wimp_GetIconState",,block%
n"posx%=block%!8:posy%=block%!12
o ș "Wimp_DeleteIcon",,block%
p8block%!4=field%(Field%):ș "Wimp_DeleteIcon",,block%
qfields%-=1
rCalc$=calc$(Field%)
s� F%=Field% � fields%
t�  desc%(F%)=desc%(F%+1):field%(F%)=field%(F%+1):Tag$(F%)=Tag$(F%+1):len%(F%)=len%(F%+1):chartype%(F%)=chartype%(F%+1):fix%(F%)=fix%(F%+1):calc$(F%)=calc$(F%+1)
u� F%
v!block%=mainW%
w$ș "Wimp_GetWindowState",,block%
x;posx%-=block%!20-block%!4:posy%-=block%!24-block%!16-48
yBș "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
z�
{:
|(� �create_field(Before%,x%,y%,Calc$)
}D� Desc%,Field%,F%,tag$,Len%,Char%,F%,L%,LF%,x%,y%,width%,height%
~9� fields%=MaxFields% � �softerror(�(MaxFields%),23):�
6� $DescText%="" � $TagText%="" � fieldtype%<=8 � �
�%L%=�($DescText%):LF%=�($LenText%)
�#� LF%>246 � �softerror("",64):�
�@x%=�($boxX%):y%=�($boxY%):width%=�($boxW%):height%=�($boxH%)
�Ȏ fieldtype% �
�  � 39,40,59:
�  LF%=0
�  � width%=0 � width%=48
�  � height%=0 � height%=48
�  � 41,42,43,44,45:LF%=1
�  � 8,48,50:LF%=8
�  � 49:LF%=15
�  � 51:LF%=10
�  � 52,58:LF%=24
�  � 53,55:LF%=3
�  � 54,56:LF%=2
�  � 57:LF%=4
��
�0� LF%>0 � $TagText%="" � �softerror("",16):�
�� F%+=1
�%� $TagText%=Tag$(F%) � F%>fields%
�7� F%<=fields% � $TagText%<>"" � �softerror("",20):�
�8fields%+=1:Tag$(fields%)=$TagText%:len%(fields%)=LF%
� � width%=0 � $TagText%<>"" �
�G  � len%(fields%)<70 � width%=len%(fields%)*16+16 � width%=70*16+16
��
�'� height%=0 � width%>0 � height%=48
�!chartype%(fields%)=fieldtype%
�I� �selected(createW%,14) � fix%(fields%)=�($Fixpt%) � fix%(fields%)=0
�D�extend_named_sliding_block(formanchor%,Fptr%-!formanchor%+L%+6)
�kdesc%(fields%)=�create_icon(mainW%,x%-L%*16-16,y%,L%*16+8,48,(winback%<<28)+&7016731,"",Fptr%,hand%,L%)
�!$Fptr%=$DescText%:Fptr%+=L%+1
�
$Fptr%=""
�Ȏ fieldtype% �
�
  � 3:
�  min$=$�text(createW%,15)
�  max$=$�text(createW%,25)
�L  � min$<>"" � max$<>"" � calc$(fields%)=min$+"|"+max$:calc$(0)="LOADED"
�  � 47:
�3  min$=$�text(createW%,15):� min$="" � min$="0"
�4  calc$(fields%)=min$+"|"+min$:calc$(0)="LOADED"
��
�Ȏ fieldtype% �
�Q  � 0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57:valptr%=hand%
�#  :valptr%=hvalid%(fieldtype%)
��
�-�icon_design(fieldtype%,1,width%,height%)
�Xfield%(fields%)=�create_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
�G� fieldtype%=40 � Rf%(fields%)=�create_anchor("Picture"+�(fields%))
�Fptr%+=5
�L�redraw_icon(mainW%,desc%(fields%)):�redraw_icon(mainW%,field%(fields%))
�D� Before%<fields% � Before%>0 � �re_sequence(fields%,Before%,-1)
��
�:
�� �adjust_field(b%)
�� Dptr%,Fptr%
�$ș "Wimp_GetPointerInfo",,block%
� newx%=!block%:newy%=block%!4
�#Fieldnumber%=�get_field(ficon%)
�� (ficon% � 2)=0 �
�C  !block%=mainW%:block%!4=ficon%:ș "Wimp_GetIconState",,block%
�.  Dptr%=block%!28:Desc$=$Dptr%:L%=�(Desc$)
�"  ș "Wimp_DeleteIcon",,block%
�&  ș "Wimp_GetWindowState",,block%
�-  x%=block%!20-block%!4+newx%-oldx%+minx%
�.  y%=block%!24-block%!16+miny%+newy%-oldy%
�[  desc%(Fieldnumber%)=�create_icon(mainW%,x%,y%,L%*16+8,48,&17016731,"",Dptr%,hand%,L%)
�  �
�C  !block%=mainW%:block%!4=ficon%:ș "Wimp_GetIconState",,block%
�  Fptr%=block%!28
�
  Ȏ b% �
�
    � 16:
�$    ș "Wimp_DeleteIcon",,block%
�(    ș "Wimp_GetWindowState",,block%
�#    x%=block%!20-block%!4+minx%
�0    y%=block%!24-block%!16+miny%+newy%-oldy%
�F    width%=maxx%-minx%+newx%-oldx%:height%=maxy%-miny%+oldy%-newy%
�
    � 64:
�G    !block%=mainW%:block%!4=ficon%-1:ș "Wimp_GetIconState",,block%
�0    Dptr%=block%!28:Desc$=$Dptr%:L%=�(Desc$)
�$    ș "Wimp_DeleteIcon",,block%
�C    !block%=mainW%:block%!4=ficon%:ș "Wimp_DeleteIcon",,block%
�(    ș "Wimp_GetWindowState",,block%
�8    x%=block%!20-block%!4+newx%-oldx%+minx%-L%*16-16
�0    y%=block%!24-block%!16+miny%+newy%-oldy%
�k    desc%(Fieldnumber%)=�create_icon(mainW%,x%,y%,L%*16+8,48,(winback%<<28)+&7016731,"",Dptr%,hand%,L%)
�(    ș "Wimp_GetWindowState",,block%
�/    x%=block%!20-block%!4+newx%-oldx%+minx%
�0    y%=block%!24-block%!16+miny%+newy%-oldy%
�.    width%=maxx%-minx%:height%=maxy%-miny%
�  �
�(  fieldtype%=chartype%(Fieldnumber%)
�  Ȏ fieldtype% �
�V    � 0,1,2,3,4,5,6,7,8,39,40,46,47,48,49,50,51,52,53,54,55,56,57,58:valptr%=hand%
�!    � 59:valptr%=!logoanchor%
�%    :valptr%=hvalid%(fieldtype%)
�  �
�/  �icon_design(fieldtype%,1,width%,height%)
�_  field%(Fieldnumber%)=�create_icon(mainW%,x%,y%,width%,height%,iflags%,"",Fptr%,valptr%,4)
�S  � fieldtype%=40 � Rf%(Fieldnumber%)=�create_anchor("Picture"+�(Fieldnumber%))
��
�@$boxX%=�(x%):$boxY%=�(y%):$boxW%=�(width%):$boxH%=�(height%)
�!block%=mainW%
�$ș "Wimp_GetWindowState",,block%
�Bș "Wimp_ForceRedraw",-1,block%!4,block%!8,block%!12,block%!16
��
�:
�� �swap_fields(F1%,F2%)
�� F2%>0 � F2%<=fields% �
�  Ȕ desc%(F1%),desc%(F2%)
�  Ȕ Tag$(F1%),Tag$(F2%)
�   Ȕ field%(F1%),field%(F2%)
�  Ȕ len%(F1%),len%(F2%)
�&  Ȕ chartype%(F1%),chartype%(F2%)
�  Ȕ fix%(F1%),fix%(F2%)
�  Ȕ calc$(F1%),calc$(F2%)
�  �close_window(createW%)
��
��
�:
�� �re_sequence(F1%,F2%,Z%)
�wD%=desc%(F1%):T$=Tag$(F1%):F%=field%(F1%):L%=len%(F1%):C%=chartype%(F1%):f%=fix%(F1%):� Calc$="" � Calc$=calc$(F1%)
�� I%=F1%+Z% � F2% � Z%
��  desc%(I%-Z%)=desc%(I%):Tag$(I%-Z%)=Tag$(I%):field%(I%-Z%)=field%(I%):len%(I%-Z%)=len%(I%):chartype%(I%-Z%)=chartype%(I%):fix%(I%-Z%)=fix%(I%):calc$(I%-Z%)=calc$(I%)
�� I%
�jdesc%(F2%)=D%:Tag$(F2%)=T$:field%(F2%)=F%:len%(F2%)=L%:chartype%(F2%)=C%:fix%(F2%)=f%:calc$(F2%)=Calc$
��
�:
�)� �icon_design(char%,func%,� w%,� h%)
Ȏ func% �
S  � 0:bfg%=&1700A53B:ffg%=&0700A535:� logosloaded% � lfg%=&0000011A � lfg%=ffg%
S  � 1:bfg%=&1700653B:ffg%=&07006535:� logosloaded% � lfg%=&0000611E � lfg%=ffg%
�
Ȏ char% �
I  � 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30:
F  !block%=keypadW%:block%!4=char%-9:ș "Wimp_GetIconState",,block%
?  w%=block%!16-block%!8:h%=block%!20-block%!12:iflags%=bfg%
*  � 32,33,34:w%=112:h%=44:iflags%=bfg%
	#  � 35:w%=80:h%=64:iflags%=bfg%

(  � 31:w%=44:h%=44:iflags%=&1700B53B
)  � 36,37,38:w%=48:h%=44:iflags%=bfg%
  � 39:iflags%=ffg%

7  � 40:� func%=0 � iflags%=&0700A53E � iflags%=ffg%
4  � 41,42,43,44,45:w%=52:h%=52:iflags%=&1700B53B
  � 59:iflags%=lfg%
  :iflags%=ffg%
�
%� w%=0 � h%=0 � iflags%=&00000000
�
:
� �get_field(ic%)
� F%
� F%+=1
$� field%(F%)=ic% � desc%(F%)=ic%
=F%
:
� �adjust_on(on%)
design%=on%:adjust%=on%
�lit(menu%(9),5,on%)
�lit(menu%(9),1,� on%)
�lit(menu%(9),2,� on%)
 �lit(menu%(9),3,� on%)
!�lit(menu%(9),4,� on%)
""�icon_bit(22,createW%,6,� on%)
#�
$:
%� �change_length(NL%,msg%)
&� EX%,klm%,S$,N%
'EX%=NL%-RA%
(� EX%=0 � �
)*dbasehandle%=�($database%+".Database")
*"�readsmarray(dbasehandle%,RA%)
+
Ȏ � �
,  � � msg%:�extend_dbase
-  � (EX%>0):
.W  � �confirm("Extend file from "+�(RA%)+" to "+�(NL%)+" records")=� � �extend_dbase
/  � (EX%<0):
0Y  � �confirm("Shorten file from "+�(RA%)+" to "+�(NL%)+" records")=� � �shorten_dbase
1�
2$Records%=�(RA%):N%=RA%
3"�writesmarray(dbasehandle%,N%)
4�close_file(dbasehandle%)
5%� msg% � addr=�moveto(key%,top,1)
6�
7:
8� �extend_dbase
9&� end%,P%,I%,key%,keybase%,KLM%,S$
:� key%=0 � Keys%
;  S$=�KL%(key%),".")
<  KLM%=KL%(key%)+13
=  P%=LH%+48+(NL%+1)*KLM%
>6  �extend_named_sliding_block(keyanchor%(key%),P%)
?   keybase%=!keyanchor%(key%)
@  P%=LH%+48+RA%*KLM%
A  � I%=RA% � EX%+RA%-1
B    !(keybase%+P%)=P%+KLM%
C    !(keybase%+P%+4)=0
D    $(keybase%+P%+8)=S$
E%    !(keybase%+P%+KL%(key%)+9)=I%
F    P%+=KLM%
G
  � I%
H  !(keybase%+P%)=0
I  !(keybase%+P%+4)=0
J  $(keybase%+P%+8)=S$
K"  !(keybase%+P%+KL%(key%)+9)=0
L
� key%
Mend%=�#dbasehandle%
N� I%=0 � EX%-1
O$  �#dbasehandle%=end%+I%*Length%
P  � J%=1 � fields%
Q    �#dbasehandle%,""
R
  � J%
S� I%
T#�#dbasehandle%=end%+EX%*Length%
URA%=NL%
V�
W:
X� �shorten_dbase
Y"� P%,L%,R%,s$,key%,keybase%,S$
Z� key%=0 � Keys%
[  S$=�KL%(key%),".")
\  KLM%=KL%(key%)+13
]   keybase%=!keyanchor%(key%)
^$  s$=$(keybase%+LH%+56+NL%*KLM%)
_+  � s$<>S$ � � �confirm(�msg(52))=� � �
`  P%=LH%+48+NL%*KLM%
a  !(keybase%+P%)=0
b  !(keybase%+P%+4)=0
c  $(keybase%+P%+8)=S$
d"  !(keybase%+P%+KL%(key%)+9)=0
e
� key%
f"�#dbasehandle%=Length%*(NL%+1)
gRA%=NL%
h�
i:
j,� �copy_database_spritefile(path$,leaf$)
k� sprites%
l1�create_named_sliding_block(sprsanchor%,1024)
mA� ### This is a temporary sprite area used simply to hold ###
nB� ### the sprite 'new_appl' whilst it is renamed and saved ###
osprites%=!sprsanchor%
p!sprites%=1024
qsprites%!8=16
r$� ### Initialise sprite area ###
s"ș "OS_SpriteOp",&109,sprites%
t/� ### Load !Sprites file from Resources ###
uHș "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites"
v;� ### Rename sprite 'new_appl' to new database name ###
w3ș "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
xA� ### Save spritefile (with renamed new_appl) as !Sprites ###
y4ș "OS_SpriteOp",&10C,sprites%,path$+".!Sprites"
z'� ### Do same for hi-res sprite ###
{"ș "OS_SpriteOp",&109,sprites%
|Jș "OS_SpriteOp",&10A,sprites%,"<PBase$Dir>.Resources.Temp.!Sprites22"
}3ș "OS_SpriteOp",&11A,sprites%,"new_appl",leaf$
~6ș "OS_SpriteOp",&10C,sprites%,path$+".!Sprites22"
%�scrap_sliding_block(sprsanchor%)
��
�:
�� �defaults(f$,N%,key%)
�$Records%=�(N%)
� �make_empty_index(N%,key%,�)
�!�save_recs(f$+".Database",N%)
�present%=7:�save_keys
�
design%=�
��get_it_in(f$)
��lit(menu%(0),2,�)
��
�:
�� �default_key
�� F%
�F%=�first_field
�
Ȏ � �
�'  � chartype%(F%)=3:KL%(0)=len%(F%)
�  � len%(F%)>3:KL%(0)=4
�  :KL%(0)=len%(F%)
��
�Index$(0)="PrimaryKey"
�
key%=0
�!KW%()=0:KW%(key%,0)=KL%(key%)
� KF%(key%,0)=F%:KF%(key%,1)=0
��set_keydata(key%)
��
�:
�� �new_tree(f%)
�� REC%,I%,ptr%,file%,old$
��old$="Length: "+�(KL%(0))+", Field(s): "+Tag$(KF%(0,0))+" "+Tag$(KF%(0,1))+", Chars: "+�(KW%(0,0))+","+�(KW%(0,1))+","+�(KW%(0,2))+","+�(KW%(0,3))
�/d%=�selected(keyW%,9):s%=�selected(keyW%,8)
�� d% � f%=0
�M$="Build index with "
�O� s% � M$+="records in same subfiles" � M$+="all records in subfile "+�(f%)
�M$+=" of current database"
�4� d% � M$+=", also restoring 'deleted' records."
�E� d% � � s% � M$+=" WARNING! Other indices will need rebuilding!"
�� � �confirm(M$)=� � �
�!�mark_files(0,RA%,� d%,s%,f%)
��copy_keydata(0)
�"RA%=�($Records%):f$=$database%
�'�scrap_sliding_block(keyanchor%(0))
��make_empty_index(RA%,0,�)
��close_window(keyW%)
��redraw(keypadW%)
�ptr%=!tempanchor%
��poll:�poll
�ș "Hourglass_On"
�*dbasehandle%=�($database%+".Database")
�� REC%=0 � RA%-1
�  file%=ptr%?REC%
�  � file%<>255 �
�    top=8*file%+LH%
�'    �readsmarray(dbasehandle%,REC%)
�    KEY$=�key2(0,1)
�     kl%=KL%(0):val$=�type(0)
�&    � KEY$<>"" � �insert(�,KEY$,0)
�  �
�0  ș "Hourglass_Percentage",(REC%*100) � RA%
�
� REC%
��close_file(dbasehandle%)
�"newtree%=�:design%=�:adjust%=�
�%�scrap_sliding_block(tempanchor%)
�ș "Hourglass_Off"
�present%=7
�� �selected(passW%,16) �
�A  �#loghandle%,"Primary key altered. Previous structure was:"
�  �#loghandle%,old$
��
�ș "Wimp_CreateMenu",,-1
�*block%!8=0:block%!12=wi%:block%!16=ic%
�%ș "Interface_SlabButton",,block%
��get_it_in($database%)
��
�:
�� �reformat(f$)
�4� I%,F,REC%,dfields%,DLength%,chdd,z%,blobs%,ex%
�'� DTag$(),F%(),F1%(),L%(),l$(),c$()
�F$(0)=""
�"ș "OS_File",5,f$+".Form" � z%
�
Ȏ � �
�  � z%<>1:�softerror("",19)
�'  � f$=$database%:�softerror("",36)
�  
�$  blobs%=�find_blobs($database%)
�  F=�(f$+".Form")
�  �#F,dfields%
�X  � DTag$(dfields%),F%(dfields%),F1%(fields%),L%(dfields%),l$(dfields%),c$(dfields%)
�  � I%=1 � dfields%
�F    �#F,Desc$,DTag$(I%),xd%,yd%,xf%,yf%,L%(I%),char%,extra%,extra%
�    DLength%+=L%(I%)+1
�
  � I%
�	  �#F
�  chdd=�(f$+".Database")
�  �compare
�  ș "Hourglass_On"
�  � REC%=0 � RA%
�    �#chdd=REC%*DLength%
�(    �read(fields%,�,REC%,$database%)
�    � I%=1 � dfields%
�      S$=field$(F%(I%))
�)      � �(S$)>L%(I%) � S$=�S$,L%(I%))
�      �#chdd,S$
�    � I%
�    ex%=-1
�    ȕ ex%<blobs%
�      ex%+=1:F%=Ext%(ex%)
�F      �copy_blob($database%,f$,REC%,REC%,F%,F1%(F%),chartype%(F%))
�	    �
�2    ș "Hourglass_Percentage",(REC%*100) � RA%
�  � REC%
�  ș "Hourglass_Off"
�  �close_file(chdd)
�)  ș "OS_File",18,f$+".Database",&7f2
�I  ș "OS_CLI","Copy "+$database%+".PrimaryKey "+f$+".PrimaryKey ~C~V"
�C  ș "OS_CLI","Copy "+$database%+".Colours "+f$+".Colours ~C~V"
�H  ș "OS_CLI","Copy "+$database%+".ValTables "+f$+".ValTables ~CR~V"
�D  ș "OS_CLI","Copy "+$database%+".Indices "+f$+".Indices ~CR~V"
�F  ș "OS_CLI","Copy "+$database%+".PrintRes "+f$+".PrintRes ~CR~V"
�  � link$(0)="LOADED" �
�    lk=�(f$+".Link")
�    � F%=1 � dfields%
�      �#lk,l$(F%)
�    � F%
�    �close_file(lk)
�  �
�  � calc$(0)="LOADED" �
�    cl=�(f$+".Calc")
    � F%=1 � dfields%
      �#cl,c$(F%)
    � F%
    �close_file(cl)
  �
  �close_window(reformW%)
�
reform$=""
D� �selected(passW%,16) � �#loghandle%,"Record structure changed"
	�

:
� �compare
� source%,dest%

� dest%=1 � dfields%
  source%=fields%+1
  �
    source%-=1
.  � source%=0 � Tag$(source%)=DTag$(dest%)
*  F%(dest%)=source%:F1%(source%)=dest%
  � source%>0 �
     l$(dest%)=link$(source%)
     c$(dest%)=calc$(source%)
  �
� dest%
�
:
� �merge_files(f$,fi%)
7� Rec%,ptr%,file%,d%,s%,z%,RUM%,RAM%,NL%,ex%,blobs%
&ș "OS_File",5,f$+".Database" � z%

Ȏ � �
  � z%<>1:�softerror("",29)
'  � f$=$database%:�softerror("",15)
 &  � � �identical:�softerror("",21)
!  
"7  s%=�selected(reformW%,2):d%=�selected(reformW%,3)
#  � d% � fi%=0
$  M$="Merge "+f$+" with "
%A  � s% � M$+="corresponding subfiles" � M$+="subfile "+�(fi%)
&   M$+=" of current database"
'3  � d% � M$+=", also restoring deleted records"
(B  � d% � � s% � M$+=". WARNING! Indices will need rebuilding!"
)  � �confirm(M$)=� �
*0    ș "OS_File",5,f$+".Database" � ,,,,len%
+    RAM%=(len% � Length%)-1
,0    �open_index(f$+".PrimaryKey",MaxKeys%+1)
-0    �mark_files(MaxKeys%+1,RAM%,� d%,s%,fi%)
.(    keybase%=!keyanchor%(MaxKeys%+1)
/-    �count(MaxKeys%+1,RUM%):�count(0,RU%)
0    NL%=RU%+RUM%
1    ș "Hourglass_On"
2)    � NL%>RA% � �change_length(NL%,�)
3&    blobs%=�find_blobs($database%)
4    ptr%=!tempanchor%
5    � Rec%=0 � RAM%-1
6      file%=ptr%?Rec%
7      � file%<>255 �
8        top=8*file%+LH%
9$        �read(fields%,�,Rec%,f$)
:         �write(fields%,key%)
;        ex%=-1
<        ȕ ex%<blobs%
=!          ex%+=1:F%=Ext%(ex%)
>E          �copy_blob(f$,$database%,Rec%,REC%,F%,F%,chartype%(F%))
?
        �
@7        ș "Hourglass_Percentage",(Rec%*100) � RUM%
A      �
B    � Rec%
C    ș "Hourglass_Off"
D    �close_window(reformW%)
E)    �scrap_sliding_block(tempanchor%)
F4    �scrap_sliding_block(keyanchor%(MaxKeys%+1))
G!    file%=fi%:top=8*file%+LH%
H     addr=�moveto(key%,top,1)
I  �
J�
Kreform$=""
LC� �selected(passW%,16) � �#loghandle%,"Records merged from "+f$
M�
N:
O� �identical
P� I%,F,dfields%,different%
QF=�(f$+".Form")
R�#F,dfields%
S&� dfields%<>fields% � different%=�
T ȕ I%<fields% � � different%
U  I%+=1
V=  �#F,Desc$,Tag$,xd%,yd%,xf%,yf%,len%,char%,extra%,extra%
W%  � len%<>len%(I%) � different%=�
X�
Y�#F
Z=� different%
[:
\$� �mark_files(key%,RA%,d%,s%,f%)
]� P%,I%,M,file%,top,ptr%
^2�create_named_sliding_block(tempanchor%,RA%+1)
_ș "Hourglass_On"
`ptr%=!tempanchor%
a� I%=0 � RA%-1
b  ptr%?I%=d%
c� I%
d
� d% �
e  � file%=0 � 5
f    top=8*file%+LH%
g!    P%=�neighbour(key%,top,1)
h    ȕ P%<>top
i       S%=�rec_no(k$,key%,P%)
j+      � s% � ptr%?S%=file% � ptr%?S%=f%
k"      P%=�neighbour(key%,P%,1)
l	    �
m
  � file%
n�
oș "Hourglass_Off"
p�
q:
r!� �print_tree(key%,file%,PR$)
s� L%(),COL%,levels%,depth%
t�read_print_options
ureportdest$="Window"
vkeybase%=!keyanchor%(key%)
wP%=!(keybase%+top)
xș "Hourglass_On"
y�traverse(P%,�)
zlevels%=depth%-2:COL%=0
{� L%(levels%)
|�tree_heading
}P%=!(keybase%+top)
~�traverse(P%,�)
H$=" No. nodes     1"
�H1$=" Max nodes     1"
�� L%=1 � levels%
�  � L%<40 �
�    L$=�(L%(L%))
�    L$=�6-�(L$)," ")+L$
�    M$=�(2^L%)
�0    � �(M$)>5 � M$=BL$ � M$=�6-�(M$)," ")+M$
�    H$+=L$:H1$+=M$
�  �
�� L%
��rule_off(45)
�:$(!lineanchor%)=H$:�list_line(-1,lineanchor%,�(H$),32)
�<$(!lineanchor%)=H1$:�list_line(-1,lineanchor%,�(H1$),32)
�<$(!lineanchor%)=LH$:�list_line(-1,lineanchor%,�(LH$),32)
��rule_off(45)
�ș "Hourglass_Off"
�format$="tree":tkey%=key%
��screen_list
�pitch$=�pitch("2")
��lit(menu%(18),1,�)
��
�:
�� �tree_heading
�� zero%,len%
�BL$=�6," ")
�LH$=" Level No.  Root"
�� L%=1 � levels%
�  L$=�(L%)
�  � L%<10 � L$="0"+L$
�  � L%<40 �
�    LH$+="    "+L$
�    len%=�(LH$)
�  �
�� L%
�U$=" "+�len%-1,"-")
�LenLine%=len%+4
�Count%=0
�"count%=�count_recs(key%,zero%)
�Dtextblocksize%=(count%+11)*LenLine%:textblockinc%=textblocksize%
�;�extend_named_sliding_block(textanchor%,textblocksize%)
�7�extend_named_sliding_block(lineanchor%,LenLine%+4)
�TextPtr%=!textanchor%
�recblocksize%=400
�9�extend_named_sliding_block(recanchor%,recblocksize%)
��rule_off(32)
��rule_off(45)
�Z�send_title("Tree Analysis (subfile:"+�(file%)+", key:"+�(key%)+", "+Index$(key%)+")")
��rule_off(32)
�<$(!lineanchor%)=LH$:�list_line(-1,lineanchor%,�(LH$),32)
��rule_off(45)
��
�:
�� �traverse(P%,Z%)
�
� string$
�COL%=COL%+1
�� COL%>depth% � depth%=COL%
�� P%<0 � �
�L%=!(keybase%+P%)
�R%=!(keybase%+P%+4)
�S$=$(keybase%+P%+8)
�� S$="" � S$="<null>"
�%rec%=!(keybase%+P%+8+KL%(key%)+1)
�
� Z% �
�  L%(COL%-1)=L%(COL%-1)+1
�  � PR$="ALL" �
�    � COL%<=40 �
�*      string$=�COL%*6+10-�(S$)," ")+S$
�L      $(!lineanchor%)=string$:�list_line(rec%,lineanchor%,�(string$),32)
�      �
�1      string$=" "+S$+" (level "+�(COL%-1)+")"
�L      $(!lineanchor%)=string$:�list_line(rec%,lineanchor%,�(string$),32)
�	    �
�  �
��
��traverse(L%,Z%)
�COL%=COL%-1
�L%=!(keybase%+P%)
�R%=!(keybase%+P%+4)
�S$=$(keybase%+P%+8)
�%rec%=!(keybase%+P%+8+KL%(key%)+1)
��traverse(R%,Z%)
�COL%=COL%-1
��
�:
�� �balance(key%)
�T� recptr%,top,file%,flagptr%,balptr%,I%,N%,A%,max%,done%,highest%,avail%,seglen%
�� recs%(),ptr%()
�� recs%(5),ptr%(5)
�newtree%=�
�seglen%=KL%(key%)+5
�7�extend_named_sliding_block(recanchor%,seglen%*RA%)
�7�create_named_sliding_block(balanchor%,seglen%*RA%)
�0�create_named_sliding_block(flaganchor%,RA%)
�Arecptr%=!recanchor%:flagptr%=!flaganchor%:balptr%=!balanchor%
�� I%=0 � RA%-1
�  flagptr%?I%=255
�� I%
�>� Bytes are changed from 255 to 0 where records are in use
�ș "Hourglass_On"
�� file%=0 � 5
�  ptr%(file%)=recptr%
�  top=8*file%+LH%
�.  recs%(file%)=�count_recs(key%,recptr%)-1
�  max%+=recs%(file%)+1
�� file%
�!�make_empty_index(RA%,key%,�)
�ș "Hourglass_LEDs",%11
�� file%=0 � 5
�  top=8*file%+LH%
�  � recs%(file%)>=0 �
�    recptr%=ptr%(file%)
�    N%=1
�	    �
�      N%=N%+N%
�    � N%>recs%(file%)+2
�    step%=N%
�    N%=(N% � 2)-1
�    start%=N%
�    C%=0
�	    �
�      start%=start% � 2
�      end%=N%-start%-1
�      step%=step% � 2
�$      � I%=start% � end% � step%
�9        A%=recptr%+seglen%*(I%*(recs%(file%)+1) � N%)
�=        balptr%!C%=!A%:$(balptr%+C%+4)=$(A%+4):!A%=-!A%-1
�        C%+=seglen%
�      � I%
    � step%=2
&    kl%=KL%(key%):val$=�type(key%)
%    � I%=0 � C%-seglen% � seglen%
.      REC%=balptr%!I%:KEY$=$(balptr%+I%+4)
      �insert(�,KEY$,key%)
      done%+=1
6      ș "Hourglass_Percentage",(done%*100) � max%
    � I%
    � I%=0 � recs%(file%)
	#      REC%=recptr%!(seglen%*I%)

      � REC%>=0 �
(        KEY$=$(recptr%+seglen%*I%+4)
         �insert(�,KEY$,key%)

        done%+=1
8        ș "Hourglass_Percentage",(done%*100) � max%
      �
    � I%
  �
� file%
ș "Hourglass_LEDs",%00
keybase%=!keyanchor%(key%)
nodesize%=8+KL%(key%)+1+4
avail%=!keybase%
� I%=0 � highest%
  � flagptr%?I%=255 �
+    !(keybase%+avail%+8+KL%(key%)+1)=I%
    avail%+=nodesize%
  �
� I%
ș "Hourglass_Off"
$�scrap_sliding_block(balanchor%)
$�scrap_sliding_block(recanchor%)
 %�scrap_sliding_block(flaganchor%)
!�save_keys
"newtree%=�
#K� �selected(passW%,16) � �#loghandle%,"Index "+Index$(key%)+" balanced"
$�
%:
&� �duplicates(dkey%,dfile%)
'7� P$,S$,RP$,RS$,daddr,dtop,RP%,RS%,count%,examined%
(� �
)� � �:� �:�abort_dup:�
*"count%=�count_recs(key%,zero%)
+�read_print_options
,Breportdest$="Window":format$="dup":Count%=0:LenLine%=KL%(0)+23
-<textblocksize%=100*LenLine%:textblockinc%=textblocksize%
.;�extend_named_sliding_block(textanchor%,textblocksize%)
/7�extend_named_sliding_block(lineanchor%,LenLine%+4)
0TextPtr%=!textanchor%
1recblocksize%=400
29�extend_named_sliding_block(recanchor%,recblocksize%)
3�close_window(datadicW%)
4�rule_off(32)
5aline$=" Duplicated primary keys":$(!lineanchor%)=line$:�list_line(-1,lineanchor%,�(line$),32)
6�rule_off(45)
7dtop=8*dfile%+LH%
8"daddr=�neighbour(dkey%,dtop,1)
9ș "Hourglass_On"
:ȕ daddr<>dtop
;  ș "OS_Byte",229,0
<S  S$=$(!keyanchor%(dkey%)+daddr+8):RS%=!(!keyanchor%(dkey%)+daddr+9+KL%(dkey%))
=;  RS$=�(RS%):RS$=" Record No."+�7-�(RS$)," ")+RS$+"   "
>  � S$=P$ �
?    line$=RP$+P$
@E    $(!lineanchor%)=line$:�list_line(RP%,lineanchor%,�(line$),32)
A    line$=RS$+S$
BE    $(!lineanchor%)=line$:�list_line(RS%,lineanchor%,�(line$),32)
C  �
D  P$=S$:RP%=RS%:RP$=RS$
E  examined%+=1
F6  ș "Hourglass_Percentage",examined%*100 � count%
G%  daddr=�neighbour(dkey%,daddr,1)
H  �poll
I�
J�rule_off(32)
Kș "Hourglass_Off"
L�screen_list
M�
N:
O� �abort_dup
Pș "Hourglass_Off"
Q�screen_list
R� �=17 �
S  �softerror("",67)
T  � �wimp_error(�,�,�,�$)
U�
V�
W:
X� �stripspaces(s$)
Yȕ �s$)=" "
Z
  s$=�s$)
[�
\=s$
]:
^� >RAMtree
_:
`K� Index handling ------------------------------------------------------
a:
b� �neighbour(key%,addr%,d%)
c� R%,S%,p%,keybase%
dkeybase%=!keyanchor%(key%)
ep%=d%*4
fR%=!(keybase%+addr%+p%)
g� R%<0 � =-R%
hp%=4-p%
i�
j  addr%=R%
k  S%=!(keybase%+addr%+p%)
l  � S%>0 � R%=S%
m� S%<=0
n=R%
o:
p� �rec_no(� k$,key%,addr%)
q#k$=$(!keyanchor%(key%)+addr%+8)
r-=!(!keyanchor%(key%)+addr%+8+KL%(key%)+1)
s:
t!� �scan_file(c$,key%,action%)
u'� REC%,examined%,subtotal%,X%,Y%,n$
vn$="0123456789."
w%subtotal%=�count_recs(key%,zero%)
xȕ �(c$)=�
y  ș "OS_Byte",229,0
z  REC%=�rec_no(k$,key%,P%)
{%  �readsmarray(dbasehandle%,REC%)
|  examined%+=1
}  � �(Search$)=� �
~    Ȏ action% �
      � 0:�get_lengths
�!      � 1:�print_record(REC%)
�-      � 2:ptr%?REC%=255:� ### earmark ###
�"      � 3:�write_csv_rec(REC%)
�;      � 4:KEY$=�key2(newkey%,1):�insert(�,KEY$,newkey%)
�       � ### create index ###
�      � 5:
�      S$=F$(Fieldnumber%)
�      � numeric% �
�        X%=0:Y%=0
�        � X%+=1
�)        � X%>�(S$) � �n$,�S$,X%,1))>0
�        � X%<=�(S$) �
�          Y%=X%
�          � Y%+=1
�+          � Y%>�(S$) � �n$,�S$,Y%,1))=0
�
        �
�;        S$=�S$,X%-1)+�(�(�S$,X%,Y%-X%)+New$))+�S$,Y%)  
�        � S$=New$
�      �
�      � �(S$)>TextLength% �
�        �softerror("",10)
�
        �
�        F$(Fieldnumber%)=S$
�,        �writesmarray(dbasehandle%,REC%)
�      �
�!      � ### global change ###
�	    �
�  �
�  P%=�neighbour(key%,P%,1)
�;  ș "Hourglass_Percentage",(examined%*100) � subtotal%
��
��
�:
�� �search(S$,key%,M%)
�� P%,found%,info$,keybase%
�keybase%=!keyanchor%(key%)
�Z%=0:P%=top:ident%=�
��
�  L%=P%
�  P%=!(keybase%+L%+Z%)
�  � P%<=0 � P%=-L%:found%=�
�  info$=$(keybase%+P%+8)
�  rec%=�rec_no(k$,key%,P%)
�1  � �(val$+"(S$)="+val$+"LEFT$(info$,kl%)") �
�    Ȏ M% �
�      � 0:ident%=(key%=0)
�      � 1:found%=�
�$      � 2:� rec%=REC% � found%=�
�	    �
�  �
�8  � � found% � Z%=-�(val$+"(S$)>="+val$+"(info$)")*4
�� found%
�=P%
�:
�:� ### M%=0 - Find leaf position at which to insert ###
�?� ### M%=1 - Find first match in tree (if there is one) ###
�H� ### M%=2 - Find exact matching record, checking for record no. ###
�:
�� �insert(R%,� S$,key%)
�� P%,A%,kl%,keybase%,abort%
�keybase%=!keyanchor%(key%)
�kl%=KL%(key%)
�A%=!keybase%:F%=A%
�P%=-�search(S$,key%,0)
�� ident% �
�  Ȏ � �
�!    � � �selected(passW%,15):
�+    �softerror(" ("+S$+")",37):abort%=�
�
    :
�>    � dup% � � � �confirm(�msg(45)+" ("+S$+")") � abort%=�
�  �
��
�� abort% � S$="*Failed*":�
�� !(keybase%+F%)>0 �
�  A%=!(keybase%+F%)
�  �
�  incr%=�($Increment%)
�  � incr%>0 �
�#    �change_length(RA%+incr%,�)
�"    keybase%=!keyanchor%(key%)
�    A%=!keybase%:F%=A%
�    � S$="*Failed*"
�  �
��
�(� S$="*Failed*" � �softerror("",2):�
�&� R% � REC%=!(keybase%+F%+8+kl%+1)
�'!(keybase%+F%+Z%)=!(keybase%+P%+Z%)
�!(keybase%+F%+(4-Z%))=-P%
�$(keybase%+F%+8)=S$
�%!(keybase%+F%+8+KL%(key%)+1)=REC%
�!(keybase%+P%+Z%)=F%
�!keybase%=A%
�� key%=0 � RU%+=1
��
�:
�� �delete(� S$,key%)
�� P%,A%,kl%,keybase%
�keybase%=!keyanchor%(key%)
�A%=!keybase%
�kl%=KL%(key%)
�P%=�search(S$,key%,2)
�N� P%<0 � �softerror(" ("+S$+": "+Index$(key%)+" index)",1):S$="*Failed*":�
�PR%=�neighbour(key%,P%,0)
�SU%=�neighbour(key%,P%,1)
�'!(keybase%+L%+Z%)=!(keybase%+P%+Z%)
�	Q%=P%
�ZL%=4-Z%
�P1%=!(keybase%+P%+ZL%)
�
� P1%>0 �
�  info$=$(keybase%+P1%+8)
�  P%=-�search(info$,key%,0)
�  !(keybase%+P%+Z%)=P1%
��
�3� !(keybase%+PR%+4)<=0 � !(keybase%+PR%+4)=-SU%
�3� !(keybase%+SU%+0)<=0 � !(keybase%+SU%+0)=-PR%
�!(keybase%+Q%)=A%
�!keybase%=Q%
�� key%=0 � RU%-=1
��
�:
�� �save_keys
�� keyN%
�� present%<>7 � �
�ș "Hourglass_On"
�5keybase%=!keyanchor%(0):keybase%!4=�($Increment%)
�ȕ !keyanchor%(keyN%)>0
�!  keybase%=!keyanchor%(keyN%)
�!  keybase%?72=0:keybase%?73=0
W  ș "SlidingHeap_DescribeBlock",slidingheapbase%,keyanchor%(keyN%) � ,,filelength%
-  � keyN% � index$="Indices." � index$=""
]  ș "OS_File",10,$database%+"."+index$+Index$(keyN%),&7F0,,keybase%,keybase%+filelength%
  keyN%+=1
5  ș "Hourglass_Percentage",keyN%*100 � (Keys%+1)
�
ș "Hourglass_Off"
�
:
	$� �readsmarray(filehandle%,REC%)

� loop%
�#filehandle%=REC%*Length%
� loop%=1 � fields%

  F$(loop%)=�#filehandle%
� loop%
�
:
� �writesmarray(F,� R%)
� loop%
�#F=R%*Length%
� loop%=1 � fields%
  �#F,F$(loop%)
� loop%
	R%+=1
�
:
� �check_save(T%)
� time%
%ș "OS_ReadMonotonicTime" � time%
� (time% � T%)<10 �
P� buttonfield%(19)>0 � wi%=mainW%:ic%=buttonfield%(19) � wi%=keypadW%:ic%=19
  Ȏ autosave% �
     � 1:
!    delay%=�
"    � loop%=0 � 2
#      delay%+=50
$0      block%!8=1:block%!12=wi%:block%!16=ic%
%+      ș "Interface_SlabButton",,block%
&      � � �>delay%
'      � 1,-15,180,5
(      block%!8=0
)+      ș "Interface_SlabButton",,block%
*      delay%+=50
+      � � �>delay%
,    � loop%
-!    � 2:�mouse(0,0,4,wi%,ic%)
.  �
/�
0�
1:
2� �set_auto(mode%)
3$�tick_one(menu%(12),0,2,2-mode%)
4autosave%=mode%
58saveint%=�($Interval%):$Interval%=�(saveint%)+" min"
6�
7:
8� �set_autobalance(status%)
9�tick(menu%(21),0,status%)
:autobalance%=status%
;(� � autobalance% � $Every%="25 recs"
<:balint%=�($Every%):$Every%=�(balint%)+" recs":added%=0
=�
>:
?L� Calculations ---------------------------------------------------------
@:
A� �calc_link(T$,type%)
B=� ### Sets up calculation formula window & menu entry ###
C$CalcFunc%=T$
D)$CalcTitle%=T$:calclink%=Fieldnumber%
E)�split_link(calclink%,real$,visible$)
FȎ type% �
G3  � 6,7:$CalcForm%=Tag$(calclink%)+"="+visible$
H  � 47:
I  $CalcForm%=visible$
J!  �icon_bit(22,calcW%,2,off%)
K  �deselect(calcW%,2)
L�
M�
N:
O� �calc_formula(S$)
P@� ### Parses calculation formula (S$) & builds calc$(I%) ###
Q� I%,P%,t$,s$,C$,time%
R/C$=�~(calclink%):� calclink%<16 � C$="0"+C$
S#� $CalcFunc%="Set base value" �
T  � S$="" � S$="0"
U   calc$(calclink%)=S$+"|"+S$
V  calc$(0)="LOADED"
W  �
X*  P%=�S$,"="):S$=�S$,P%+1):visible$=S$
Y  � I%=1 � fields%
Z    t$=Tag$(I%)
[    � t$<>"" �
\      P%=0
]      �
^        P%=�S$,t$,P%+1)
_        � P%>0 �
`           Ȏ chartype%(I%) �
a>            � 3,6,46,47,54,56,57:s$="VAL($Rf%("+�(I%)+"))"
b=            � 8:s$="FNseconds($Rf%("+�(I%)+"),1)":time%=�
c            :
d)            Ȏ chartype%(calclink%) �
e)              � 6:s$="FNn("+�(I%)+")"
f*              � 7:s$="$Rf%("+�(I%)+")"
g            �
h          �
i+          S$=�S$,P%-1)+s$+�S$,P%+�(t$))
j          update$(I%)+=C$
k
        �
l      � P%=0
m	    �
n
  � I%
o-  � �visible$,"TIME$")>0 � update$(0)+=C$
p>  � time%=� � chartype%(calclink%)=7 � S$="FNtime("+S$+")"
q!  � �(S$)+�(visible$)+2<256 �
r,    calc$(calclink%)="#"+S$+"#"+visible$
s    calc$(0)="LOADED"
t7    � �selected(calcW%,2) � �recalculate(calclink%)
u    � �softerror("",44)
v  �
w�
xcalclink%=0
y.� (b% � %111)=4 � ș "Wimp_CreateMenu",,-1
z�
{:
|� �recalculate(F%)
}<� F,I%,R%,k$,P%,real$,visible$,subtotal%,zero%,examined%
~"�split_link(F%,real$,visible$)
S� �confirm("Recalculate "+Tag$(F%)+"="+visible$+" for existing records?")=� � �
�%subtotal%=�count_recs(key%,zero%)
�ș "Hourglass_On"
�*dbasehandle%=�($database%+".Database")
�P%=�neighbour(key%,top,1)
�ȕ P%<>top
�  R%=�rec_no(k$,key%,P%)
�#  �readsmarray(dbasehandle%,R%)
�  � I%=1 � fields%
�    $Rf%(I%)=F$(I%)
�
  � I%
�  Ȏ chartype%(F%) �
�    � 6:
�    F=�(real$):F$=�(F)
�+    � fix%(F%)>0 � F$=�fix_point(F$,F%)
�    � 7:
�    � �
�(    � � �:� �:�softerror(real$,73):�
�    F$=�(real$)
�    � �
�  �
�#  � �(F$)<=len%(F%) � F$(F%)=F$
�$  �writesmarray(dbasehandle%,R%)
�  P%=�neighbour(key%,P%,1)
�  examined%+=1
�9  ș "Hourglass_Percentage",examined%*100 � subtotal%
��
�ș "Hourglass_Off"
��close_file(dbasehandle%)
�� I%=1 � fields%
�  $Rf%(I%)=field$(I%)
�� I%
��display(key%,addr)
��
�:
�� �sums(� F$,R%,type%)
�� V
�� F$<>"" �
�  Ȏ type% �
�    � 8:V=�seconds(F$,1)
�    :V=�(F$)
�  �
�  Sum(R%,0)+=1
�  Sum(R%,1)+=V
�  Sum(R%,3)+=V*V
��
��
�:
�� �ctotals(flag%)
�%� F%,I%,J%,N%,R%,S%,base%,pos%,F$
�� S$(),f%()
�� S$(3),f%(3)
�base%=!lineanchor%
�'S$()="Items","Sum","Mean","St.Dev."
�� I%=1 � �(Form$)-1 � 2
�  F%=�fnum(�Form$,I%,2))
�  R%=calcrow%?F%
�  Ȏ chartype%(F%) �
�    � 3,6,8,46,47,54,56,57:
�    � Sum(R%,0)>0 �
�'      Sum(R%,2)=Sum(R%,1)/Sum(R%,0)
�6      Sum(R%,3)=�(Sum(R%,3)/Sum(R%,0)-Sum(R%,2)^2)
�	    �
�  �
�� I%
�� J%=0 � 3
�  pos%=base%
�  � flag%>0 �
�>    N%=0:start%=1:F$=�Lmargin%-�(S$(J%))-1," ")+S$(J%)+" "
�    � N%=1:start%=3
�&    L%=Tab%(1)-Lmargin%-�(spacer$)
�N    � L%>=7 � F$=margin$+�tab(S$(J%),N%) � F$=margin$+�tab(�S$(J%),L%),N%)
�  �
�3  �heap_store(lineanchor%,LenLine%,0,pos%,0,F$)
�  � �(Form$)>2 � start%=1 �
�$    � I%=start% � �(Form$)-1 � 2
�&      F%=�fnum(�Form$,I%,2)):F$=""
�      N%+=1
�      Ȏ chartype%(F%) �
�#        � 3,6,8,46,47,54,56,57:
�        R%=calcrow%?F%
�Q        � chartype%(F%)=8 � result$=�time(Sum(R%,J%)) � result$=�(Sum(R%,J%))
�T        � �selected(pselectW%,R%*5-3+J%) �:F$=�justify(result$,N%,N%-1):f%(J%)=1
�      �
�@      �heap_store(lineanchor%,LenLine%,0,pos%,0,�tab(F$,N%))
�    � I%
�=    � f%(J%)=1 � �list_line(-1,lineanchor%,pos%-base%,32)
�  �
�� J%
� � Ǝ(f%())>0 � �rule_off(45)
��
�:
�� �margin_warn
�� f%,F%,R%,J%
�F%=�fnum(�Form$,2))
�Ȏ chartype%(F%) �
�  � 3,6,46,47,54,56,57:
�  R%=calcrow%?F%
�  � J%=0 � 3
�.    � �selected(pselectW%,R%*5-J%) � f%=F%
�
  � J%
��
�?� f%>0 � Lmargin%<9 � �softerror(" ("+Tag$(f%)+").",92):=-1
�=f%
�:
�� �tab(F$,N%)
�� L%
�L%=�(F$)+�(spacer$)
�,� Tab%(N%)-Tab%(N%-1)-L%<=0 �=F$+spacer$
�,=F$+�Tab%(N%)-Tab%(N%-1)-L%," ")+spacer$
�:
�� �justify(f$,x%,x1%)
�� L%
�$L%=Tab%(x%)-Tab%(x1%)-�(spacer$)
�,� �(f$)>L% �=�f$,L%) �=�L%-�(f$)," ")+f$
�:
�� �execute_file(f$)
�6� F,P%,name$,command$,finished%,firstquery%,state%
�� � �confirm(�msg(68)) � �
�� �
�G� �selected(printW%,39) � reportdest$="File" � reportdest$="Window"
�F=�(f$)
�� Script file signature
�
junk$=�#F
�� � �:� �:�abort_script:�
�ȕ �(�#F � finished%)
�  ș "OS_Byte",229,0
�  line$=�#F
�  space%=�line$," ")
w  � space%=0 � command$=line$:params$="" � command$=�line$,space%-1):params$=�line$,space%+1):state%=(params$="ON")
  Ȏ command$ �
    � "!COMMENT":
    � "!SCRIPT":
    ImpCom$=""
    � params$="END" �
      finished%=�
:      � �execute_file($database%+".PrintRes."+params$)
	    �
	    � "!DELETE":

    � present%=7 �
      RecF%=�
0      � params$="" � key$=�#F � key$=params$

5      �select(keypadW%,25):�deselect(keypadW%,24)
       addr=�find(key$,0,0,�)
      � RecF%=� �
        addr=�shift(0,0,0)
$        addr=�moveto(key%,top,1)
      �
	    �
    � "!INSERT":
    � present%=7 �
      subfile%=�(params$)
)      �read(fields%,�,RA%,$database%)
      � loop%=1 � fields%
)        $Rf%(loop%)=��#F,len%(loop%))
      �
      �write(fields%,key%)
	    �
    � "!QUERY":
    � params$<>"" �
      P%=�params$,",")
 !      formula$=�params$,P%+1)
!      name$=�params$,P%-1)
"      name$=�name$,10)
#$      Search$=�parse(formula$,�)
$$      $�text(matchW%,0)=formula$
%!      �redraw_icon(matchW%,0)
&      ș "Hourglass_On"
'      scripton%=�
(      �do_it(Search$,�)
)#      � �selected(printW%,38) �
*?        filename$=$database%+".PrintJobs."+name$:Type%=&FFF
+;        Start%=!textanchor%:End%=Start%+Count%*LenLine%
,        Ȏ � �
-)          � ImpCom$="":$Start%=pitch$
.9          � ImpCom$<>"" � firstquery%=�:firstquery%=�
/          :$Start%=ImpCom$
0
        �
1.        �save(filename$,Type%,Start%,End%)
2      �
3	    �
4    � "!SELECTION":
5    � params$<>"" �
63      filename$=$database%+".PrintRes."+params$
7-      ș "OS_File",5,filename$ � ,,ftype%
8#      ftype%=(ftype%>>8) � &FFF
94      � ftype%=&7F3 � �drag_selection(filename$)
:      � �clear_selection
;	    �
<    � "!PRINTOPTS":
=    � params$<>"" �
>3      filename$=$database%+".PrintRes."+params$
?-      ș "OS_File",5,filename$ � ,,ftype%
@#      ftype%=(ftype%>>8) � &FFF
A2      � ftype%=&7F5 � �drag_options(filename$)
B<      � �drag_options("<Pbase$Dir>.Resources.PrintOpts")
C	    �
D.    � "!CASE":�set_icon(matchW%,16,state%)
E/    � "!INDEX":�set_icon(matchW%,23,state%)
F0    � "!EXPAND":�set_icon(printW%,11,state%)
G.    � "!DATE":�set_icon(printW%,19,state%)
H/    � "!UPPER":�set_icon(printW%,12,state%)
I/    � "!FIRST":�set_icon(printW%,10,state%)
J3    � "!UNDERLINE":�set_icon(printW%,29,state%)
K0    � "!SHRINK":�set_icon(printW%,40,state%)
L-    � "!TITLE":$�text(printW%,18)=params$
M,    � "!PAGE":$�text(printW%,16)=params$
N1    � "!LINESPACE":$�text(printW%,17)=params$
O/    � "!LMARGIN":$�text(printW%,30)=params$
P/    � "!TMARGIN":$�text(printW%,32)=params$
Q.    � "!SPACER":$�text(printW%,43)=params$
R0    � "!COLWIDTH":$�text(printW%,45)=params$
S    � "!HEADINGS":
T    Ȏ �u(params$) �
U7      � "D":�select(printW%,2):�deselect(printW%,1)
V3      :�select(printW%,1):�deselect(printW%,2)
W	    �
X    � "!PITCH":
Y3    �deselect(printW%,�selected_esg(printW%,2))
Z    Ȏ �(params$) �
[       � 5:�select(printW%,4)
\!      � 10:�select(printW%,7)
]!      � 12:�select(printW%,8)
^      :�select(printW%,6)
_	    �
`    � "!FORMAT":
a3    �deselect(printW%,�selected_esg(printW%,3))
b"    �icon_bit(22,printW%,15,�)
cM    P%=�params$," "):� P%>0 � cols$=�params$,P%+1):params$=�params$,P%-1)
d    Ȏ params$ �
e*      � "VERTICAL":�select(printW%,24)
f'      � "TABLE":�select(printW%,25)
g"      $�text(printW%,15)=cols$
h$      �icon_bit(22,printW%,15,�)
i'      � "LABEL":�select(printW%,26)
j      :�select(printW%,23)
k	    �
l    � "!DESTINATION":
m3    �deselect(printW%,�selected_esg(printW%,4))
n    Ȏ params$ �
o9      � "FILE":�select(printW%,39):reportdest$="File"
p?      � "PRINTER":�select(printW%,41):reportdest$="Printer"
q4      :�select(printW%,38):reportdest$="Window"
r	    �
s    � "!LABEL":
t    params$+=","
u    � I%=1 � 7
v      P%=�params$,",")
w4      par$=�params$,P%-1):params$=�params$,P%+1)
x      Ȏ I% �
y        � 1:
z7        �deselect(labelW%,�selected_esg(labelW%,1))
{        Ȏ par$ �
|&          � "1":�select(labelW%,0)
}&          � "2":�select(labelW%,1)
~"          :�select(labelW%,2)

        �
�&        � 2:$�text(labelW%,4)=par$
�&        � 3:$�text(labelW%,6)=par$
�'        � 4:$�text(labelW%,10)=par$
�'        � 5:$�text(labelW%,12)=par$
�,        �set_icon(labelW%,11,(par$<>""))
�:        �icon_bit(22,labelW%,12,�selected(labelW%,11))
�5        � 6:�set_icon(labelW%,13,(�u(par$)="ON"))
�5        � 7:�set_icon(labelW%,16,(�u(par$)="ON"))
�      �
�    � I%
�    � "!IMPRESSION":
�    P%=�params$," ")
�    � P%>0 �
�9      ImpCom$=�params$,P%-1):modifier$=�params$,P%+1)
�      Ȏ �u(modifier$) �
�'        � "NOT FIRST":firstquery%=�
�      �
�      � ImpCom$=params$
�	    �
�	    
�    �softerror("",46)
�    finished%=�
�  �
��
�ș "Hourglass_Smash"
��close_file(F)
�� �
��
�:
�� �abort_script
��close_file(F)
�� �=17 �
�  �softerror("",57)
�  � �wimp_error(�,�,�,�$)
��
��
�:
�H� "Impulse" handling -----------------------------------------------
�:
�.� �Impulse_command(token%,params%,object%)
�	� SF$
�4param$=�getstr(params%):object$=�getstr(object%)
�,� object$="" � object$=�leaf($database%)
�Ȏ token% �
�@  � 1:� ### GetPathname. Returns full pathname of object ###
�  Ȏ �leaf($database%) �
�    � object$:
�<    ș "Impulse_SendMessage",&202,$database%,,,,,mytask%
�    � "No data":
�D    ș "Impulse_SendMessage",&202,"No database open",,,,,mytask%
�
    :
�T    ș "Impulse_SendMessage",&202,"Current database is not "+object$,,,,,mytask%
�  �
�:  � 2:� ### Selection. Returns maximum data length ###
�  ClientSep$=�param$,1)
�?  ClientForm$=�find_fields(param$,ClientSep$,ClientLength%)
�?  �extend_named_sliding_block(transanchor%,ClientLength%+1)
�@  ș "Impulse_SendMessage",&202,�(ClientLength%),,,,,mytask%
�B  � 3:� ### ParseQuery. Returns title generated by FNparse ###
�$  ClientSearch$=�parse(param$,�)
�6  ș "Impulse_SendMessage",&202,Title$,,,,,mytask%
�p  � 4:� ### GetRecord. Returns data specified in Selection according to criteria specified in ParseQuery ###
�<  datalength%=�prepare_next_record(param$,!transanchor%)
�V  ș "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,Length%
�  � 5:� ### PutRecord ###
�B  ș "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%
�  � 6:� ### ExpandCode ###
�  P%=�param$," ")
�.  code$=�param$,P%-1):table$=�param$,P%+1)
�L  ș "Impulse_SendMessage",&202,�expand(code$,table$,L%,SF$),,,,,mytask%
�+  � 7,8:� ### GetField, GetExpanded ###
�  � params%<>-1 �
�D    datalength%=�prepare_next_field(token%,param$,!transanchor%)
�\    ș "Impulse_SendMessage",&202,"Ready to receive?",-1,,,transtag%,mytask%,datalength%
�2    � Max. length for a Powerbase field is 246
�  �
��
��
�:
�&� �Impulse_reply(replytag%,reply%)
�� �
�� � �:� �:�abort_merge:�
�reply$=�getstr(reply%)
�Ȏ replytag% �
�  � getrec%:
�+  � ### Reply to GetRecord command. ###
�>  ș "Impulse_FetchData",!transanchor%,Length%,,,,,mytask%
�  � mergetag%:
�L  � ### Merging application replies when all data in document merged ###
�w  � �selected(mergeW%,6) � ș "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Print",,,,printtag%,mytask%
�  � printtag%:
�D  � ### Merging application has printed the current document ###
�  ș "OS_Byte",229,0
�2  mergenum%+=1:$�text(mergeW%,14)=�(mergenum%)
�  �redraw_icon(mergeW%,14)
�0  � �selected(mergeW%,6) � ClientPtr%<>top �
�,    ClientPtr%=�merge_next(ClientPtr%,1)
�    � �deselect(mergeW%,6)
�  �
�  �poll
��
��
�:
�� �abort_merge
��close_file(dbasehandle%)
�ClientPtr%=top
��deselect(mergeW%,6)
��perform_close(mergeW%)
�� �=17 �
�  �softerror("",27)
�  � �wimp_error(�,�,�,�$)
��
��
�:
�"� �Impulse_send(tag%,maxsize%)
�Cș "Impulse_TransmitData",!transanchor%,datalength%,,,,,mytask%
�datalength%=0
��
�:
�5� �Impulse_receive(replytag%,expected%,received%)
�� I%,F%,P%
�transbuff%=!transanchor%
�transbuff%?received%=13
�data$=$transbuff%
�G� ### Acknowledge data received (get reason code 19 otherwise!) ###
�7ș "Impulse_SendMessage",&202,,,,,replytag%,mytask%
�� data$<>"" �
�  P%=�data$,"#")
  REC%=�(�data$,P%-1))
  data$=�data$,P%+1)
  � REC%=-1 � REC%=RA%
.  �read(fields%,REC%<>RA%,REC%,$database%)
!  � I%=1 � �(ClientForm$) � 2
$    F%=�fnum(�ClientForm$,I%,2))
<    � data$<>"" � $Rf%(F%)=�get_string(data$,ClientSep$)

  � I%
  �write(fields%,key%)
	R  � received%=0 � ș "Impulse_SendMessage",&201,"GetRecord",,,,getrec%,mytask%

�
�
:

� �get_string(� S$,sep$)
� P%,F$
P%=�S$,sep$)
� P%>0 �
  F$=�S$,P%-1)
  S$=�S$,P%+1)
�
=F$
:
+� �prepare_next_record(key$,transbuff%)
� ok%,I%,F%,P%
� dbasehandle%=0 �
,  dbasehandle%=�($database%+".Database")
'  ClientPtr%=�neighbour(key%,top,1)
�
P%=transbuff%

Ȏ key$ �
  � "***":
  �close_file(dbasehandle%)
   $P%=key$:P%+=�($P%)+1
!  � "":
"   ȕ ok%=� � ClientPtr%<>top
#(    REC%=�rec_no(k$,key%,ClientPtr%)
$'    �readsmarray(dbasehandle%,REC%)
%    � �(ClientSearch$)=� �
&$      $P%=�(REC%)+"#":P%+=�($P%)
'%      � I%=1 � �(ClientForm$) � 2
((        F%=�fnum(�ClientForm$,I%,2))
),        $P%=F$(F%)+ClientSep$:P%+=�($P%)
*      � I%
+      $P%+=ClientSep$:P%+=1
,      ok%=�
-	    �
.0    ClientPtr%=�neighbour(key%,ClientPtr%,1)
/  �
01  � P%=transbuff% � �close_file(dbasehandle%)
1  :
2"  val$=�type(key%):kl%=�(key$)
3%  ClientPtr%=�search(key$,key%,1)
4  � ClientPtr%>=0 �
5(    REC%=�rec_no(k$,key%,ClientPtr%)
6'    �readsmarray(dbasehandle%,REC%)
7"    $P%=�(REC%)+"#":P%+=�($P%)
8#    � I%=1 � �(ClientForm$) � 2
9&      F%=�fnum(�ClientForm$,I%,2))
:*      $P%=F$(F%)+ClientSep$:P%+=�($P%)
;    � I%
<    $P%+=ClientSep$:P%+=1
=  �
>�
?=P%-transbuff%
@:
A0� �prepare_next_field(method%,S$,transbuff%)
B)� L%,F%,P%,len%,T$,F$,V%,R%,b$,k$,SF$
CȎ token% �
D
  � 7:
E&  F%=�field(S$,�):V%=chartype%(F%)
F
  Ȏ V% �
GC    � 0,1,2,3,4,5,6,7,8,46,47,48,49,50,51,52,53,54,55,56,57,58:
H    L%=�(F$(F%))
ID    �extend_named_sliding_block(transanchor%,(L%+4) � &FFFFFFFC)
J     transbuff%=!transanchor%
K*    $transbuff%=F$(F%):transbuff%?L%=0
L    � 36,39:
M&    R%=�rec_no(k$,key%,ClientPtr%)
N/    L%=�blob_path(�,$database%,R%,F%,V%,b$)
O    � L%>0 �
PF      �extend_named_sliding_block(transanchor%,(L%+4) � &FFFFFFFC)
Q"      transbuff%=!transanchor%
R(      ș "OS_File",255,b$,transbuff%
S      � L%=1
T7      �extend_named_sliding_block(transanchor%,256)
U"      transbuff%=!transanchor%
V      ?transbuff%=0
W	    �
X    transbuff%?L%=0
Y  �
Z
  � 8:
[+  P%=�S$," "):T$=�S$,P%+1):S$=�S$,P%-1)
\2  F%=�field(S$,�):F$=�expand(F$(F%),T$,L%,SF$)
]4  �extend_named_sliding_block(transanchor%,L%+1)
^  transbuff%=!transanchor%
_6  $transbuff%=F$:L%=�($transbuff%):transbuff%?L%=0
`�
alen%=(L%+4) � &FFFFFFFC
b	=len%
c:
d� �ready_to_merge
eImp_wait%=�:merging%=�
f$�text(mergeW%,1)=document$
g&� � common% � $�text(mergeW%,3)=""
h�open_window(mergeW%)
i�set_caret(mergeW%,3)
jXș "Impulse_SendMessage",&200,":"+mergewith$+"."+document$+" Edit Off",,,,-1,mytask%
k�
l:
m� �merge_next(P%,D%)
nD%=(D%+1) � 2
o'P%=�next_match(P%,D%,ClientSearch$)
p� P%<>top �
q,  S$=F$(KF%(key%,0))+" "+F$(KF%(key%,1))
r   $�text(mergeW%,13)=�S$,80)
s  �redraw_icon(mergeW%,13)
t^  ș "Impulse_SendMessage",&201,":"+mergewith$+"."+document$+" Merge",,,,mergetag%,mytask%
u�
v=P%
w:
xK� End of "Impulse" handling -------------------------------------------
y:
zK� Import/Export CSV files ---------------------------------------------
{:
|� �start_import(type$,wi%)
}	� OK%
~Ȏ present% �

  � 0:
�-  � fields%=0 � OK%=� � �softerror("",69)
�/  � 7:� Modify% � OK%=� � �softerror("",14)
�  :�softerror("",69)
��
�� OK% �
�   $�text(csvW%,13)=filename$
�  �icon_bit(22,csvW%,0,�)
�4  !block%=csvW%:ș "Wimp_GetWindowState",,block%
�)  block%!4=800:block%!12=block%!4+390
�)  block%!8=150:block%!16=block%!8+716
�(  $CSVTitle%="Import "+type$+" file"
�"  ș "Wimp_OpenWindow",,block%
�  �set_caret(csvW%,13)
��
��
�:
�� �write_csv(Filename$)
�� writingcsv% � �
�?� printorder$<>"" � Form$=printorder$ � �softerror("",34):�
�!� P%,rec%,examined%,subtotal%
�� �
�� � �:� �:�end_csv:�
�csvhandle%=�(Filename$)
�$� �selected(csvW%,1) � �csv_head
�*dbasehandle%=�($database%+".Database")
�>Search$=�parse($�text(savesubW%,0),�selected(savesubW%,5))
�ș "Hourglass_On"
�P%=�neighbour(key%,top,1)
� �scan_file("P%<>top",key%,3)
�ș "Hourglass_Off"
��close_file(csvhandle%)
��close_file(dbasehandle%)
�(� sep$="," � type%=&dfe � type%=&fff
�#ș "OS_File",18,Filename$,type%
�writingcsv%=�
��
�:
�� �end_csv
�ș "Hourglass_Smash"
��close_file(csvhandle%)
��close_file(dbasehandle%)
��close_file(F)
�"ș "OS_File",18,Filename$,&dfe
�writingcsv%=�
�� �=17 �
�  �softerror("",41)
�  � �wimp_error(�,�,�,�$)
��
��
�:
�� �csv_head
�� I%,F%,f$,H$,Head$,N%
�	I%=-1
�ȕ I%<�(Form$)-1
�(  I%+=2:F%=�fnum(�Form$,I%,2)):N%+=1
�P  � �selected(printW%,2) � Head$=$�text(mainW%,(desc%(F%))) � Head$=Tag$(F%)
�M  � �selected(csvW%,4) � Head$=�(len%(F%))+"�"+Head$+"�"+�(chartype%(F%))
�X  � chartype%(F%)<>3 � chartype%(F%)<>6 � �selected(csvW%,0) � Head$=""""+Head$+""""
�  � N%>1 � Head$=sep$+Head$
�  �#csvhandle%,Head$;
��
��#csvhandle%,term$;
��
�:
�� �write_csv_rec(R%)
�0� I%,F%,f$,F$,L%,N%,filename$,len%,base%,SF$
�� �selected(csvW%,3) �
�  F$=�key2(0,1)
�,  � �selected(csvW%,0) � F$=""""+F$+""""
�  �#csvhandle%,F$+sep$;
��
�I%=-1:L%=�(Form$)-1
�ȕ I%<L%
�"  I%+=2:F%=�fnum(�Form$,I%,2))
�  Ȏ chartype%(F%) �
�    � 36,39:
�,    len%=�load_blob($database%,R%,F%,36)
�'    � len%>0 � �selected(csvW%,2) �
�+      N%+=1:� N%>1 � �#csvhandle%,sep$;
�3      � �selected(csvW%,0) � �#csvhandle%,"""";
�(      �blob_to_file(csvhandle%,len%)
�3      � �selected(csvW%,0) � �#csvhandle%,"""";
�	    �
�    � 3,6,46,47,54,56,57:
�    F$=F$(F%):N%+=1
�'    � F$<>"" � �selected(csvW%,2) �
�      � N%>1 � F$=sep$+F$
�      �#csvhandle%,F$;
�	    �
�
    :
�!    � �selected(printW%,11) �
�/      F$=�expand(F$(F%),link$(F%),Len%,SF$)
�      � F$=F$(F%)
�	    �
�
    N%+=1
�'    � F$<>"" � �selected(csvW%,2) �
�0      � �selected(csvW%,0) � F$=""""+F$+""""
�      � N%>1 � F$=sep$+F$
�      �#csvhandle%,F$;
�	    �
�  �
��
��#csvhandle%,term$;
��
�:
�� �convert_csv(f$)
�r� k$,B%,J%,fld%,csvhandle%,toobighandle%,S$,sep%,sep2%,term%,term2%,F$,A%,F%,keybase%,base%,base2%,show%,done%
�� �
�� � �:� �:�stop_reading:�
�size%=&100:inc%=size%
�2�extend_named_sliding_block(tempanchor%,size%)
�:sep%=�(sep$):� �(sep$)=2 � sep2%=�(�sep$)) � sep2%=255
�@term%=�(term$):� �(term$)=2 � term2%=�(�term$)) � term2%=255
�csvhandle%=�(f$)
�$� present%=0 � �csv_to_dbase(f$)
�Form$=�csv_importform
�3toobighandle%=�($database%+".PrintJobs.TooBig")
�ș "Hourglass_On"
��
�  Ȏ � �
�    � �selected(csvW%,3):
�    �read_bytes
�,    addr=�find(�$base%,KL%(key%)),0,1,�)
�"    REC%=�rec_no(k$,key%,addr)
�(    �read(fields%,�,REC%,$database%)
�
    :
�2    keybase%=!keyanchor%(0):A%=!keybase%:F%=A%
�    � !(keybase%+F%)>0 �
:      A%=!(keybase%+F%):REC%=!(keybase%+F%+8+KL%(0)+1)
      �
      incr%=�($Increment%)
      � incr%>0 �
'        �change_length(RA%+incr%,�)
6        keybase%=!keyanchor%(0):A%=!keybase%:F%=A%
<        A%=!(keybase%+F%):REC%=!(keybase%+F%+8+KL%(0)+1)
"        � � moan_err%,�msg(66)
      �
		    �

'    �read(fields%,�,RA%,$database%)
  �
  endline%=�:J%=-1

#  ȕ J%<�(Form$)-2 � endline%=�
&    J%+=2:fld%=�fnum(�Form$,J%,2))
!    �transfer_csv_field(fld%)
  �
1  � fld%<fields% � � endline% � �next_csv_rec
  �poll
  �write(fields%,key%)
-  � �selected(csvW%,11) � �redraw(mainW%)
?  ș "Hourglass_Percentage",�#csvhandle%*100 � �#csvhandle%
  ș "OS_Byte",229,0
� �#csvhandle%
ș "Hourglass_Off"
�close_file(csvhandle%)
�close_file(toobighandle%)
%�scrap_sliding_block(tempanchor%)
7ș "OS_File",18,$database%+".PrintJobs.TooBig",&fff
addr=�moveto(key%,top,1)
�clear_selection
�close_window(csvW%)
 F� �selected(passW%,16) � �#loghandle%,"CSV data imported from "+f$
!�
":
#!� �transfer_csv_field(� fld%)
$Ȏ chartype%(fld%) �
%  � 36,39:
&  �read_bytes
'1  Z%=�blob_path(�,$database%,REC%,fld%,36,F$)
("  Start%=base%:End%=base%+ptr%
)   �save(F$,&fff,Start%,End%)
*I  � �selected(csvW%,11) � chartype%(fld%)=39 � �show_text_block(fld%)
+M  � 0,1,2,3,4,5,6,7,8,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57:
,  �read_bytes
-9  � �selected(csvW%,16) � $base%=�stripspaces($base%)
.  Ȏ � �
/,    � ptr%<=len%(fld%):$Rf%(fld%)=$base%
0    � ptr%<247:
1A    �#toobighandle%,"Rec."+�(REC%)+",Fld."+�(fld%)+","+$base%
2    $Rf%(fld%)="@"
3
    :
4�    �#toobighandle%,"Rec."+�(REC%+1)+",Fld."+�(fld%)+" is more than 246 characters long. Data not saved. External field suggested."
5    $Rf%(fld%)="@"
6  �
7  :fld%+=1
8F  � ### Can't put CSV data into Button, Sprite or Draw fields! ###
9�
:�
;:
<� �read_bytes
=� end$,flag%,B%,nq%
>base%=!tempanchor%:ptr%=-1
?B%=�#csvhandle%
@
� B%=34 �
A  flag%=�:nq%=1
Bc  end$="(base%?(ptr%-1)=34 AND (nq% MOD 2)=0) AND (B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE)"
C  �
D!  �#csvhandle%=�#csvhandle%-1
E7  end$="B%=sep% OR B%=term% OR EOF#csvhandle%=TRUE"
F�
G�
H+  B%=�#csvhandle%:ptr%+=1:base%?ptr%=B%
I  � B%=34 � nq%+=1
JO  � ptr%=size% � size%+=inc%:�extend_named_sliding_block(tempanchor%,size%)
K
� �(end$)
L� flag% � ptr%-=1
Mbase%?ptr%=13
NȎ B% �
O  � sep%:�skip_sep
P  � term%:�skip_term
Q�
R�
S:
T� �next_csv_rec
U�
V  B%=�#csvhandle%
W� B%=term%
X�skip_term
Y�
Z:
[� �skip_sep
\� sep2%<>255 �
]  B%=�#csvhandle%
^/  � B%<>sep2% � �#csvhandle%=�#csvhandle%-1
_�
`�
a:
b� �skip_term
c� term2%<>255 �
d  B%=�#csvhandle%
e=  � B%<>term2% � �#csvhandle%=�#csvhandle%-1 � endline%=�
f  � endline%=�
g�
h�
i:
j� �stop_reading
kș "Hourglass_Off"
l6�close_file(csvhandle%):�close_file(toobighandle%)
m%�scrap_sliding_block(tempanchor%)
n
� � =17 �
o  �softerror("",74)
p  � �wimp_error(�,�,�,�$)
q�
r� present%=7 �
s  addr=�moveto(key%,top,1)
t  �clear_selection
u�
v�
w:
x� �csv_importform
y� F%,f$,F$
zendline%=�
{
Ȏ � �
|  � �selected(csvW%,1):
}/  � ### Use header record to build form ###
~  �
    �read_bytes
�    F%=�field($base%,�)
�%    � F%=0 � � moan_err%,�msg(87)
�    f$=�~(F%)
�    � �(f$)=1 � f$="0"+f$
�    F$+=f$
�"    �invert(mainW%,field%(F%))
�  � endline%
�  � printorder$<>"":
�B  � ### Build form from highlighted fields, as in printing ###
�  F$=printorder$
�  :
�B  � ### Assume entry into all fields, beginning with first ###
�  � F%=1 � fields%
�    f$=�~(F%)
�    � �(f$)=1 � f$="0"+f$
�    F$+=f$
�
  � F%
��
�=F$
�:
�� �csv_to_dbase(f$)
�� F%,P%,Q%,FH%,S$,readpos%
�H� � (�selected(csvW%,4) � �selected(csvW%,1)) � � moan_err%,�msg(88)
�(�read_bytes:S$=$base%:�#csvhandle%=0
�'� �S$,"�")=0 � � moan_err%,�msg(89)
�leaf$=�leaf(f$):csvconv%=�
�=� $database%="No data" � $database%=dbasepath$+".!"+leaf$
��save($database%,0,0,0)
�fields%=0:endline%=�
��
�  fields%+=1
�  �read_bytes:S$=$base%
�"  P%=�S$,"�"):Q%=�S$,"�",P%+1)
�%  Tag$(fields%)=�S$,P%+1,Q%-P%-1)
�   len%(fields%)=�(�S$,P%-1))
�%  chartype%(fields%)=�(�S$,Q%+1))
�� endline%
�%�scrap_sliding_block(tempanchor%)
�FH%=�($database%+".Form")
��#FH%,fields%
�� F%=1 � fields%
�  xd%=16:xf%=96
�  yd%=-(F%*52):yf%=yd%
�H  �#FH%,Tag$(F%),Tag$(F%),xd%,yd%,xf%,yf%,len%(F%),chartype%(F%),0,0
�� F%
��close_file(FH%)
�+ș "OS_File",18,$database%+".Form",&7f2
�fields%=0:Fieldnumber%=0
�fields%=�get_form(Fptr%)
��default_key
�readpos%=�#csvhandle%
�RA%=�no_of_recs
��defaults($database%,RA%,0)
��save_keys
��deselect(csvW%,1)
�2�create_named_sliding_block(tempanchor%,size%)
�csvhandle%=�(f$)
��#csvhandle%=readpos%
��
�:
�� �no_of_recs
�� N%,B%
��
�  � B%=�#csvhandle%
�  � B%=term% � �#csvhandle%
�  N%+=1
�?  ș "Hourglass_Percentage",�#csvhandle%*100 � �#csvhandle%
�� �#csvhandle%
�=N%
�:
�&� --- SLIDING HEAP 2.00 PROCEDURES
�:
�� requires SlidingHeap 2.00
�:
�� module and PROCs
�� � Steven Haslam 1992
�:
�� �_heap_slotsize
�	� R0%
�"ș "Wimp_SlotSize",-1,-1 � R0%
�=R0%
�:
�/� �_heap_numtostr(d%,n%)=��d%,"0")+�~n%,d%)
�/� �_heap_snumtostr(d%,n%)=��d%," ")+�n%,d%)
�:
�� �heapsinfo
�7ș "OS_Heap",1,fixedheapbase% � ,,bigbloc%,totfree%
�� "Fixed heap"
�� "----- ----"
�:� "Heap base    : &";�_heap_numtostr(8,fixedheapbase%)
�5� "Heap size    : ";�_heap_bytes2(fixedheapsize%)
�/� "Largest free : ";�_heap_bytes2(bigbloc%)
�/� "Total free   : ";�_heap_bytes2(totfree%)
��
�� "Sliding heap"
�� "------- ----"
�.ș "SlidingHeap_HeapInfo",slidingheapbase%
��
�:
�� �_heap_pageup(n%)
�	� R0%
� ș "OS_ReadMemMapInfo" � R0%
�=(n%+R0%-1) � � (R0%-1)
�:
�*� �initheaps(heapsize%,slidingblocks%)
�fixedheapsize%=heapsize%
�Lheap_trigger%=�_heap_pageup(�+fixedheapsize%+20+20*slidingblocks%-&8000)
��setslotsize(heap_trigger%)
�G� �_heap_slotsize<heap_trigger% � � 130,"Unable to initialise heap"
�fixedheapbase%=�
�%slidingheapbase%=�+fixedheapsize%
�1ș "OS_Heap",0,fixedheapbase%,,fixedheapsize%
�=ș "SlidingHeap_Create",slidingheapbase%,2,slidingblocks%
�0ș "SlidingHeap_VerifyHeap",slidingheapbase%
��
�:
�� �_heap_nextfree
�� nextfree%
�:ș "SlidingHeap_NextFree",slidingheapbase% � nextfree%
�=nextfree%
�:
�� �destroyheaps
��setslotsize(�-&8000)
��
�:
�$� �_heap_wordup(x%)=(x%+3) � � 3
�:
�� �create_anchor(name$)
 � space%
 � space% 4+�name$+1
 
!space%=0
 $(space%+4)=name$
 =space%
 :
 0� �create_named_sliding_block(anchor%,size%)
 � trysize%
 size%=�_heap_wordup(size%)
 	7trysize%=�_heap_pageup(�_heap_nextfree+size%-&7FF4)
 
� trysize%>heap_trigger% �
    �setslotsize(trysize%)
 #   � �_heap_slotsize<trysize% �
 
%      �setslotsize(heap_trigger%)
 F      � 131,"Not enough room to create block """+$(anchor%+4)+""""
    �
        heap_trigger%=trysize%
    �
 �
 Fș "SlidingHeap_NewBlock",slidingheapbase%,anchor%,size%,anchor%+4
 0ș "SlidingHeap_VerifyHeap",slidingheapbase%
 �
 :
 #� �scrap_sliding_block(anchor%)
 � !anchor%=0 � �
 8ș "SlidingHeap_ScrapBlock",slidingheapbase%,anchor%
 1trysize%=�_heap_pageup(�_heap_nextfree-&7FFC)
 � trysize%<>heap_trigger% �
    �setslotsize(trysize%)
    heap_trigger%=trysize%
 �
 !anchor%=0
  0ș "SlidingHeap_VerifyHeap",slidingheapbase%
 !�
 ":
 #� �setslotsize(newsize%)
 $"ș "Wimp_SlotSize",newsize%,-1
 %�
 &:
 '3� �extend_named_sliding_block(anchor%,newsize%)
 (B� !anchor%=0 � �create_named_sliding_block(anchor%,newsize%):�
 )A� !anchor%>�_heap_nextfree � � 129,"Block beyond heap limits"
 *$newsize%=�_heap_wordup(newsize%)
 +Hș "SlidingHeap_DescribeBlock",slidingheapbase%,anchor% � ,,oldsize%
 ,larger%=newsize%>oldsize%
 -� larger% �
 .H   trysize%=�_heap_pageup(�_heap_nextfree+(newsize%-oldsize%)-&7FFC)
 /!   � trysize%>heap_trigger% �
 0       �setslotsize(trysize%)
 1&      � �_heap_slotsize<trysize% �
 2(         �setslotsize(heap_trigger%)
 3@         � 132,"Not enough room to extend block #"+�~anchor%
 4      �
 5#         heap_trigger%=trysize%
 6      �
 7   �
 8�
 9Bș "SlidingHeap_ExtendBlock",slidingheapbase%,anchor%,newsize%
 :1trysize%=�_heap_pageup(�_heap_nextfree-&7FFC)
 ;� trysize%<>heap_trigger% �
 <   �setslotsize(trysize%)
 =   heap_trigger%=trysize%
 >�
 ?0ș "SlidingHeap_VerifyHeap",slidingheapbase%
 @�
 A:
 B� �_heap_bytes(b%)
 C
� end%
 D>ș "OS_ConvertFixedFileSize",b%,block%,block%+&100 � ,end%
 E?end%=13
 F=$block%
 G:
 H� �_heap_bytes2(b%)
 I
� end%
 J9ș "OS_ConvertFileSize",b%,block%,block%+&100 � ,end%
 K?end%=13
 L=$block%
 M:
 N � �create_fixed_block(size%)
 O� pointer%,flag%
 P<ș "XOS_Heap",2,fixedheapbase%,,size% � ,,pointer%;flag%
 Qȕ flag% � 1
 R�extendfixedheap
 S<ș "XOS_Heap",2,fixedheapbase%,,size% � ,,pointer%;flag%
 T�
 U
=pointer%
 V:
 W� �extendfixedheap
 X� nshb%,extend%,trysize%
 Y$ș "OS_ReadMemMapInfo" � extend%
 Z$trysize%=�_heap_slotsize+extend%
 [�setslotsize(trysize%)
 \E� �_heap_slotsize<trysize% � � 255,"No room to extend fixed heap"
 ]"nshb%=slidingheapbase%+extend%
 ^5ș "SlidingHeap_ShiftHeap",slidingheapbase%,nshb%
 _*ș "OS_Heap",5,fixedheapbase%,,extend%
 `fixedheapsize%+=extend%
 aslidingheapbase%=nshb%
 b0ș "SlidingHeap_VerifyHeap",slidingheapbase%
 c�
�
00000000  0d 00 01 1c f4 20 3e 3c  50 42 61 73 65 24 44 69  |..... ><PBase$Di|
00000010  72 3e 2e 21 52 75 6e 49  6d 61 67 65 0d 00 02 05  |r>.!RunImage....|
00000020  f4 0d 00 03 27 f4 20 21  52 75 6e 49 6d 61 67 65  |....'. !RunImage|
00000030  20 66 6f 72 20 21 50 6f  77 65 72 62 61 73 65 20  | for !Powerbase |
00000040  64 61 74 61 62 61 73 65  0d 00 04 1a f4 20 a9 20  |database..... . |
00000050  44 2e 4c 2e 20 26 20 53  2e 52 2e 20 48 61 73 6c  |D.L. & S.R. Hasl|
00000060  61 6d 0d 00 05 05 3a 0d  00 06 23 f4 20 48 65 61  |am....:...#. Hea|
00000070  70 20 4d 61 6e 61 67 65  72 20 28 6d 6f 64 75 6c  |p Manager (modul|
00000080  65 20 2b 20 42 41 53 49  43 29 0d 00 07 13 f4 20  |e + BASIC)..... |
00000090  a9 20 53 2e 52 2e 20 48  61 73 6c 61 6d 0d 00 08  |. S.R. Haslam...|
000000a0  05 3a 0d 00 09 1d f4 20  49 6e 74 65 72 66 61 63  |.:..... Interfac|
000000b0  65 20 4d 61 6e 61 67 65  72 20 28 76 2e 32 29 0d  |e Manager (v.2).|
000000c0  00 0a 18 f4 20 a9 20 53  69 6d 6f 6e 20 48 75 6e  |.... . Simon Hun|
000000d0  74 69 6e 67 64 6f 6e 0d  00 0b 05 3a 0d 00 0c 22  |tingdon....:..."|
000000e0  76 65 72 73 69 6f 6e 24  3d 22 34 2e 39 39 35 20  |version$="4.995 |
000000f0  28 30 39 2d 46 65 62 2d  31 39 39 34 29 22 0d 00  |(09-Feb-1994)"..|
00000100  0d 2c 69 6e 74 76 65 72  73 69 6f 6e 24 3d 22 49  |.,intversion$="I|
00000110  6e 74 65 72 66 61 63 65  20 4d 61 6e 61 67 65 72  |nterface Manager|
00000120  20 28 76 2e 32 2e 30 30  29 22 0d 00 0e 05 3a 0d  | (v.2.00)"....:.|
00000130  00 0f 28 c8 99 20 22 4f  53 5f 42 79 74 65 22 2c  |..(.. "OS_Byte",|
00000140  32 30 32 2c 30 2c 32 35  35 20 b8 20 2c 6b 62 64  |202,0,255 . ,kbd|
00000150  73 74 61 74 75 73 25 0d  00 10 20 66 61 74 61 6c  |status%... fatal|
00000160  5f 65 72 72 25 3d 32 35  35 3a 6d 6f 61 6e 5f 65  |_err%=255:moan_e|
00000170  72 72 25 3d 32 35 34 0d  00 11 0e 70 72 65 73 65  |rr%=254....prese|
00000180  6e 74 25 3d a3 0d 00 12  48 ee 20 85 3a ee 20 85  |nt%=....H. .:. .|
00000190  20 87 3a 85 20 9f 2c 22  4c 30 20 65 72 72 6f 72  | .:. .,"L0 error|
000001a0  3a 20 22 2b f6 24 2b 22  20 64 75 72 69 6e 67 20  |: "+.$+" during |
000001b0  69 6e 69 74 69 61 6c 69  73 61 74 69 6f 6e 20 61  |initialisation a|
000001c0  74 20 6c 69 6e 65 20 22  2b c3 28 9e 29 0d 00 13  |t line "+.(.)...|
000001d0  0a f2 73 65 74 75 70 0d  00 14 2e e7 20 62 75 66  |..setup..... buf|
000001e0  66 25 3e 65 6e 64 62 75  66 66 25 20 8c 20 85 20  |f%>endbuff% . . |
000001f0  30 2c 22 4e 6f 20 72 6f  6f 6d 20 66 6f 72 20 64  |0,"No room for d|
00000200  65 66 73 2e 22 0d 00 15  32 e7 20 6d 65 6e 75 5f  |efs."...2. menu_|
00000210  70 74 72 25 3e 6d 65 6e  5f 65 6e 64 25 20 8c 20  |ptr%>men_end% . |
00000220  85 20 30 2c 22 4e 6f 20  72 6f 6f 6d 20 66 6f 72  |. 0,"No room for|
00000230  20 6d 65 6e 75 73 22 0d  00 16 1d ee 20 85 20 f2  | menus"..... . .|
00000240  77 69 6d 70 5f 65 72 72  6f 72 28 b9 2c 9f 2c 9e  |wimp_error(.,.,.|
00000250  2c f6 24 29 0d 00 17 1f  c8 99 20 22 4f 53 5f 47  |,.$)...... "OS_G|
00000260  65 74 45 6e 76 22 20 b8  20 43 6f 6d 53 74 72 69  |etEnv" . ComStri|
00000270  6e 67 24 0d 00 18 20 e7  20 a7 43 6f 6d 53 74 72  |ng$... . .ComStr|
00000280  69 6e 67 24 2c 22 2d 64  61 74 61 62 61 73 65 22  |ing$,"-database"|
00000290  29 20 8c 0d 00 19 34 20  20 46 69 6c 65 24 3d c1  |) ....4  File$=.|
000002a0  43 6f 6d 53 74 72 69 6e  67 24 2c a7 43 6f 6d 53  |ComString$,.ComS|
000002b0  74 72 69 6e 67 24 2c 22  2d 64 61 74 61 62 61 73  |tring$,"-databas|
000002c0  65 22 29 2b 31 30 29 0d  00 1a 35 20 20 c8 99 20  |e")+10)...5  .. |
000002d0  22 4f 53 5f 47 53 54 72  61 6e 73 22 2c 46 69 6c  |"OS_GSTrans",Fil|
000002e0  65 24 2c c4 32 35 35 2c  bd 31 33 29 2c 32 35 35  |e$,.255,.13),255|
000002f0  20 b8 20 2c 46 69 6c 65  24 2c 4c 25 0d 00 1b 16  | . ,File$,L%....|
00000300  20 20 46 69 6c 65 24 3d  c0 46 69 6c 65 24 2c 4c  |  File$=.File$,L|
00000310  25 29 0d 00 1c 17 20 20  f2 67 65 74 5f 69 74 5f  |%)....  .get_it_|
00000320  69 6e 28 46 69 6c 65 24  29 0d 00 1d 05 cd 0d 00  |in(File$).......|
00000330  1e 1d ee 20 85 20 f2 77  69 6d 70 5f 65 72 72 6f  |... . .wimp_erro|
00000340  72 28 b9 2c 9f 2c 9e 2c  f6 24 29 0d 00 1f 05 f5  |r(.,.,.,.$).....|
00000350  0d 00 20 0b 20 20 f2 70  6f 6c 6c 0d 00 21 0b fd  |.. .  .poll..!..|
00000360  20 71 75 69 74 25 0d 00  22 0f f2 63 6c 6f 73 65  | quit%.."..close|
00000370  5f 64 6f 77 6e 0d 00 23  05 e0 0d 00 24 05 3a 0d  |_down..#....$.:.|
00000380  00 25 0b dd 20 f2 70 6f  6c 6c 0d 00 26 27 c8 99  |.%.. .poll..&'..|
00000390  20 22 4f 53 5f 42 79 74  65 22 2c 32 32 39 2c 31  | "OS_Byte",229,1|
000003a0  3a c8 99 20 22 4f 53 5f  42 79 74 65 22 2c 31 32  |:.. "OS_Byte",12|
000003b0  34 0d 00 27 29 c8 99 20  22 57 69 6d 70 5f 50 6f  |4..').. "Wimp_Po|
000003c0  6c 6c 22 2c 6d 61 73 6b  25 2c 62 6c 6f 63 6b 25  |ll",mask%,block%|
000003d0  20 b8 20 72 65 61 73 6f  6e 25 0d 00 28 28 c8 99  | . reason%..((..|
000003e0  20 22 49 6e 74 65 72 66  61 63 65 5f 50 6f 6c 6c  | "Interface_Poll|
000003f0  22 2c 72 65 61 73 6f 6e  25 2c 2c 6d 79 74 61 73  |",reason%,,mytas|
00000400  6b 25 0d 00 29 10 c8 8e  20 72 65 61 73 6f 6e 25  |k%..)... reason%|
00000410  20 ca 0d 00 2a 40 20 20  c9 20 30 3a e7 20 61 75  | ...*@  . 0:. au|
00000420  74 6f 73 61 76 65 25 3e  30 20 80 20 41 63 63 65  |tosave%>0 . Acce|
00000430  73 73 25 3d b9 20 8c 20  f2 63 68 65 63 6b 5f 73  |ss%=. . .check_s|
00000440  61 76 65 28 73 61 76 65  69 6e 74 25 2a 36 30 30  |ave(saveint%*600|
00000450  30 29 0d 00 2b 30 20 20  e7 20 49 6d 70 5f 77 61  |0)..+0  . Imp_wa|
00000460  69 74 25 20 80 20 ac 20  6d 65 72 67 69 6e 67 25  |it% . . merging%|
00000470  20 8c 20 f2 72 65 61 64  79 5f 74 6f 5f 6d 65 72  | . .ready_to_mer|
00000480  67 65 0d 00 2c 30 20 20  e7 20 66 6c 61 73 68 25  |ge..,0  . flash%|
00000490  3e 30 20 8c 20 f2 66 6c  61 73 68 28 6d 61 69 6e  |>0 . .flash(main|
000004a0  57 25 2c 66 69 65 6c 64  25 28 66 6c 61 73 68 25  |W%,field%(flash%|
000004b0  29 29 0d 00 2d 1a 20 20  c9 20 31 3a f2 72 65 64  |))..-.  . 1:.red|
000004c0  72 61 77 28 21 62 6c 6f  63 6b 25 29 0d 00 2e 26  |raw(!block%)...&|
000004d0  20 20 c9 20 32 3a c8 99  20 22 57 69 6d 70 5f 4f  |  . 2:.. "Wimp_O|
000004e0  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
000004f0  6b 25 0d 00 2f 21 20 20  c9 20 33 3a f2 70 65 72  |k%../!  . 3:.per|
00000500  66 6f 72 6d 5f 63 6c 6f  73 65 28 21 62 6c 6f 63  |form_close(!bloc|
00000510  6b 25 29 0d 00 30 17 20  20 c9 20 34 3a f2 68 6f  |k%)..0.  . 4:.ho|
00000520  75 72 67 6c 61 73 73 28  b9 29 0d 00 31 17 20 20  |urglass(.)..1.  |
00000530  c9 20 35 3a f2 68 6f 75  72 67 6c 61 73 73 28 a3  |. 5:.hourglass(.|
00000540  29 0d 00 32 40 20 20 c9  20 36 3a f2 6d 6f 75 73  |)..2@  . 6:.mous|
00000550  65 28 62 6c 6f 63 6b 25  21 30 2c 62 6c 6f 63 6b  |e(block%!0,block|
00000560  25 21 34 2c 62 6c 6f 63  6b 25 21 38 2c 62 6c 6f  |%!4,block%!8,blo|
00000570  63 6b 25 21 31 32 2c 62  6c 6f 63 6b 25 21 31 36  |ck%!12,block%!16|
00000580  29 0d 00 33 20 20 20 c9  20 37 3a f2 65 6e 64 5f  |)..3   . 7:.end_|
00000590  64 72 61 67 28 53 74 61  72 74 25 2c 45 6e 64 25  |drag(Start%,End%|
000005a0  29 0d 00 34 16 20 20 c9  20 38 3a f2 70 72 6f 63  |)..4.  . 8:.proc|
000005b0  65 73 73 5f 6b 65 79 0d  00 35 16 20 20 c9 20 39  |ess_key..5.  . 9|
000005c0  3a f2 6d 65 6e 75 5f 73  65 6c 65 63 74 0d 00 36  |:.menu_select..6|
000005d0  2a 20 20 c9 20 31 32 3a  f2 73 65 74 5f 6b 65 79  |*  . 12:.set_key|
000005e0  62 6f 61 72 64 28 21 62  6c 6f 63 6b 25 2c 62 6c  |board(!block%,bl|
000005f0  6f 63 6b 25 21 34 29 0d  00 37 0e 20 20 c9 20 31  |ock%!4)..7.  . 1|
00000600  37 2c 31 38 3a 0d 00 38  65 20 20 c8 99 20 22 49  |7,18:..8e  .. "I|
00000610  6d 70 75 6c 73 65 5f 44  65 63 6f 64 65 22 2c 72  |mpulse_Decode",r|
00000620  65 61 73 6f 6e 25 2c 62  6c 6f 63 6b 25 2c 2c 2c  |eason%,block%,,,|
00000630  2c 6d 65 74 68 6f 64 74  61 62 6c 65 25 2c 6d 79  |,methodtable%,my|
00000640  74 61 73 6b 25 20 b8 20  72 65 61 73 6f 6e 25 2c  |task% . reason%,|
00000650  2c 2c 2c 2c 74 6f 6b 65  6e 25 2c 70 61 72 61 6d  |,,,,token%,param|
00000660  73 25 2c 6f 62 6a 65 63  74 25 0d 00 39 17 20 20  |s%,object%..9.  |
00000670  e7 20 72 65 61 73 6f 6e  25 3e 3d 26 32 30 30 20  |. reason%>=&200 |
00000680  8c 0d 00 3a 14 20 20 20  20 c8 8e 20 72 65 61 73  |...:.    .. reas|
00000690  6f 6e 25 20 ca 0d 00 3b  4d 20 20 20 20 20 20 c9  |on% ...;M      .|
000006a0  20 26 32 30 30 2c 26 32  30 31 3a e7 20 74 6f 6b  | &200,&201:. tok|
000006b0  65 6e 25 3c 3e 2d 31 20  8c 20 f2 49 6d 70 75 6c  |en%<>-1 . .Impul|
000006c0  73 65 5f 63 6f 6d 6d 61  6e 64 28 74 6f 6b 65 6e  |se_command(token|
000006d0  25 2c 70 61 72 61 6d 73  25 2c 6f 62 6a 65 63 74  |%,params%,object|
000006e0  25 29 0d 00 3c 2f 20 20  20 20 20 20 c9 20 26 32  |%)..</      . &2|
000006f0  30 32 3a f2 49 6d 70 75  6c 73 65 5f 72 65 70 6c  |02:.Impulse_repl|
00000700  79 28 74 6f 6b 65 6e 25  2c 70 61 72 61 6d 73 25  |y(token%,params%|
00000710  29 0d 00 3d 2e 20 20 20  20 20 20 c9 20 26 32 30  |)..=.      . &20|
00000720  33 3a f2 49 6d 70 75 6c  73 65 5f 73 65 6e 64 28  |3:.Impulse_send(|
00000730  74 6f 6b 65 6e 25 2c 6f  62 6a 65 63 74 25 29 0d  |token%,object%).|
00000740  00 3e 39 20 20 20 20 20  20 c9 20 26 32 30 34 3a  |.>9      . &204:|
00000750  f2 49 6d 70 75 6c 73 65  5f 72 65 63 65 69 76 65  |.Impulse_receive|
00000760  28 74 6f 6b 65 6e 25 2c  70 61 72 61 6d 73 25 2c  |(token%,params%,|
00000770  6f 62 6a 65 63 74 25 29  0d 00 3f 09 20 20 20 20  |object%)..?.    |
00000780  cb 0d 00 40 12 20 20 20  20 cc 20 f2 6d 65 73 73  |...@.    . .mess|
00000790  61 67 65 0d 00 41 07 20  20 cd 0d 00 42 1c 20 20  |age..A.  ...B.  |
000007a0  c9 20 31 39 3a f2 6e 6f  74 5f 61 63 6b 6e 6f 77  |. 19:.not_acknow|
000007b0  6c 65 64 67 65 64 0d 00  43 05 cb 0d 00 44 05 e1  |ledged..C....D..|
000007c0  0d 00 45 05 3a 0d 00 46  15 dd 20 f2 68 6f 75 72  |..E.:..F.. .hour|
000007d0  67 6c 61 73 73 28 6f 6e  25 29 0d 00 47 32 e7 20  |glass(on%)..G2. |
000007e0  28 69 6e 64 65 78 69 6e  67 25 20 84 20 70 72 69  |(indexing% . pri|
000007f0  6e 74 69 6e 67 25 29 20  80 20 21 62 6c 6f 63 6b  |nting%) . !block|
00000800  25 3d 6b 65 79 70 61 64  57 25 20 8c 0d 00 48 34  |%=keypadW% ...H4|
00000810  20 20 e7 20 6f 6e 25 20  8c 20 c8 99 20 22 48 6f  |  . on% . .. "Ho|
00000820  75 72 67 6c 61 73 73 5f  4f 6e 22 20 8b 20 c8 99  |urglass_On" . ..|
00000830  20 22 48 6f 75 72 67 6c  61 73 73 5f 4f 66 66 22  | "Hourglass_Off"|
00000840  0d 00 49 05 cd 0d 00 4a  05 e1 0d 00 4b 05 3a 0d  |..I....J....K.:.|
00000850  00 4c 15 dd 20 f2 66 6c  61 73 68 28 77 69 25 2c  |.L.. .flash(wi%,|
00000860  69 63 25 29 0d 00 4d 0b  ea 20 74 69 6d 65 25 0d  |ic%)..M.. time%.|
00000870  00 4e 25 c8 99 20 22 4f  53 5f 52 65 61 64 4d 6f  |.N%.. "OS_ReadMo|
00000880  6e 6f 74 6f 6e 69 63 54  69 6d 65 22 20 b8 20 74  |notonicTime" . t|
00000890  69 6d 65 25 0d 00 4f 27  e7 20 28 74 69 6d 65 25  |ime%..O'. (time%|
000008a0  20 83 20 35 30 29 3d 30  20 8c 20 f2 69 6e 76 65  | . 50)=0 . .inve|
000008b0  72 74 28 77 69 25 2c 69  63 25 29 0d 00 50 05 e1  |rt(wi%,ic%)..P..|
000008c0  0d 00 51 05 3a 0d 00 52  4b f4 20 53 68 75 74 64  |..Q.:..RK. Shutd|
000008d0  6f 77 6e 20 72 6f 75 74  69 6e 65 73 20 2d 2d 2d  |own routines ---|
000008e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000910  0d 00 53 05 3a 0d 00 54  11 dd 20 f2 63 6c 6f 73  |..S.:..T.. .clos|
00000920  65 5f 64 6f 77 6e 0d 00  55 08 ea 20 46 25 0d 00  |e_down..U.. F%..|
00000930  56 07 ea 20 85 0d 00 57  a8 ee 20 85 20 ea 3a 24  |V.. ...W.. . .:$|
00000940  62 6c 6f 63 6b 25 3d 22  54 41 53 4b 22 3a c8 99  |block%="TASK":..|
00000950  20 22 57 69 6d 70 5f 43  6c 6f 73 65 44 6f 77 6e  | "Wimp_CloseDown|
00000960  22 2c 6d 79 74 61 73 6b  25 2c 21 62 6c 6f 63 6b  |",mytask%,!block|
00000970  25 3a c8 99 20 22 49 6e  74 65 72 66 61 63 65 5f  |%:.. "Interface_|
00000980  43 6c 6f 73 65 44 6f 77  6e 22 2c 6d 79 74 61 73  |CloseDown",mytas|
00000990  6b 25 2c 21 62 6c 6f 63  6b 25 3a ee 20 85 20 87  |k%,!block%:. . .|
000009a0  3a eb 20 31 32 3a 85 20  9f 2c 22 4c 30 20 65 72  |:. 12:. .,"L0 er|
000009b0  72 6f 72 3a 20 22 2b f6  24 2b 22 20 64 75 72 69  |ror: "+.$+" duri|
000009c0  6e 67 20 63 6c 6f 73 65  64 6f 77 6e 20 61 74 20  |ng closedown at |
000009d0  6c 69 6e 65 20 22 2b c3  28 9e 29 3a e0 0d 00 58  |line "+.(.):...X|
000009e0  18 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 53  |... "Hourglass_S|
000009f0  6d 61 73 68 22 0d 00 59  0c f2 65 78 69 74 28 30  |mash"..Y..exit(0|
00000a00  29 0d 00 5a 24 c8 99 20  22 49 6e 74 65 72 66 61  |)..Z$.. "Interfa|
00000a10  63 65 5f 43 6c 6f 73 65  44 6f 77 6e 22 2c 6d 79  |ce_CloseDown",my|
00000a20  74 61 73 6b 25 0d 00 5b  22 c8 99 20 22 49 6d 70  |task%..[".. "Imp|
00000a30  75 6c 73 65 5f 43 6c 6f  73 65 44 6f 77 6e 22 2c  |ulse_CloseDown",|
00000a40  6d 79 74 61 73 6b 25 0d  00 5c 12 24 62 6c 6f 63  |mytask%..\.$bloc|
00000a50  6b 25 3d 22 54 41 53 4b  22 0d 00 5d 27 c8 99 20  |k%="TASK"..]'.. |
00000a60  22 57 69 6d 70 5f 43 6c  6f 73 65 44 6f 77 6e 22  |"Wimp_CloseDown"|
00000a70  2c 6d 79 74 61 73 6b 25  2c 21 62 6c 6f 63 6b 25  |,mytask%,!block%|
00000a80  0d 00 5e 1f c8 99 20 22  4f 53 5f 42 79 74 65 22  |..^... "OS_Byte"|
00000a90  2c 32 30 32 2c 6b 62 64  73 74 61 74 75 73 25 0d  |,202,kbdstatus%.|
00000aa0  00 5f 05 e0 0d 00 60 05  e1 0d 00 61 05 3a 0d 00  |._....`....a.:..|
00000ab0  62 16 dd 20 f2 65 78 69  74 28 65 78 69 74 74 79  |b.. .exit(exitty|
00000ac0  70 65 25 29 0d 00 63 0b  ea 20 66 6c 61 67 25 0d  |pe%)..c.. flag%.|
00000ad0  00 64 18 c8 99 20 22 48  6f 75 72 67 6c 61 73 73  |.d... "Hourglass|
00000ae0  5f 53 6d 61 73 68 22 0d  00 65 20 e7 20 70 72 65  |_Smash"..e . pre|
00000af0  73 65 6e 74 25 3d 37 20  8c 20 f2 63 68 65 63 6b  |sent%=7 . .check|
00000b00  5f 63 68 61 6e 67 65 0d  00 66 12 c8 8e 20 65 78  |_change..f... ex|
00000b10  69 74 74 79 70 65 25 20  ca 0d 00 67 3d 20 20 c9  |ittype% ...g=  .|
00000b20  20 30 3a e7 20 77 61 72  6e 25 20 80 20 72 61 6d  | 0:. warn% . ram|
00000b30  25 20 8c 20 66 6c 61 67  25 3d a4 63 6f 6e 66 69  |% . flag%=.confi|
00000b40  72 6d 28 a4 6d 73 67 28  36 33 29 29 20 8b 20 66  |rm(.msg(63)) . f|
00000b50  6c 61 67 25 3d b9 0d 00  68 36 20 20 c9 20 31 3a  |lag%=...h6  . 1:|
00000b60  e7 20 77 61 72 6e 25 20  8c 20 66 6c 61 67 25 3d  |. warn% . flag%=|
00000b70  a4 63 6f 6e 66 69 72 6d  28 a4 6d 73 67 28 36 32  |.confirm(.msg(62|
00000b80  29 29 20 8b 20 66 6c 61  67 25 3d b9 0d 00 69 05  |)) . flag%=...i.|
00000b90  cb 0d 00 6a 13 e7 20 66  6c 61 67 25 3d a3 20 8c  |...j.. flag%=. .|
00000ba0  20 e1 20 20 0d 00 6b 13  e7 20 65 78 69 74 74 79  | .  ..k.. exitty|
00000bb0  70 65 25 3d 30 20 8c 0d  00 6c 30 20 20 e7 20 64  |pe%=0 ...l0  . d|
00000bc0  65 73 69 67 6e 25 20 8c  20 f2 73 61 76 65 5f 66  |esign% . .save_f|
00000bd0  6f 72 6d 28 24 64 61 74  61 62 61 73 65 25 2b 22  |orm($database%+"|
00000be0  2e 46 6f 72 6d 22 29 0d  00 6d 1b 20 20 e7 20 6c  |.Form")..m.  . l|
00000bf0  69 6e 6b 24 28 30 29 3d  22 4c 4f 41 44 45 44 22  |ink$(0)="LOADED"|
00000c00  20 8c 0d 00 6e 20 20 20  20 20 6c 6b 3d ae 28 24  | ...n     lk=.($|
00000c10  64 61 74 61 62 61 73 65  25 2b 22 2e 4c 69 6e 6b  |database%+".Link|
00000c20  22 29 0d 00 6f 18 20 20  20 20 e3 20 46 25 3d 31  |")..o.    . F%=1|
00000c30  20 b8 20 66 69 65 6c 64  73 25 0d 00 70 18 20 20  | . fields%..p.  |
00000c40  20 20 20 20 f1 23 6c 6b  2c 6c 69 6e 6b 24 28 46  |    .#lk,link$(F|
00000c50  25 29 0d 00 71 0c 20 20  20 20 ed 20 46 25 0d 00  |%)..q.    . F%..|
00000c60  72 07 20 20 cd 0d 00 73  1b 20 20 e7 20 63 61 6c  |r.  ...s.  . cal|
00000c70  63 24 28 30 29 3d 22 4c  4f 41 44 45 44 22 20 8c  |c$(0)="LOADED" .|
00000c80  0d 00 74 20 20 20 20 20  63 6c 3d ae 28 24 64 61  |..t     cl=.($da|
00000c90  74 61 62 61 73 65 25 2b  22 2e 43 61 6c 63 22 29  |tabase%+".Calc")|
00000ca0  0d 00 75 18 20 20 20 20  e3 20 46 25 3d 31 20 b8  |..u.    . F%=1 .|
00000cb0  20 66 69 65 6c 64 73 25  0d 00 76 18 20 20 20 20  | fields%..v.    |
00000cc0  20 20 f1 23 63 6c 2c 63  61 6c 63 24 28 46 25 29  |  .#cl,calc$(F%)|
00000cd0  0d 00 77 0c 20 20 20 20  ed 20 46 25 0d 00 78 07  |..w.    . F%..x.|
00000ce0  20 20 cd 0d 00 79 3a 20  20 e7 20 41 63 63 65 73  |  ...y:  . Acces|
00000cf0  73 25 3d b9 20 80 20 70  72 65 73 65 6e 74 25 3d  |s%=. . present%=|
00000d00  37 20 8c 20 f2 6d 6f 75  73 65 28 30 2c 30 2c 34  |7 . .mouse(0,0,4|
00000d10  2c 6b 65 79 70 61 64 57  25 2c 31 39 29 0d 00 7a  |,keypadW%,19)..z|
00000d20  05 cd 0d 00 7b 30 e7 20  6d 65 6e 75 25 28 35 29  |....{0. menu%(5)|
00000d30  3e 30 20 8c 20 6d 65 6e  75 5f 70 74 72 25 3d 6d  |>0 . menu_ptr%=m|
00000d40  65 6e 75 25 28 35 29 3a  6d 65 6e 75 25 28 35 29  |enu%(5):menu%(5)|
00000d50  3d 30 0d 00 7c 36 f4 20  23 23 23 20 20 4d 65 6e  |=0..|6. ###  Men|
00000d60  75 20 35 20 69 73 20 74  68 65 20 6d 65 6e 75 20  |u 5 is the menu |
00000d70  6f 66 20 76 61 6c 69 64  61 74 69 6f 6e 20 74 61  |of validation ta|
00000d80  62 6c 65 73 20 23 23 23  0d 00 7d 0e f2 63 6c 6f  |bles ###..}..clo|
00000d90  73 65 5f 6c 6f 67 0d 00  7e 10 f2 63 6c 6f 73 65  |se_log..~..close|
00000da0  5f 66 69 6c 65 73 0d 00  7f 11 f2 68 69 64 65 5f  |_files.....hide_|
00000db0  77 69 6e 64 6f 77 73 0d  00 80 1b f2 64 65 6c 65  |windows.....dele|
00000dc0  74 65 5f 69 63 6f 6e 73  28 6d 61 69 6e 57 25 2c  |te_icons(mainW%,|
00000dd0  30 29 0d 00 81 1e f2 64  65 6c 65 74 65 5f 69 63  |0).....delete_ic|
00000de0  6f 6e 73 28 64 61 74 61  64 69 63 57 25 2c 30 29  |ons(datadicW%,0)|
00000df0  0d 00 82 1e f2 64 65 6c  65 74 65 5f 69 63 6f 6e  |.....delete_icon|
00000e00  73 28 70 73 65 6c 65 63  74 57 25 2c 31 29 0d 00  |s(pselectW%,1)..|
00000e10  83 1e f2 64 65 6c 65 74  65 5f 69 63 6f 6e 73 28  |...delete_icons(|
00000e20  6b 65 79 70 61 64 57 25  2c 33 37 29 0d 00 84 13  |keypadW%,37)....|
00000e30  f2 72 65 63 6f 76 65 72  5f 6d 65 6d 6f 72 79 0d  |.recover_memory.|
00000e40  00 85 0e f2 69 6e 69 74  5f 76 61 72 73 0d 00 86  |....init_vars...|
00000e50  15 e3 20 49 25 3d 30 20  b8 20 4d 61 78 54 61 62  |.. I%=0 . MaxTab|
00000e60  73 25 0d 00 87 16 20 20  70 72 69 6e 74 72 65 6c  |s%....  printrel|
00000e70  24 28 49 25 29 3d 22 22  0d 00 88 08 ed 20 49 25  |$(I%)=""..... I%|
00000e80  0d 00 89 0f 66 69 65 6c  64 24 28 29 3d 22 22 0d  |....field$()="".|
00000e90  00 8a 11 24 50 61 73 73  77 6f 72 64 25 3d 22 22  |...$Password%=""|
00000ea0  0d 00 8b 0e 70 72 65 73  65 6e 74 25 3d a3 0d 00  |....present%=...|
00000eb0  8c 0b 65 78 69 74 25 3d  b9 0d 00 8d 16 f2 6c 69  |..exit%=......li|
00000ec0  74 28 6d 65 6e 75 25 28  30 29 2c 31 2c b9 29 0d  |t(menu%(0),1,.).|
00000ed0  00 8e 16 f2 6c 69 74 28  6d 65 6e 75 25 28 30 29  |....lit(menu%(0)|
00000ee0  2c 32 2c a3 29 0d 00 8f  16 f2 6c 69 74 28 6d 65  |,2,.).....lit(me|
00000ef0  6e 75 25 28 30 29 2c 33  2c a3 29 0d 00 90 16 f2  |nu%(0),3,.).....|
00000f00  6c 69 74 28 6d 65 6e 75  25 28 30 29 2c 34 2c a3  |lit(menu%(0),4,.|
00000f10  29 0d 00 91 31 f2 6c 69  74 28 6d 65 6e 75 25 28  |)...1.lit(menu%(|
00000f20  32 29 2c 31 2c a3 29 3a  70 74 72 25 3d 6d 65 6e  |2),1,.):ptr%=men|
00000f30  75 25 28 32 29 2b 35 32  3a 70 74 72 25 21 34 3d  |u%(2)+52:ptr%!4=|
00000f40  2d 31 0d 00 92 16 f2 6c  69 74 28 6d 65 6e 75 25  |-1.....lit(menu%|
00000f50  28 36 29 2c 36 2c a3 29  0d 00 93 16 f2 6c 69 74  |(6),6,.).....lit|
00000f60  28 6d 65 6e 75 25 28 36  29 2c 37 2c a3 29 0d 00  |(menu%(6),7,.)..|
00000f70  94 16 f2 6c 69 74 28 6d  65 6e 75 25 28 36 29 2c  |...lit(menu%(6),|
00000f80  38 2c a3 29 0d 00 95 10  f2 73 65 74 5f 61 75 74  |8,.).....set_aut|
00000f90  6f 28 a3 29 0d 00 96 17  f2 73 65 74 5f 61 75 74  |o(.).....set_aut|
00000fa0  6f 62 61 6c 61 6e 63 65  28 a3 29 0d 00 97 17 f2  |obalance(.).....|
00000fb0  74 69 63 6b 28 6d 65 6e  75 25 28 32 29 2c 33 2c  |tick(menu%(2),3,|
00000fc0  b9 29 0d 00 98 17 f2 74  69 63 6b 28 6d 65 6e 75  |.).....tick(menu|
00000fd0  25 28 32 29 2c 34 2c a3  29 0d 00 99 15 24 64 62  |%(2),4,.)....$db|
00000fe0  61 73 65 25 3d 22 4e 6f  20 64 61 74 61 22 0d 00  |ase%="No data"..|
00000ff0  9a 18 24 64 61 74 61 62  61 73 65 25 3d 22 4e 6f  |..$database%="No|
00001000  20 64 61 74 61 22 0d 00  9b 1f f2 72 65 64 72 61  | data".....redra|
00001010  77 5f 69 63 6f 6e 28 2d  32 2c 70 62 61 73 65 69  |w_icon(-2,pbasei|
00001020  63 6f 6e 25 29 0d 00 9c  05 e1 0d 00 9d 05 3a 0d  |con%).........:.|
00001030  00 9e 1c dd 20 f2 64 65  6c 65 74 65 5f 69 63 6f  |.... .delete_ico|
00001040  6e 73 28 77 69 25 2c 69  63 25 29 0d 00 9f 1c 21  |ns(wi%,ic%)....!|
00001050  62 6c 6f 63 6b 25 3d 77  69 25 3a 62 6c 6f 63 6b  |block%=wi%:block|
00001060  25 21 34 3d 69 63 25 0d  00 a0 05 f5 0d 00 a1 22  |%!4=ic%........"|
00001070  20 20 c8 99 20 22 57 69  6d 70 5f 44 65 6c 65 74  |  .. "Wimp_Delet|
00001080  65 49 63 6f 6e 22 2c 2c  62 6c 6f 63 6b 25 0d 00  |eIcon",,block%..|
00001090  a2 19 20 20 69 63 25 2b  3d 31 3a 62 6c 6f 63 6b  |..  ic%+=1:block|
000010a0  25 21 34 3d 69 63 25 0d  00 a3 24 20 20 c8 99 20  |%!4=ic%...$  .. |
000010b0  22 57 69 6d 70 5f 47 65  74 49 63 6f 6e 53 74 61  |"Wimp_GetIconSta|
000010c0  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 00 a4 1f fd  |te",,block%.....|
000010d0  20 28 28 62 6c 6f 63 6b  25 21 32 34 29 20 80 20  | ((block%!24) . |
000010e0  28 31 3c 3c 32 33 29 29  3e 30 0d 00 a5 05 e1 0d  |(1<<23))>0......|
000010f0  00 a6 05 3a 0d 00 a7 12  dd 20 f2 63 6c 6f 73 65  |...:..... .close|
00001100  5f 66 69 6c 65 73 0d 00  a8 0a ea 20 6b 65 79 25  |_files..... key%|
00001110  0d 00 a9 14 e3 20 6b 65  79 25 3d 30 20 b8 20 4b  |..... key%=0 . K|
00001120  65 79 73 25 0d 00 aa 11  20 20 f2 64 61 74 65 28  |eys%....  .date(|
00001130  6b 65 79 25 29 0d 00 ab  0a ed 20 6b 65 79 25 0d  |key%)..... key%.|
00001140  00 ac 1e f2 63 6c 6f 73  65 5f 66 69 6c 65 28 6c  |....close_file(l|
00001150  6b 29 3a 6c 69 6e 6b 24  28 29 3d 22 22 0d 00 ad  |k):link$()=""...|
00001160  1e f2 63 6c 6f 73 65 5f  66 69 6c 65 28 63 6c 29  |..close_file(cl)|
00001170  3a 63 61 6c 63 24 28 29  3d 22 22 0d 00 ae 1d f2  |:calc$()="".....|
00001180  63 6c 6f 73 65 5f 66 69  6c 65 28 64 62 61 73 65  |close_file(dbase|
00001190  68 61 6e 64 6c 65 25 29  0d 00 af 1b f2 63 6c 6f  |handle%).....clo|
000011a0  73 65 5f 66 69 6c 65 28  63 73 76 68 61 6e 64 6c  |se_file(csvhandl|
000011b0  65 25 29 0d 00 b0 1c f2  63 6c 6f 73 65 5f 66 69  |e%).....close_fi|
000011c0  6c 65 28 74 65 78 74 68  61 6e 64 6c 65 25 29 0d  |le(texthandle%).|
000011d0  00 b1 16 f2 63 6c 6f 73  65 5f 66 69 6c 65 28 74  |....close_file(t|
000011e0  65 78 74 25 29 0d 00 b2  1e f2 63 6c 6f 73 65 5f  |ext%).....close_|
000011f0  66 69 6c 65 28 74 6f 6f  62 69 67 68 61 6e 64 6c  |file(toobighandl|
00001200  65 25 29 0d 00 b3 12 f2  63 6c 6f 73 65 5f 66 69  |e%).....close_fi|
00001210  6c 65 28 46 29 0d 00 b4  14 f2 63 6c 6f 73 65 5f  |le(F).....close_|
00001220  66 69 6c 65 28 46 48 25  29 0d 00 b5 12 f2 63 6c  |file(FH%).....cl|
00001230  6f 73 65 5f 66 69 6c 65  28 56 29 0d 00 b6 05 e1  |ose_file(V).....|
00001240  0d 00 b7 05 3a 0d 00 b8  20 dd 20 f2 63 6c 6f 73  |....:... . .clos|
00001250  65 5f 66 69 6c 65 28 f8  20 66 69 6c 65 68 61 6e  |e_file(. filehan|
00001260  64 6c 65 25 29 0d 00 b9  15 e7 20 66 69 6c 65 68  |dle%)..... fileh|
00001270  61 6e 64 6c 65 25 3e 30  20 8c 0d 00 ba 13 20 20  |andle%>0 .....  |
00001280  d9 23 66 69 6c 65 68 61  6e 64 6c 65 25 0d 00 bb  |.#filehandle%...|
00001290  13 20 20 66 69 6c 65 68  61 6e 64 6c 65 25 3d 30  |.  filehandle%=0|
000012a0  0d 00 bc 05 cd 0d 00 bd  05 e1 0d 00 be 05 3a 0d  |..............:.|
000012b0  00 bf 15 dd 20 f2 72 65  63 6f 76 65 72 5f 6d 65  |.... .recover_me|
000012c0  6d 6f 72 79 0d 00 c0 08  ea 20 49 25 0d 00 c1 25  |mory..... I%...%|
000012d0  f2 73 63 72 61 70 5f 73  6c 69 64 69 6e 67 5f 62  |.scrap_sliding_b|
000012e0  6c 6f 63 6b 28 68 65 61  64 61 6e 63 68 6f 72 25  |lock(headanchor%|
000012f0  29 0d 00 c2 25 f2 73 63  72 61 70 5f 73 6c 69 64  |)...%.scrap_slid|
00001300  69 6e 67 5f 62 6c 6f 63  6b 28 75 6e 64 6f 61 6e  |ing_block(undoan|
00001310  63 68 6f 72 25 29 0d 00  c3 25 f2 73 63 72 61 70  |chor%)...%.scrap|
00001320  5f 73 6c 69 64 69 6e 67  5f 62 6c 6f 63 6b 28 6c  |_sliding_block(l|
00001330  69 6e 65 61 6e 63 68 6f  72 25 29 0d 00 c4 25 f2  |ineanchor%)...%.|
00001340  73 63 72 61 70 5f 73 6c  69 64 69 6e 67 5f 62 6c  |scrap_sliding_bl|
00001350  6f 63 6b 28 74 65 78 74  61 6e 63 68 6f 72 25 29  |ock(textanchor%)|
00001360  0d 00 c5 25 f2 73 63 72  61 70 5f 73 6c 69 64 69  |...%.scrap_slidi|
00001370  6e 67 5f 62 6c 6f 63 6b  28 66 6f 72 6d 61 6e 63  |ng_block(formanc|
00001380  68 6f 72 25 29 0d 00 c6  24 f2 73 63 72 61 70 5f  |hor%)...$.scrap_|
00001390  73 6c 69 64 69 6e 67 5f  62 6c 6f 63 6b 28 73 65  |sliding_block(se|
000013a0  6c 61 6e 63 68 6f 72 25  29 0d 00 c7 25 f2 73 63  |lanchor%)...%.sc|
000013b0  72 61 70 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |rap_sliding_bloc|
000013c0  6b 28 74 65 6d 70 61 6e  63 68 6f 72 25 29 0d 00  |k(tempanchor%)..|
000013d0  c8 24 f2 73 63 72 61 70  5f 73 6c 69 64 69 6e 67  |.$.scrap_sliding|
000013e0  5f 62 6c 6f 63 6b 28 62  61 6c 61 6e 63 68 6f 72  |_block(balanchor|
000013f0  25 29 0d 00 c9 25 f2 73  63 72 61 70 5f 73 6c 69  |%)...%.scrap_sli|
00001400  64 69 6e 67 5f 62 6c 6f  63 6b 28 66 6c 61 67 61  |ding_block(flaga|
00001410  6e 63 68 6f 72 25 29 0d  00 ca 26 f2 73 63 72 61  |nchor%)...&.scra|
00001420  70 5f 73 6c 69 64 69 6e  67 5f 62 6c 6f 63 6b 28  |p_sliding_block(|
00001430  74 72 61 6e 73 61 6e 63  68 6f 72 25 29 0d 00 cb  |transanchor%)...|
00001440  25 f2 73 63 72 61 70 5f  73 6c 69 64 69 6e 67 5f  |%.scrap_sliding_|
00001450  62 6c 6f 63 6b 28 73 70  72 73 61 6e 63 68 6f 72  |block(sprsanchor|
00001460  25 29 0d 00 cc 24 f2 73  63 72 61 70 5f 73 6c 69  |%)...$.scrap_sli|
00001470  64 69 6e 67 5f 62 6c 6f  63 6b 28 72 65 63 61 6e  |ding_block(recan|
00001480  63 68 6f 72 25 29 0d 00  cd 25 f2 73 63 72 61 70  |chor%)...%.scrap|
00001490  5f 73 6c 69 64 69 6e 67  5f 62 6c 6f 63 6b 28 73  |_sliding_block(s|
000014a0  61 76 65 61 6e 63 68 6f  72 25 29 0d 00 ce 25 f2  |aveanchor%)...%.|
000014b0  73 63 72 61 70 5f 73 6c  69 64 69 6e 67 5f 62 6c  |scrap_sliding_bl|
000014c0  6f 63 6b 28 6c 6f 67 6f  61 6e 63 68 6f 72 25 29  |ock(logoanchor%)|
000014d0  0d 00 cf 15 e3 20 49 25  3d 30 20 b8 20 4d 61 78  |..... I%=0 . Max|
000014e0  54 61 62 73 25 0d 00 d0  2a 20 20 f2 73 63 72 61  |Tabs%...*  .scra|
000014f0  70 5f 73 6c 69 64 69 6e  67 5f 62 6c 6f 63 6b 28  |p_sliding_block(|
00001500  74 61 62 61 6e 63 68 6f  72 25 28 49 25 29 29 0d  |tabanchor%(I%)).|
00001510  00 d1 08 ed 20 49 25 0d  00 d2 17 e3 20 49 25 3d  |.... I%..... I%=|
00001520  30 20 b8 20 4d 61 78 4b  65 79 73 25 2b 31 0d 00  |0 . MaxKeys%+1..|
00001530  d3 2a 20 20 f2 73 63 72  61 70 5f 73 6c 69 64 69  |.*  .scrap_slidi|
00001540  6e 67 5f 62 6c 6f 63 6b  28 6b 65 79 61 6e 63 68  |ng_block(keyanch|
00001550  6f 72 25 28 49 25 29 29  0d 00 d4 08 ed 20 49 25  |or%(I%))..... I%|
00001560  0d 00 d5 14 e3 20 49 25  3d 31 20 b8 20 66 69 65  |..... I%=1 . fie|
00001570  6c 64 73 25 0d 00 d6 38  20 20 e7 20 63 68 61 72  |lds%...8  . char|
00001580  74 79 70 65 25 28 49 25  29 3d 34 30 20 8c 20 f2  |type%(I%)=40 . .|
00001590  73 63 72 61 70 5f 73 6c  69 64 69 6e 67 5f 62 6c  |scrap_sliding_bl|
000015a0  6f 63 6b 28 52 66 25 28  49 25 29 29 0d 00 d7 08  |ock(Rf%(I%))....|
000015b0  ed 20 49 25 0d 00 d8 05  e1 0d 00 d9 05 3a 0d 00  |. I%.........:..|
000015c0  da 4b f4 20 45 72 72 6f  72 20 68 61 6e 64 6c 69  |.K. Error handli|
000015d0  6e 67 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ng -------------|
000015e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001600  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 00 db 05 3a 0d 00  |---------....:..|
00001610  dc 29 dd 20 f2 77 69 6d  70 5f 65 72 72 6f 72 28  |.). .wimp_error(|
00001620  72 65 74 75 72 6e 25 2c  65 72 72 25 2c 65 72 6c  |return%,err%,erl|
00001630  25 2c 65 72 72 24 29 0d  00 dd 13 ea 20 74 79 70  |%,err$)..... typ|
00001640  65 25 2c 72 65 73 75 6c  74 25 0d 00 de 07 ea 20  |e%,result%..... |
00001650  85 0d 00 df 55 ee 20 85  20 ea 20 ee 20 85 20 87  |....U. . . . . .|
00001660  3a f2 63 6c 6f 73 65 5f  64 6f 77 6e 3a 85 20 9f  |:.close_down:. .|
00001670  2c 22 4c 30 20 65 72 72  6f 72 3a 20 22 2b f6 24  |,"L0 error: "+.$|
00001680  2b 22 20 64 75 72 69 6e  67 20 65 72 72 6f 72 20  |+" during error |
00001690  68 61 6e 64 6c 65 72 20  61 74 20 6c 69 6e 65 20  |handler at line |
000016a0  22 2b c3 28 9e 29 0d 00  e0 1e c8 99 20 22 57 69  |"+.(.)...... "Wi|
000016b0  6d 70 5f 43 6f 6d 6d 61  6e 64 57 69 6e 64 6f 77  |mp_CommandWindow|
000016c0  22 2c 2d 31 0d 00 e1 2a  62 6c 6f 63 6b 25 21 38  |",-1...*block%!8|
000016d0  3d 30 3a 62 6c 6f 63 6b  25 21 31 32 3d 77 69 25  |=0:block%!12=wi%|
000016e0  3a 62 6c 6f 63 6b 25 21  31 36 3d 69 63 25 0d 00  |:block%!16=ic%..|
000016f0  e2 25 c8 99 20 22 49 6e  74 65 72 66 61 63 65 5f  |.%.. "Interface_|
00001700  53 6c 61 62 42 75 74 74  6f 6e 22 2c 2c 62 6c 6f  |SlabButton",,blo|
00001710  63 6b 25 0d 00 e3 11 62  6c 6f 63 6b 25 21 30 3d  |ck%....block%!0=|
00001720  65 72 72 25 0d 00 e4 22  e7 20 72 65 74 75 72 6e  |err%...". return|
00001730  25 20 80 20 65 72 72 25  3c 3e 66 61 74 61 6c 5f  |% . err%<>fatal_|
00001740  65 72 72 25 20 8c 0d 00  e5 19 20 20 20 e7 20 65  |err% .....   . e|
00001750  72 72 25 3d 6d 6f 61 6e  5f 65 72 72 25 20 8c 0d  |rr%=moan_err% ..|
00001760  00 e6 3c 20 20 20 20 20  20 74 79 70 65 25 3d 26  |..<      type%=&|
00001770  31 31 3a f4 20 4f 4b 20  62 75 74 74 6f 6e 20 61  |11:. OK button a|
00001780  6e 64 20 6e 6f 20 22 45  72 72 6f 72 20 66 72 6f  |nd no "Error fro|
00001790  6d 22 20 69 6e 20 74 69  74 6c 65 0d 00 e7 08 20  |m" in title.... |
000017a0  20 20 cc 0d 00 e8 29 20  20 20 20 20 20 74 79 70  |  ....)      typ|
000017b0  65 25 3d 33 3a f4 20 4f  4b 20 61 6e 64 20 43 61  |e%=3:. OK and Ca|
000017c0  6e 63 65 6c 20 62 75 74  74 6f 6e 73 0d 00 e9 41  |ncel buttons...A|
000017d0  20 20 20 20 20 20 65 72  72 24 2b 3d 22 20 40 20  |      err$+=" @ |
000017e0  22 2b c3 28 65 72 6c 25  29 2b 22 20 28 4f 4b 20  |"+.(erl%)+" (OK |
000017f0  74 6f 20 63 6f 6e 74 69  6e 75 65 2c 20 43 61 6e  |to continue, Can|
00001800  63 65 6c 20 74 6f 20 71  75 69 74 29 22 0d 00 ea  |cel to quit)"...|
00001810  08 20 20 20 cd 0d 00 eb  05 cc 0d 00 ec 1e 20 20  |.   ..........  |
00001820  20 74 79 70 65 25 3d 32  3a f4 20 43 61 6e 63 65  | type%=2:. Cance|
00001830  6c 20 62 75 74 74 6f 6d  0d 00 ed 3b 20 20 20 65  |l buttom...;   e|
00001840  72 72 24 2b 3d 22 20 40  20 22 2b c3 28 65 72 6c  |rr$+=" @ "+.(erl|
00001850  25 29 2b 22 20 28 50 6f  77 65 72 62 61 73 65 20  |%)+" (Powerbase |
00001860  6d 75 73 74 20 71 75 69  74 20 61 74 20 6f 6e 63  |must quit at onc|
00001870  65 29 22 0d 00 ee 05 cd  0d 00 ef 19 24 28 62 6c  |e)".........$(bl|
00001880  6f 63 6b 25 2b 34 29 3d  65 72 72 24 2b bd 28 30  |ock%+4)=err$+.(0|
00001890  29 0d 00 f0 3d c8 99 20  22 57 69 6d 70 5f 52 65  |)...=.. "Wimp_Re|
000018a0  70 6f 72 74 45 72 72 6f  72 22 2c 62 6c 6f 63 6b  |portError",block|
000018b0  25 2c 74 79 70 65 25 2c  22 50 6f 77 65 72 62 61  |%,type%,"Powerba|
000018c0  73 65 22 20 b8 20 2c 72  65 73 75 6c 74 25 0d 00  |se" . ,result%..|
000018d0  f1 39 f4 20 72 65 73 75  6c 74 3d 31 20 6d 65 61  |.9. result=1 mea|
000018e0  6e 73 20 4f 4b 20 73 65  6c 65 63 74 65 64 2c 20  |ns OK selected, |
000018f0  32 20 6d 65 61 6e 73 20  43 61 6e 63 65 6c 20 73  |2 means Cancel s|
00001900  65 6c 65 63 74 65 64 0d  00 f2 11 e7 20 72 65 73  |elected..... res|
00001910  75 6c 74 25 3d 32 20 8c  0d 00 f3 12 20 20 20 f2  |ult%=2 .....   .|
00001920  63 6c 6f 73 65 5f 64 6f  77 6e 0d 00 f4 08 20 20  |close_down....  |
00001930  20 e0 0d 00 f5 05 cd 0d  00 f6 07 f7 20 85 0d 00  | ........... ...|
00001940  f7 05 e1 0d 00 f8 05 3a  0d 00 f9 17 dd 20 f2 73  |.......:..... .s|
00001950  6f 66 74 65 72 72 6f 72  28 45 24 2c 45 25 29 0d  |ofterror(E$,E%).|
00001960  00 fa 1b 24 28 62 6c 6f  63 6b 25 2b 34 29 3d a4  |...$(block%+4)=.|
00001970  6d 73 67 28 45 25 29 2b  45 24 0d 00 fb 0f 21 62  |msg(E%)+E$....!b|
00001980  6c 6f 63 6b 25 3d 32 35  35 0d 00 fc 3c c8 99 20  |lock%=255...<.. |
00001990  22 57 69 6d 70 5f 52 65  70 6f 72 74 45 72 72 6f  |"Wimp_ReportErro|
000019a0  72 22 2c 62 6c 6f 63 6b  25 2c 26 31 31 2c 22 52  |r",block%,&11,"R|
000019b0  65 70 6f 72 74 20 66 72  6f 6d 20 50 6f 77 65 72  |eport from Power|
000019c0  62 61 73 65 22 0d 00 fd  05 e1 0d 00 fe 05 3a 0d  |base".........:.|
000019d0  00 ff 0e dd 20 a4 6d 73  67 28 45 25 29 0d 01 00  |.... .msg(E%)...|
000019e0  19 65 72 72 6f 72 62 6c  6f 63 6b 25 3d 65 72 72  |.errorblock%=err|
000019f0  6f 72 6d 73 67 25 0d 01  01 0b c8 95 20 45 25 3e  |ormsg%...... E%>|
00001a00  31 0d 01 02 24 20 20 65  72 72 6f 72 62 6c 6f 63  |1...$  errorbloc|
00001a10  6b 25 2b 3d a9 28 24 65  72 72 6f 72 62 6c 6f 63  |k%+=.($errorbloc|
00001a20  6b 25 29 2b 31 0d 01 03  0b 20 20 45 25 2d 3d 31  |k%)+1....  E%-=1|
00001a30  0d 01 04 05 ce 0d 01 05  15 3d c1 24 65 72 72 6f  |.........=.$erro|
00001a40  72 62 6c 6f 63 6b 25 2c  34 29 0d 01 06 05 3a 0d  |rblock%,4)....:.|
00001a50  01 07 4b f4 20 50 72 6f  67 72 61 6d 20 69 6e 69  |..K. Program ini|
00001a60  74 69 61 6c 69 73 61 74  69 6f 6e 20 2d 2d 2d 2d  |tialisation ----|
00001a70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001a90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 01 08 05 3a 0d  |----------....:.|
00001aa0  01 09 0c dd 20 f2 73 65  74 75 70 0d 01 0a 1a ea  |.... .setup.....|
00001ab0  20 46 2c 41 25 2c 49 25  2c 4a 25 2c 56 25 2c 76  | F,A%,I%,J%,V%,v|
00001ac0  61 6c 69 64 24 0d 01 0b  27 46 3d 8e 28 22 3c 50  |alid$...'F=.("<P|
00001ad0  62 61 73 65 24 44 69 72  3e 2e 52 65 73 6f 75 72  |base$Dir>.Resour|
00001ae0  63 65 73 2e 43 6f 6e 66  69 67 22 29 0d 01 0c 15  |ces.Config")....|
00001af0  4d 61 78 46 69 65 6c 64  73 25 3d bb 28 be 23 46  |MaxFields%=.(.#F|
00001b00  29 0d 01 0d 2c e7 20 4d  61 78 46 69 65 6c 64 73  |)...,. MaxFields|
00001b10  25 3e 31 32 37 20 8c 20  85 20 66 61 74 61 6c 5f  |%>127 . . fatal_|
00001b20  65 72 72 25 2c a4 6d 73  67 28 36 31 29 0d 01 0e  |err%,.msg(61)...|
00001b30  13 4d 61 78 4b 65 79 73  25 3d bb 28 be 23 46 29  |.MaxKeys%=.(.#F)|
00001b40  0d 01 0f 15 4d 61 78 54  61 62 73 25 3d bb 28 be  |....MaxTabs%=.(.|
00001b50  23 46 29 2d 31 0d 01 10  14 64 61 74 65 73 65 70  |#F)-1....datesep|
00001b60  24 3d c0 be 23 46 2c 31  29 0d 01 11 14 74 69 6d  |$=..#F,1)....tim|
00001b70  65 73 65 70 24 3d c0 be  23 46 2c 31 29 0d 01 12  |esep$=..#F,1)...|
00001b80  30 53 24 3d be 23 46 3a  50 25 3d a7 53 24 2c 22  |0S$=.#F:P%=.S$,"|
00001b90  20 22 29 3a 6b 69 6c 6c  25 3d ac 20 28 c0 53 24  | "):kill%=. (.S$|
00001ba0  2c 50 25 2d 31 29 3d 22  59 45 53 22 29 0d 01 13  |,P%-1)="YES")...|
00001bb0  34 53 24 3d be 23 46 3a  50 25 3d a7 53 24 2c 22  |4S$=.#F:P%=.S$,"|
00001bc0  20 22 29 3a 63 6f 6d 6d  6f 6e 63 61 73 65 25 3d  | "):commoncase%=|
00001bd0  28 c0 53 24 2c 50 25 2d  31 29 3d 22 59 45 53 22  |(.S$,P%-1)="YES"|
00001be0  29 0d 01 14 30 53 24 3d  be 23 46 3a 50 25 3d a7  |)...0S$=.#F:P%=.|
00001bf0  53 24 2c 22 20 22 29 3a  63 6f 6d 6d 6f 6e 25 3d  |S$," "):common%=|
00001c00  28 c0 53 24 2c 50 25 2d  31 29 3d 22 59 45 53 22  |(.S$,P%-1)="YES"|
00001c10  29 0d 01 15 32 53 24 3d  be 23 46 3a 50 25 3d a7  |)...2S$=.#F:P%=.|
00001c20  53 24 2c 22 20 22 29 3a  6c 65 66 74 6d 65 6e 75  |S$," "):leftmenu|
00001c30  25 3d 28 c0 53 24 2c 50  25 2d 31 29 3d 22 59 45  |%=(.S$,P%-1)="YE|
00001c40  53 22 29 0d 01 16 3f 53  24 3d be 23 46 3a 50 25  |S")...?S$=.#F:P%|
00001c50  3d a7 53 24 2c 22 20 22  29 3a e7 20 c0 53 24 2c  |=.S$," "):. .S$,|
00001c60  50 25 2d 31 29 3d 22 59  45 53 22 20 8c 20 63 61  |P%-1)="YES" . ca|
00001c70  70 73 25 3d 31 32 38 20  8b 20 63 61 70 73 25 3d  |ps%=128 . caps%=|
00001c80  31 36 0d 01 17 13 77 69  6e 62 61 63 6b 25 3d bb  |16....winback%=.|
00001c90  28 be 23 46 29 0d 01 18  12 f2 63 6c 6f 73 65 5f  |(.#F).....close_|
00001ca0  66 69 6c 65 28 46 29 0d  01 19 2d f2 64 69 6d 5f  |file(F)...-.dim_|
00001cb0  61 72 72 61 79 73 28 4d  61 78 46 69 65 6c 64 73  |arrays(MaxFields|
00001cc0  25 2c 4d 61 78 4b 65 79  73 25 2c 4d 61 78 54 61  |%,MaxKeys%,MaxTa|
00001cd0  62 73 25 29 0d 01 1a 0e  f2 69 6e 69 74 5f 76 61  |bs%).....init_va|
00001ce0  72 73 0d 01 1b 45 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |rs...E. --------|
00001cf0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 20 49 6e 69 74 69  |---------- Initi|
00001d00  61 6c 69 73 65 20 57 69  6d 70 20 2d 2d 2d 2d 2d  |alise Wimp -----|
00001d10  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00001d20  2d 2d 2d 2d 2d 2d 2d 0d  01 1c 12 24 62 6c 6f 63  |-------....$bloc|
00001d30  6b 25 3d 22 54 41 53 4b  22 0d 01 1d 11 6d 61 73  |k%="TASK"....mas|
00001d40  6b 25 3d 28 31 3c 3c 31  31 29 0d 01 1e 43 c8 99  |k%=(1<<11)...C..|
00001d50  20 22 57 69 6d 70 5f 49  6e 69 74 69 61 6c 69 73  | "Wimp_Initialis|
00001d60  65 22 2c 32 30 30 2c 21  62 6c 6f 63 6b 25 2c 22  |e",200,!block%,"|
00001d70  50 6f 77 65 72 62 61 73  65 22 20 b8 20 76 65 72  |Powerbase" . ver|
00001d80  73 69 6f 6e 25 2c 6d 79  74 61 73 6b 25 0d 01 1f  |sion%,mytask%...|
00001d90  2b e7 20 76 65 72 73 69  6f 6e 25 3e 3d 33 31 36  |+. version%>=316|
00001da0  20 8c 20 52 49 53 43 4f  53 33 3d b9 20 8b 20 52  | . RISCOS3=. . R|
00001db0  49 53 43 4f 53 33 3d a3  0d 01 20 36 c8 99 20 22  |ISCOS3=... 6.. "|
00001dc0  49 6d 70 75 6c 73 65 5f  49 6e 69 74 69 61 6c 69  |Impulse_Initiali|
00001dd0  73 65 22 2c 30 30 33 2c  6d 79 74 61 73 6b 25 2c  |se",003,mytask%,|
00001de0  22 50 6f 77 65 72 62 61  73 65 22 2c 2d 31 0d 01  |"Powerbase",-1..|
00001df0  21 25 c8 99 20 22 49 6e  74 65 72 66 61 63 65 5f  |!%.. "Interface_|
00001e00  49 6e 69 74 69 61 6c 69  73 65 22 2c 6d 79 74 61  |Initialise",myta|
00001e10  73 6b 25 0d 01 22 4d 70  62 61 73 65 69 63 6f 6e  |sk%.."Mpbaseicon|
00001e20  25 3d a4 63 72 65 61 74  65 5f 69 63 6f 6e 28 2d  |%=.create_icon(-|
00001e30  31 2c 30 2c 2d 31 36 2c  31 34 34 2c 31 31 30 2c  |1,0,-16,144,110,|
00001e40  26 31 37 30 30 33 31 32  42 2c 22 22 2c 64 62 61  |&1700312B,"",dba|
00001e50  73 65 25 2c 70 73 70 72  69 74 65 25 2c 31 30 29  |se%,psprite%,10)|
00001e60  0d 01 23 44 f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 20  |..#D. --------- |
00001e70  53 65 74 20 75 70 20 48  65 61 70 20 4d 61 6e 61  |Set up Heap Mana|
00001e80  67 65 72 2e 20 4c 6f 61  64 20 65 72 72 6f 72 20  |ger. Load error |
00001e90  6d 65 73 73 61 67 65 73  20 2d 2d 2d 2d 2d 2d 2d  |messages -------|
00001ea0  2d 2d 2d 2d 0d 01 24 17  f2 69 6e 69 74 68 65 61  |----..$..inithea|
00001eb0  70 73 28 31 32 38 2c 31  32 38 29 0d 01 25 3e c8  |ps(128,128)..%>.|
00001ec0  99 20 22 4f 53 5f 46 69  6c 65 22 2c 35 2c 22 3c  |. "OS_File",5,"<|
00001ed0  50 42 61 73 65 24 44 69  72 3e 2e 52 65 73 6f 75  |PBase$Dir>.Resou|
00001ee0  72 63 65 73 2e 4d 65 73  73 61 67 65 73 22 20 b8  |rces.Messages" .|
00001ef0  20 2c 2c 2c 2c 6c 65 6e  25 0d 01 26 27 65 72 72  | ,,,,len%..&'err|
00001f00  6f 72 6d 73 67 25 3d a4  63 72 65 61 74 65 5f 66  |ormsg%=.create_f|
00001f10  69 78 65 64 5f 62 6c 6f  63 6b 28 6c 65 6e 25 29  |ixed_block(len%)|
00001f20  0d 01 27 3f c8 99 20 22  4f 53 5f 46 69 6c 65 22  |..'?.. "OS_File"|
00001f30  2c 32 35 35 2c 22 3c 50  42 61 73 65 24 44 69 72  |,255,"<PBase$Dir|
00001f40  3e 2e 52 65 73 6f 75 72  63 65 73 2e 4d 65 73 73  |>.Resources.Mess|
00001f50  61 67 65 73 22 2c 65 72  72 6f 72 6d 73 67 25 0d  |ages",errormsg%.|
00001f60  01 28 11 e3 20 49 25 3d  30 20 b8 20 6c 65 6e 25  |.(.. I%=0 . len%|
00001f70  0d 01 29 29 20 20 e7 20  65 72 72 6f 72 6d 73 67  |..))  . errormsg|
00001f80  25 3f 49 25 3d 31 30 20  8c 20 65 72 72 6f 72 6d  |%?I%=10 . errorm|
00001f90  73 67 25 3f 49 25 3d 31  33 0d 01 2a 08 ed 20 49  |sg%?I%=13..*.. I|
00001fa0  25 0d 01 2b 1d c8 99 20  22 4f 53 5f 42 79 74 65  |%..+... "OS_Byte|
00001fb0  22 2c 31 33 35 20 b8 2c  2c 6d 6f 64 65 25 0d 01  |",135 .,,mode%..|
00001fc0  2c 0e c8 8e 20 6d 6f 64  65 25 20 ca 0d 01 2d 26  |,... mode% ...-&|
00001fd0  20 20 c9 20 31 32 2c 31  35 2c 31 36 2c 31 37 2c  |  . 12,15,16,17,|
00001fe0  33 35 2c 33 36 3a 66 24  3d 22 53 70 72 69 74 65  |35,36:f$="Sprite|
00001ff0  73 22 0d 01 2e 16 20 20  7f 3a 66 24 3d 22 53 70  |s"....  .:f$="Sp|
00002000  72 69 74 65 73 32 32 22  0d 01 2f 05 cb 0d 01 30  |rites22"../....0|
00002010  39 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  |9.. "OS_File",5,|
00002020  22 3c 50 42 61 73 65 24  44 69 72 3e 2e 52 65 73  |"<PBase$Dir>.Res|
00002030  6f 75 72 63 65 73 2e 22  2b 66 24 20 b8 20 2c 2c  |ources."+f$ . ,,|
00002040  2c 2c 6c 65 6e 25 0d 01  31 28 73 70 72 69 74 65  |,,len%..1(sprite|
00002050  73 25 3d a4 63 72 65 61  74 65 5f 66 69 78 65 64  |s%=.create_fixed|
00002060  5f 62 6c 6f 63 6b 28 6c  65 6e 25 2b 34 29 0d 01  |_block(len%+4)..|
00002070  32 14 21 73 70 72 69 74  65 73 25 3d 6c 65 6e 25  |2.!sprites%=len%|
00002080  2b 34 0d 01 33 3b c8 99  20 22 4f 53 5f 46 69 6c  |+4..3;.. "OS_Fil|
00002090  65 22 2c 32 35 35 2c 22  3c 50 42 61 73 65 24 44  |e",255,"<PBase$D|
000020a0  69 72 3e 2e 52 65 73 6f  75 72 63 65 73 2e 22 2b  |ir>.Resources."+|
000020b0  66 24 2c 73 70 72 69 74  65 73 25 2b 34 0d 01 34  |f$,sprites%+4..4|
000020c0  26 75 6e 64 6f 61 6e 63  68 6f 72 25 3d a4 63 72  |&undoanchor%=.cr|
000020d0  65 61 74 65 5f 61 6e 63  68 6f 72 28 22 55 6e 64  |eate_anchor("Und|
000020e0  6f 22 29 0d 01 35 29 68  65 61 64 61 6e 63 68 6f  |o")..5)headancho|
000020f0  72 25 3d a4 63 72 65 61  74 65 5f 61 6e 63 68 6f  |r%=.create_ancho|
00002100  72 28 22 48 65 61 64 69  6e 67 22 29 0d 01 36 2a  |r("Heading")..6*|
00002110  6c 69 6e 65 61 6e 63 68  6f 72 25 3d a4 63 72 65  |lineanchor%=.cre|
00002120  61 74 65 5f 61 6e 63 68  6f 72 28 22 54 65 78 74  |ate_anchor("Text|
00002130  4c 69 6e 65 22 29 0d 01  37 26 74 65 78 74 61 6e  |Line")..7&textan|
00002140  63 68 6f 72 25 3d a4 63  72 65 61 74 65 5f 61 6e  |chor%=.create_an|
00002150  63 68 6f 72 28 22 54 65  78 74 22 29 0d 01 38 26  |chor("Text")..8&|
00002160  66 6f 72 6d 61 6e 63 68  6f 72 25 3d a4 63 72 65  |formanchor%=.cre|
00002170  61 74 65 5f 61 6e 63 68  6f 72 28 22 46 6f 72 6d  |ate_anchor("Form|
00002180  22 29 0d 01 39 2e 73 70  72 73 61 6e 63 68 6f 72  |")..9.sprsanchor|
00002190  25 3d a4 63 72 65 61 74  65 5f 61 6e 63 68 6f 72  |%=.create_anchor|
000021a0  28 22 44 62 61 73 65 53  70 72 69 74 65 73 22 29  |("DbaseSprites")|
000021b0  0d 01 3a 26 74 65 6d 70  61 6e 63 68 6f 72 25 3d  |..:&tempanchor%=|
000021c0  a4 63 72 65 61 74 65 5f  61 6e 63 68 6f 72 28 22  |.create_anchor("|
000021d0  54 65 6d 70 22 29 0d 01  3b 28 62 61 6c 61 6e 63  |Temp")..;(balanc|
000021e0  68 6f 72 25 3d a4 63 72  65 61 74 65 5f 61 6e 63  |hor%=.create_anc|
000021f0  68 6f 72 28 22 42 61 6c  61 6e 63 65 22 29 0d 01  |hor("Balance")..|
00002200  3c 27 66 6c 61 67 61 6e  63 68 6f 72 25 3d a4 63  |<'flaganchor%=.c|
00002210  72 65 61 74 65 5f 61 6e  63 68 6f 72 28 22 46 6c  |reate_anchor("Fl|
00002220  61 67 73 22 29 0d 01 3d  2f 74 72 61 6e 73 61 6e  |ags")..=/transan|
00002230  63 68 6f 72 25 3d a4 63  72 65 61 74 65 5f 61 6e  |chor%=.create_an|
00002240  63 68 6f 72 28 22 44 61  74 61 54 72 61 6e 73 66  |chor("DataTransf|
00002250  65 72 22 29 0d 01 3e 29  73 65 6c 61 6e 63 68 6f  |er")..>)selancho|
00002260  72 25 3d a4 63 72 65 61  74 65 5f 61 6e 63 68 6f  |r%=.create_ancho|
00002270  72 28 22 50 72 69 6e 74  53 65 6c 22 29 0d 01 3f  |r("PrintSel")..?|
00002280  2a 72 65 63 61 6e 63 68  6f 72 25 3d a4 63 72 65  |*recanchor%=.cre|
00002290  61 74 65 5f 61 6e 63 68  6f 72 28 22 52 65 63 6f  |ate_anchor("Reco|
000022a0  72 64 4e 75 6d 22 29 0d  01 40 2c 73 61 76 65 61  |rdNum")..@,savea|
000022b0  6e 63 68 6f 72 25 3d a4  63 72 65 61 74 65 5f 61  |nchor%=.create_a|
000022c0  6e 63 68 6f 72 28 22 53  61 76 65 42 75 66 66 65  |nchor("SaveBuffe|
000022d0  72 22 29 0d 01 41 26 6c  6f 67 6f 61 6e 63 68 6f  |r")..A&logoancho|
000022e0  72 25 3d a4 63 72 65 61  74 65 5f 61 6e 63 68 6f  |r%=.create_ancho|
000022f0  72 28 22 4c 6f 67 6f 22  29 0d 01 42 17 e3 20 49  |r("Logo")..B.. I|
00002300  25 3d 30 20 b8 20 4d 61  78 4b 65 79 73 25 2b 31  |%=0 . MaxKeys%+1|
00002310  0d 01 43 33 20 20 20 6b  65 79 61 6e 63 68 6f 72  |..C3   keyanchor|
00002320  25 28 49 25 29 3d a4 63  72 65 61 74 65 5f 61 6e  |%(I%)=.create_an|
00002330  63 68 6f 72 28 22 4b 65  79 20 23 22 2b c3 28 49  |chor("Key #"+.(I|
00002340  25 29 29 0d 01 44 08 ed  20 49 25 0d 01 45 15 e3  |%))..D.. I%..E..|
00002350  20 49 25 3d 30 20 b8 20  4d 61 78 54 61 62 73 25  | I%=0 . MaxTabs%|
00002360  0d 01 46 36 20 20 20 74  61 62 61 6e 63 68 6f 72  |..F6   tabanchor|
00002370  25 28 49 25 29 3d a4 63  72 65 61 74 65 5f 61 6e  |%(I%)=.create_an|
00002380  63 68 6f 72 28 22 56 54  61 62 6c 65 20 23 22 2b  |chor("VTable #"+|
00002390  c3 28 49 25 29 29 0d 01  47 08 ed 20 49 25 0d 01  |.(I%))..G.. I%..|
000023a0  48 49 f4 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |HI. ------------|
000023b0  2d 2d 2d 20 52 65 61 64  20 76 61 6c 69 64 61 74  |--- Read validat|
000023c0  69 6f 6e 20 73 74 72 69  6e 67 73 20 65 74 63 20  |ion strings etc |
000023d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000023e0  2d 2d 2d 2d 2d 2d 2d 0d  01 49 2b 56 3d 8e 28 22  |-------..I+V=.("|
000023f0  3c 50 62 61 73 65 24 44  69 72 3e 2e 52 65 73 6f  |<Pbase$Dir>.Reso|
00002400  75 72 63 65 73 2e 56 61  6c 53 74 72 69 6e 67 73  |urces.ValStrings|
00002410  22 29 0d 01 4a 14 76 73  74 72 69 6e 67 73 25 3d  |")..J.vstrings%=|
00002420  bb 28 be 23 56 29 0d 01  4b 4f de 20 76 6e 61 6d  |.(.#V)..KO. vnam|
00002430  65 24 28 76 73 74 72 69  6e 67 73 25 29 2c 76 61  |e$(vstrings%),va|
00002440  6c 69 64 25 28 76 73 74  72 69 6e 67 73 25 29 2c  |lid%(vstrings%),|
00002450  72 76 61 6c 69 64 25 28  76 73 74 72 69 6e 67 73  |rvalid%(vstrings|
00002460  25 29 2c 68 76 61 6c 69  64 25 28 76 73 74 72 69  |%),hvalid%(vstri|
00002470  6e 67 73 25 29 0d 01 4c  16 e3 20 49 25 3d 30 20  |ngs%)..L.. I%=0 |
00002480  b8 20 76 73 74 72 69 6e  67 73 25 0d 01 4d 18 20  |. vstrings%..M. |
00002490  20 76 6e 61 6d 65 24 28  49 25 29 3d c1 be 23 56  | vname$(I%)=..#V|
000024a0  2c 34 29 0d 01 4e 10 20  20 76 61 6c 69 64 24 3d  |,4)..N.  valid$=|
000024b0  be 23 56 0d 01 4f 2f 20  20 de 20 56 25 20 a9 28  |.#V..O/  . V% .(|
000024c0  76 61 6c 69 64 24 29 2b  31 3a 24 56 25 3d 76 61  |valid$)+1:$V%=va|
000024d0  6c 69 64 24 3a 76 61 6c  69 64 25 28 49 25 29 3d  |lid$:valid%(I%)=|
000024e0  56 25 0d 01 50 30 20 20  de 20 56 25 20 a9 28 76  |V%..P0  . V% .(v|
000024f0  61 6c 69 64 24 29 2b 31  3a 24 56 25 3d 76 61 6c  |alid$)+1:$V%=val|
00002500  69 64 24 3a 72 76 61 6c  69 64 25 28 49 25 29 3d  |id$:rvalid%(I%)=|
00002510  56 25 0d 01 51 43 20 20  de 20 56 25 20 a9 28 76  |V%..QC  . V% .(v|
00002520  61 6c 69 64 24 29 2b 31  36 3a 24 56 25 3d 76 61  |alid$)+16:$V%=va|
00002530  6c 69 64 24 2b 22 3b 50  70 74 72 5f 68 61 6e 64  |lid$+";Pptr_hand|
00002540  2c 31 32 2c 38 22 3a 68  76 61 6c 69 64 25 28 49  |,12,8":hvalid%(I|
00002550  25 29 3d 56 25 0d 01 52  08 ed 20 49 25 0d 01 53  |%)=V%..R.. I%..S|
00002560  12 f2 63 6c 6f 73 65 5f  66 69 6c 65 28 56 29 0d  |..close_file(V).|
00002570  01 54 45 f4 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.TE. -----------|
00002580  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000025b0  2d 2d 2d 2d 0d 01 55 16  f4 20 4d 65 74 68 6f 64  |----..U.. Method|
000025c0  20 73 74 72 75 63 74 75  72 65 0d 01 56 14 e3 20  | structure..V.. |
000025d0  50 41 53 53 3d 30 20 b8  20 32 20 88 20 32 0d 01  |PASS=0 . 2 . 2..|
000025e0  57 13 50 25 3d 6d 65 74  68 6f 64 74 61 62 6c 65  |W.P%=methodtable|
000025f0  25 0d 01 58 0f 20 20 5b  4f 50 54 20 50 41 53 53  |%..X.  [OPT PASS|
00002600  0d 01 59 15 20 20 20 20  20 20 20 20 65 71 75 64  |..Y.        equd|
00002610  20 20 20 20 30 0d 01 5a  29 20 20 20 20 20 20 20  |    0..Z)       |
00002620  20 a4 6d 65 74 68 6f 64  28 30 2c 31 2c 22 47 65  | .method(0,1,"Ge|
00002630  74 50 61 74 68 6e 61 6d  65 22 2c 22 22 29 0d 01  |tPathname","")..|
00002640  5b 27 20 20 20 20 20 20  20 20 a4 6d 65 74 68 6f  |['        .metho|
00002650  64 28 30 2c 32 2c 22 53  65 6c 65 63 74 69 6f 6e  |d(0,2,"Selection|
00002660  22 2c 22 22 29 0d 01 5c  28 20 20 20 20 20 20 20  |","")..\(       |
00002670  20 a4 6d 65 74 68 6f 64  28 30 2c 33 2c 22 50 61  | .method(0,3,"Pa|
00002680  72 73 65 51 75 65 72 79  22 2c 22 22 29 0d 01 5d  |rseQuery","")..]|
00002690  27 20 20 20 20 20 20 20  20 a4 6d 65 74 68 6f 64  |'        .method|
000026a0  28 30 2c 34 2c 22 47 65  74 52 65 63 6f 72 64 22  |(0,4,"GetRecord"|
000026b0  2c 22 22 29 0d 01 5e 27  20 20 20 20 20 20 20 20  |,"")..^'        |
000026c0  a4 6d 65 74 68 6f 64 28  30 2c 35 2c 22 50 75 74  |.method(0,5,"Put|
000026d0  52 65 63 6f 72 64 22 2c  22 22 29 0d 01 5f 28 20  |Record","").._( |
000026e0  20 20 20 20 20 20 20 a4  6d 65 74 68 6f 64 28 30  |       .method(0|
000026f0  2c 36 2c 22 45 78 70 61  6e 64 43 6f 64 65 22 2c  |,6,"ExpandCode",|
00002700  22 22 29 0d 01 60 26 20  20 20 20 20 20 20 20 a4  |"")..`&        .|
00002710  6d 65 74 68 6f 64 28 30  2c 37 2c 22 47 65 74 46  |method(0,7,"GetF|
00002720  69 65 6c 64 22 2c 22 22  29 0d 01 61 29 20 20 20  |ield","")..a)   |
00002730  20 20 20 20 20 a4 6d 65  74 68 6f 64 28 30 2c 38  |     .method(0,8|
00002740  2c 22 47 65 74 45 78 70  61 6e 64 65 64 22 2c 22  |,"GetExpanded","|
00002750  22 29 0d 01 62 20 20 20  20 20 20 20 20 20 a4 6d  |")..b         .m|
00002760  65 74 68 6f 64 28 2d 31  2c 2d 31 2c 22 22 2c 22  |ethod(-1,-1,"","|
00002770  22 29 0d 01 63 07 20 20  5d 0d 01 64 0a ed 20 50  |")..c.  ]..d.. P|
00002780  41 53 53 0d 01 65 2e f2  67 65 74 73 63 72 65 65  |ASS..e..getscree|
00002790  6e 73 69 7a 65 28 53 63  72 65 65 6e 57 69 64 74  |nsize(ScreenWidt|
000027a0  68 25 2c 53 63 72 65 65  6e 48 65 69 67 68 74 25  |h%,ScreenHeight%|
000027b0  29 0d 01 66 13 f2 63 72  65 61 74 65 5f 77 69 6e  |)..f..create_win|
000027c0  64 6f 77 73 0d 01 67 0f  f2 6d 61 6b 65 5f 6d 65  |dows..g..make_me|
000027d0  6e 75 73 0d 01 68 10 f2  73 65 74 5f 61 75 74 6f  |nus..h..set_auto|
000027e0  28 a3 29 0d 01 69 17 f2  73 65 74 5f 61 75 74 6f  |(.)..i..set_auto|
000027f0  62 61 6c 61 6e 63 65 28  a3 29 0d 01 6a 31 f2 67  |balance(.)..j1.g|
00002800  65 74 5f 63 68 6f 69 63  65 73 28 22 3c 50 62 61  |et_choices("<Pba|
00002810  73 65 24 44 69 72 3e 2e  52 65 73 6f 75 72 63 65  |se$Dir>.Resource|
00002820  73 2e 43 68 6f 69 63 65  73 22 29 0d 01 6b 05 e1  |s.Choices")..k..|
00002830  0d 01 6c 05 3a 0d 01 6d  2a dd 20 a4 6d 65 74 68  |..l.:..m*. .meth|
00002840  6f 64 28 46 6c 61 67 73  2c 54 6f 6b 65 6e 2c 4d  |od(Flags,Token,M|
00002850  65 74 68 6f 64 24 2c 53  79 6e 74 61 78 24 29 0d  |ethod$,Syntax$).|
00002860  01 6e 0d 5b 4f 50 54 20  50 41 53 53 0d 01 6f 19  |.n.[OPT PASS..o.|
00002870  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
00002880  46 6c 61 67 73 0d 01 70  19 20 20 20 20 20 20 20  |Flags..p.       |
00002890  20 65 71 75 64 20 20 20  20 54 6f 6b 65 6e 0d 01  | equd    Token..|
000028a0  71 20 20 20 20 20 20 20  20 20 65 71 75 73 20 20  |q         equs  |
000028b0  20 20 4d 65 74 68 6f 64  24 2b bd 28 30 29 0d 01  |  Method$+.(0)..|
000028c0  72 20 20 20 20 20 20 20  20 20 65 71 75 73 20 20  |r         equs  |
000028d0  20 20 53 79 6e 74 61 78  24 2b bd 28 30 29 0d 01  |  Syntax$+.(0)..|
000028e0  73 11 20 20 20 20 20 20  20 20 61 6c 69 67 6e 0d  |s.        align.|
000028f0  01 74 05 5d 0d 01 75 09  3d 50 41 53 53 0d 01 76  |.t.]..u.=PASS..v|
00002900  05 3a 0d 01 77 1b dd 20  f2 64 69 6d 5f 61 72 72  |.:..w.. .dim_arr|
00002910  61 79 73 28 46 25 2c 4b  25 2c 54 25 29 0d 01 78  |ays(F%,K%,T%)..x|
00002920  92 de 20 64 65 73 63 25  28 46 25 29 2c 54 61 67  |.. desc%(F%),Tag|
00002930  24 28 46 25 29 2c 66 69  65 6c 64 25 28 46 25 29  |$(F%),field%(F%)|
00002940  2c 46 24 28 46 25 29 2c  52 66 25 28 46 25 29 2c  |,F$(F%),Rf%(F%),|
00002950  6c 65 6e 25 28 46 25 29  2c 6d 61 78 6c 65 6e 25  |len%(F%),maxlen%|
00002960  28 46 25 29 2c 63 68 61  72 74 79 70 65 25 28 46  |(F%),chartype%(F|
00002970  25 29 2c 66 69 78 25 28  46 25 29 2c 6c 69 6e 6b  |%),fix%(F%),link|
00002980  24 28 46 25 29 2c 63 61  6c 63 24 28 46 25 29 2c  |$(F%),calc$(F%),|
00002990  54 61 62 25 28 46 25 29  2c 66 69 65 6c 64 24 28  |Tab%(F%),field$(|
000029a0  46 25 29 2c 75 70 64 61  74 65 24 28 46 25 29 0d  |F%),update$(F%).|
000029b0  01 79 64 de 20 44 61 74  65 25 28 35 29 2c 49 6e  |.yd. Date%(5),In|
000029c0  64 65 78 24 28 4b 25 2b  31 29 2c 4b 4c 25 28 4b  |dex$(K%+1),KL%(K|
000029d0  25 2b 31 29 2c 4b 46 25  28 4b 25 2b 31 2c 31 29  |%+1),KF%(K%+1,1)|
000029e0  2c 4b 57 25 28 4b 25 2b  31 2c 33 29 2c 6b 65 79  |,KW%(K%+1,3),key|
000029f0  24 28 4b 25 2b 31 29 2c  63 61 73 65 25 28 4b 25  |$(K%+1),case%(K%|
00002a00  2b 31 29 2c 57 44 25 28  33 29 2c 45 78 74 25 28  |+1),WD%(3),Ext%(|
00002a10  31 30 29 0d 01 7a 12 de  20 4c 61 62 65 6c 24 28  |10)..z.. Label$(|
00002a20  31 30 2c 32 29 0d 01 7b  0f de 20 53 75 6d 28 33  |10,2)..{.. Sum(3|
00002a30  30 2c 33 29 0d 01 7c 21  de 20 6b 65 79 20 32 35  |0,3)..|!. key 25|
00002a40  36 2c 64 61 74 65 25 20  36 2c 63 61 6c 63 72 6f  |6,date% 6,calcro|
00002a50  77 25 20 46 25 0d 01 7d  1a de 20 6d 65 6e 75 25  |w% F%..}.. menu%|
00002a60  28 32 32 29 2c 63 68 6f  69 63 65 24 28 34 29 0d  |(22),choice$(4).|
00002a70  01 7e 34 de 20 74 61 62  6c 65 24 28 54 25 2b 31  |.~4. table$(T%+1|
00002a80  29 2c 74 61 62 66 69 65  6c 64 6c 65 6e 25 28 39  |),tabfieldlen%(9|
00002a90  29 2c 66 63 6f 6c 25 28  36 29 2c 6e 63 6f 6c 25  |),fcol%(6),ncol%|
00002aa0  28 36 29 0d 01 7f 0d de  20 72 65 6c 25 28 36 29  |(6)..... rel%(6)|
00002ab0  0d 01 80 16 de 20 62 75  74 74 6f 6e 66 69 65 6c  |..... buttonfiel|
00002ac0  64 25 28 32 32 29 0d 01  81 14 4d 43 25 3d 33 30  |d%(22)....MC%=30|
00002ad0  3a de 20 4c 25 28 4d 43  25 29 0d 01 82 4a f4 20  |:. L%(MC%)...J. |
00002ae0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00002af0  2d 2d 2d 2d 20 41 6c 6c  6f 63 61 74 65 20 62 75  |---- Allocate bu|
00002b00  66 66 65 72 73 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ffers ----------|
00002b10  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00002b20  2d 2d 2d 2d 0d 01 83 28  69 6e 64 69 72 65 63 74  |----...(indirect|
00002b30  69 6f 6e 6d 65 6d 25 3d  26 37 30 30 30 3a 6d 65  |ionmem%=&7000:me|
00002b40  6e 75 6d 65 6d 25 3d 26  31 34 30 30 0d 01 84 13  |numem%=&1400....|
00002b50  de 20 4d 69 25 20 32 30  2c 4d 6f 25 20 32 30 0d  |. Mi% 20,Mo% 20.|
00002b60  01 85 2f de 20 62 6c 6f  63 6b 25 20 26 31 30 30  |../. block% &100|
00002b70  30 2c 73 61 76 65 62 75  66 66 25 20 26 31 30 30  |0,savebuff% &100|
00002b80  2c 63 68 6f 69 63 65 73  25 20 26 31 30 30 0d 01  |,choices% &100..|
00002b90  86 3a de 20 62 75 66 66  25 20 69 6e 64 69 72 65  |.:. buff% indire|
00002ba0  63 74 69 6f 6e 6d 65 6d  25 3a 65 6e 64 62 75 66  |ctionmem%:endbuf|
00002bb0  66 25 3d 62 75 66 66 25  2b 69 6e 64 69 72 65 63  |f%=buff%+indirec|
00002bc0  74 69 6f 6e 6d 65 6d 25  0d 01 87 42 de 20 6d 65  |tionmem%...B. me|
00002bd0  6e 62 6c 6b 25 20 6d 65  6e 75 6d 65 6d 25 3a 6d  |nblk% menumem%:m|
00002be0  65 6e 5f 65 6e 64 25 3d  6d 65 6e 62 6c 6b 25 2b  |en_end%=menblk%+|
00002bf0  6d 65 6e 75 6d 65 6d 25  3a 6d 65 6e 75 5f 70 74  |menumem%:menu_pt|
00002c00  72 25 3d 6d 65 6e 62 6c  6b 25 0d 01 88 15 de 20  |r%=menblk%..... |
00002c10  66 69 65 6c 64 6d 65 6e  75 25 20 33 32 30 30 0d  |fieldmenu% 3200.|
00002c20  01 89 26 de 20 68 61 6e  64 25 20 31 36 3a 24 68  |..&. hand% 16:$h|
00002c30  61 6e 64 25 3d 22 50 70  74 72 5f 68 61 6e 64 2c  |and%="Pptr_hand,|
00002c40  31 32 2c 38 22 0d 01 8a  21 de 20 70 61 69 6e 74  |12,8"...!. paint|
00002c50  25 20 38 3a 24 70 61 69  6e 74 25 3d 22 66 69 6c  |% 8:$paint%="fil|
00002c60  65 5f 66 66 39 22 0d 01  8b 2a de 20 77 72 69 74  |e_ff9"...*. writ|
00002c70  65 70 25 20 31 36 3a 24  77 72 69 74 65 70 25 3d  |ep% 16:$writep%=|
00002c80  22 50 70 74 72 5f 77 72  69 74 65 2c 34 2c 34 22  |"Pptr_write,4,4"|
00002c90  0d 01 8c 21 de 20 74 69  63 6b 25 20 31 32 3a 24  |...!. tick% 12:$|
00002ca0  74 69 63 6b 25 3d 22 53  6e 75 6c 6c 2c 79 65 73  |tick%="Snull,yes|
00002cb0  22 0d 01 8d 21 de 20 64  62 61 73 65 25 20 31 30  |"...!. dbase% 10|
00002cc0  3a 24 64 62 61 73 65 25  3d 22 4e 6f 20 64 61 74  |:$dbase%="No dat|
00002cd0  61 22 0d 01 8e 29 de 20  70 73 70 72 69 74 65 25  |a"...). psprite%|
00002ce0  20 31 35 3a 24 70 73 70  72 69 74 65 25 3d 22 53  | 15:$psprite%="S|
00002cf0  21 50 6f 77 65 72 62 61  73 65 22 0d 01 8f 3a de  |!Powerbase"...:.|
00002d00  20 6d 65 6e 73 70 72 25  20 31 35 2c 6d 65 6e 74  | menspr% 15,ment|
00002d10  78 74 25 20 31 3a 24 6d  65 6e 73 70 72 25 3d 22  |xt% 1:$menspr%="|
00002d20  53 6d 65 6e 75 3b 5a 30  22 3a 24 6d 65 6e 74 78  |Smenu;Z0":$mentx|
00002d30  74 25 3d 22 22 0d 01 90  3c de 20 77 69 6e 73 70  |t%=""...<. winsp|
00002d40  72 25 20 31 35 2c 77 69  6e 74 78 74 25 20 31 3a  |r% 15,wintxt% 1:|
00002d50  24 77 69 6e 73 70 72 25  3d 22 53 77 69 6e 64 6f  |$winspr%="Swindo|
00002d60  77 3b 5a 30 22 3a 24 77  69 6e 74 78 74 25 3d 22  |w;Z0":$wintxt%="|
00002d70  22 0d 01 91 16 de 20 6d  65 74 68 6f 64 74 61 62  |"..... methodtab|
00002d80  6c 65 25 20 32 35 36 0d  01 92 4a f4 20 2d 2d 2d  |le% 256...J. ---|
00002d90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 20 49 6e 64 69 72  |---------- Indir|
00002da0  65 63 74 69 6f 6e 20 61  64 64 72 65 73 73 65 73  |ection addresses|
00002db0  20 66 6f 72 20 48 65 61  70 20 4d 61 6e 61 67 65  | for Heap Manage|
00002dc0  72 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |r --------------|
00002dd0  2d 0d 01 93 16 de 20 6b  65 79 61 6e 63 68 6f 72  |-..... keyanchor|
00002de0  25 28 4b 25 2b 31 29 0d  01 94 14 de 20 74 61 62  |%(K%+1)..... tab|
00002df0  61 6e 63 68 6f 72 25 28  54 25 29 0d 01 95 13 de  |anchor%(T%).....|
00002e00  20 70 72 69 6e 74 72 65  6c 24 28 54 25 29 0d 01  | printrel$(T%)..|
00002e10  96 2b de 20 62 6f 78 25  20 31 36 2c 62 6f 78 32  |.+. box% 16,box2|
00002e20  25 20 31 36 2c 6d 61 74  72 69 78 25 20 31 36 2c  |% 16,matrix% 16,|
00002e30  6f 72 69 67 69 6e 25 20  38 0d 01 97 05 e1 0d 01  |origin% 8.......|
00002e40  98 05 3a 0d 01 99 10 dd  20 f2 69 6e 69 74 5f 76  |..:..... .init_v|
00002e50  61 72 73 0d 01 9a 24 67  65 74 72 65 63 25 3d 32  |ars...$getrec%=2|
00002e60  31 33 3a 43 6c 69 65 6e  74 53 65 61 72 63 68 24  |13:ClientSearch$|
00002e70  3d 22 54 52 55 45 22 0d  01 9b 4c 49 6d 70 5f 77  |="TRUE"...LImp_w|
00002e80  61 69 74 25 3d a3 3a 49  6d 70 72 65 66 25 3d 2d  |ait%=.:Impref%=-|
00002e90  31 3a 6d 65 72 67 69 6e  67 25 3d a3 3a 6d 65 72  |1:merging%=.:mer|
00002ea0  67 65 6e 75 6d 25 3d 30  3a 6d 65 72 67 65 77 69  |genum%=0:mergewi|
00002eb0  74 68 24 3d 22 22 3a 64  6f 63 75 6d 65 6e 74 24  |th$="":document$|
00002ec0  3d 22 22 0d 01 9c 2d 6d  65 72 67 65 74 61 67 25  |=""...-mergetag%|
00002ed0  3d 32 31 34 3a 74 72 61  6e 73 74 61 67 25 3d 32  |=214:transtag%=2|
00002ee0  31 35 3a 70 72 69 6e 74  74 61 67 25 3d 32 31 36  |15:printtag%=216|
00002ef0  0d 01 9d 2c 66 6c 61 73  68 25 3d a3 3a 64 75 70  |...,flash%=.:dup|
00002f00  25 3d a3 3a 66 69 6c 74  65 72 25 3d a3 3a 6c 6f  |%=.:filter%=.:lo|
00002f10  67 6f 73 6c 6f 61 64 65  64 25 3d a3 0d 01 9e 34  |gosloaded%=....4|
00002f20  61 63 63 65 73 73 62 75  74 74 6f 6e 25 3d 30 3a  |accessbutton%=0:|
00002f30  73 74 6f 70 25 3d b9 3a  73 63 72 69 70 74 6f 6e  |stop%=.:scripton|
00002f40  25 3d a3 3a 63 75 73 74  6f 6d 69 73 65 25 3d a3  |%=.:customise%=.|
00002f50  0d 01 9f 25 64 69 73 70  6c 61 79 65 64 25 3d a3  |...%displayed%=.|
00002f60  3a 73 63 72 61 74 63 68  70 61 64 24 3d 22 22 3a  |:scratchpad$="":|
00002f70  6b 24 3d 22 22 0d 01 a0  3f 53 65 61 72 63 68 24  |k$=""...?Search$|
00002f80  3d 22 54 52 55 45 22 3a  46 69 6c 74 65 72 24 3d  |="TRUE":Filter$=|
00002f90  22 54 52 55 45 22 3a 52  45 43 25 3d 2d 31 3a 75  |"TRUE":REC%=-1:u|
00002fa0  73 65 6b 65 79 25 3d 2d  31 3a 75 73 65 76 61 6c  |sekey%=-1:useval|
00002fb0  24 3d 22 22 0d 01 a1 5f  72 65 61 6c 24 3d 22 22  |$=""..._real$=""|
00002fc0  3a 76 69 73 69 62 6c 65  24 3d 22 22 3a 72 65 66  |:visible$="":ref|
00002fd0  6f 72 6d 24 3d 22 22 3a  76 61 6c 24 3d 22 22 3a  |orm$="":val$="":|
00002fe0  63 61 6c 63 66 69 65 6c  64 25 3d 30 3a 73 61 76  |calcfield%=0:sav|
00002ff0  65 66 75 6e 63 24 3d 22  22 3a 73 61 76 65 74 6f  |efunc$="":saveto|
00003000  66 69 6c 65 25 3d a3 3a  73 74 61 72 74 6c 6f 67  |file%=.:startlog|
00003010  25 3d a3 0d 01 a2 2f 70  61 73 73 77 6f 72 64 24  |%=..../password$|
00003020  3d 22 22 3a 6d 79 72 65  66 25 3d 2d 31 3a 54 79  |="":myref%=-1:Ty|
00003030  70 65 25 3d 30 3a 66 69  65 6c 64 74 79 70 65 25  |pe%=0:fieldtype%|
00003040  3d 31 0d 01 a3 34 70 72  69 6e 74 69 6e 67 25 3d  |=1...4printing%=|
00003050  a3 3a 69 6e 64 65 78 69  6e 67 25 3d a3 3a 76 61  |.:indexing%=.:va|
00003060  6c 69 64 61 74 65 25 3d  b9 3a 72 65 6c 61 74 69  |lidate%=.:relati|
00003070  6f 6e 73 25 3d a3 0d 01  a4 3b 64 65 6c 77 61 72  |ons%=....;delwar|
00003080  6e 25 3d b9 3a 61 75 74  6f 73 61 76 65 25 3d a3  |n%=.:autosave%=.|
00003090  3a 65 78 70 6f 72 74 25  3d a3 3a 63 73 76 63 6f  |:export%=.:csvco|
000030a0  6e 76 25 3d a3 3a 73 61  76 65 69 6e 74 25 3d 31  |nv%=.:saveint%=1|
000030b0  30 0d 01 a5 26 61 75 74  6f 62 61 6c 61 6e 63 65  |0...&autobalance|
000030c0  25 3d 30 3a 62 61 6c 69  6e 74 25 3d 32 35 3a 61  |%=0:balint%=25:a|
000030d0  64 64 65 64 25 3d 30 0d  01 a6 2e 70 72 65 73 65  |dded%=0....prese|
000030e0  6e 74 25 3d 30 3a 66 69  65 6c 64 73 25 3d 30 3a  |nt%=0:fields%=0:|
000030f0  74 65 6d 70 6c 61 74 65  25 3d 30 3a 61 64 6a 75  |template%=0:adju|
00003100  73 74 25 3d a3 0d 01 a7  28 4c 69 73 74 65 64 25  |st%=....(Listed%|
00003110  3d a3 3a 77 72 69 74 69  6e 67 63 73 76 25 3d a3  |=.:writingcsv%=.|
00003120  3a 63 61 6c 63 65 72 72  6f 72 25 3d a3 0d 01 a8  |:calcerror%=....|
00003130  74 6c 6b 3d 30 3a 63 6c  3d 30 3a 56 3d 30 3a 46  |tlk=0:cl=0:V=0:F|
00003140  3d 30 3a 46 48 25 3d 30  3a 64 62 61 73 65 68 61  |=0:FH%=0:dbaseha|
00003150  6e 64 6c 65 25 3d 30 3a  63 73 76 68 61 6e 64 6c  |ndle%=0:csvhandl|
00003160  65 25 3d 30 3a 74 65 78  74 68 61 6e 64 6c 65 25  |e%=0:texthandle%|
00003170  3d 30 3a 74 65 78 74 25  3d 30 3a 74 6f 6f 62 69  |=0:text%=0:toobi|
00003180  67 68 61 6e 64 6c 65 25  3d 30 3a 6c 6f 67 68 61  |ghandle%=0:logha|
00003190  6e 64 6c 65 25 3d 30 3a  68 61 6e 64 6c 65 25 3d  |ndle%=0:handle%=|
000031a0  30 0d 01 a9 13 24 64 61  74 65 25 3d c4 36 2c bd  |0....$date%=.6,.|
000031b0  28 30 29 29 0d 01 aa 22  6d 6f 76 65 74 79 70 65  |(0))..."movetype|
000031c0  25 3d 38 3a 6d 6f 76 65  74 79 70 65 24 3d 22 4d  |%=8:movetype$="M|
000031d0  6f 76 65 20 89 22 0d 01  ab 68 71 75 69 74 25 3d  |ove ."...hquit%=|
000031e0  a3 3a 65 78 69 74 25 3d  a3 3a 6d 61 74 63 68 69  |.:exit%=.:matchi|
000031f0  6e 67 25 3d a3 3a 6e 65  77 72 65 63 25 3d a3 3a  |ng%=.:newrec%=.:|
00003200  76 61 6c 25 3d a3 3a 72  61 6d 25 3d a3 3a 41 63  |val%=.:ram%=.:Ac|
00003210  63 65 73 73 25 3d a3 3a  4d 6f 64 69 66 79 25 3d  |cess%=.:Modify%=|
00003220  a3 3a 77 61 72 6e 25 3d  a3 3a 64 65 73 69 67 6e  |.:warn%=.:design|
00003230  25 3d a3 3a 6e 65 77 74  72 65 65 25 3d a3 0d 01  |%=.:newtree%=...|
00003240  ac 2f 4c 65 6e 4c 69 6e  65 25 3d 30 3a 43 6f 75  |./LenLine%=0:Cou|
00003250  6e 74 25 3d 30 3a 53 74  61 72 74 25 3d 30 3a 45  |nt%=0:Start%=0:E|
00003260  6e 64 25 3d 30 3a 46 70  74 72 25 3d 30 0d 01 ad  |nd%=0:Fptr%=0...|
00003270  34 46 69 65 6c 64 6e 75  6d 62 65 72 25 3d 30 3a  |4Fieldnumber%=0:|
00003280  63 61 6c 63 6c 69 6e 6b  25 3d 30 3a 4b 65 79 66  |calclink%=0:Keyf|
00003290  6c 64 30 25 3d 30 3a 4b  65 79 66 6c 64 31 25 3d  |ld0%=0:Keyfld1%=|
000032a0  30 0d 01 ae 42 4c 61 73  74 54 61 62 6c 65 25 3d  |0...BLastTable%=|
000032b0  2d 31 3a 54 61 62 6c 65  6e 75 6d 62 65 72 25 3d  |-1:Tablenumber%=|
000032c0  2d 31 3a 54 61 62 73 4c  6f 61 64 65 64 24 3d 22  |-1:TabsLoaded$="|
000032d0  54 61 62 6c 65 73 22 3a  74 61 62 6c 65 24 28 29  |Tables":table$()|
000032e0  3d 22 22 0d 01 af 35 52  6f 77 73 25 3d 30 3a 54  |=""...5Rows%=0:T|
000032f0  61 62 46 69 65 6c 64 73  25 3d 30 3a 52 65 63 25  |abFields%=0:Rec%|
00003300  3d 30 3a 4d 61 74 63 68  5f 74 61 67 25 3d 31 3a  |=0:Match_tag%=1:|
00003310  66 61 73 74 25 3d 31 30  0d 01 b0 47 4b 65 79 73  |fast%=10...GKeys|
00003320  25 3d 30 3a 6b 65 79 6c  69 6d 69 74 25 3d 31 3a  |%=0:keylimit%=1:|
00003330  6b 65 79 6c 65 6e 25 3d  31 3a 4c 48 25 3d 39 30  |keylen%=1:LH%=90|
00003340  3a 66 69 6c 65 25 3d 30  3a 6b 65 79 25 3d 30 3a  |:file%=0:key%=0:|
00003350  74 6f 70 3d 38 2a 66 69  6c 65 25 2b 4c 48 25 0d  |top=8*file%+LH%.|
00003360  01 b1 2b 6b 65 79 66 75  6e 63 24 3d 22 22 3a 66  |..+keyfunc$="":f|
00003370  69 65 6c 64 66 75 6e 63  24 3d 22 22 3a 4b 65 79  |ieldfunc$="":Key|
00003380  73 25 3d 30 3a 52 55 25  3d 30 0d 01 b2 31 70 72  |s%=0:RU%=0...1pr|
00003390  69 6e 74 6f 72 64 65 72  24 3d 22 22 3a 46 6f 72  |intorder$="":For|
000033a0  6d 24 3d 22 22 3a 49 6d  70 43 6f 6d 24 3d 22 22  |m$="":ImpCom$=""|
000033b0  3a 6d 61 72 67 69 6e 24  3d 22 22 0d 01 b3 1b 75  |:margin$=""....u|
000033c0  6f 6e 24 3d bd 28 32 37  29 2b bd 28 25 31 30 30  |on$=.(27)+.(%100|
000033d0  30 31 30 30 30 29 0d 01  b4 38 46 69 6c 65 6e 61  |01000)...8Filena|
000033e0  6d 65 24 3d 22 22 3a 65  78 74 72 61 6b 65 79 73  |me$="":extrakeys|
000033f0  24 3d 22 22 3a 65 78 74  72 61 74 61 62 73 24 3d  |$="":extratabs$=|
00003400  22 22 3a 6c 6f 67 70 61  74 68 24 3d 22 22 0d 01  |"":logpath$=""..|
00003410  b5 32 6d 6f 6e 74 68 73  24 3d 22 4a 61 6e 46 65  |.2months$="JanFe|
00003420  62 4d 61 72 41 70 72 4d  61 79 4a 75 6e 4a 75 6c  |bMarAprMayJunJul|
00003430  41 75 67 53 65 70 4f 63  74 4e 6f 76 44 65 63 22  |AugSepOctNovDec"|
00003440  0d 01 b6 17 70 69 74 63  68 24 3d bd 28 33 31 29  |....pitch$=.(31)|
00003450  2b 22 39 30 30 31 22 0d  01 b7 05 e1 0d 01 b8 05  |+"9001".........|
00003460  3a 0d 01 b9 4b f4 20 57  69 6e 64 6f 77 20 68 61  |:...K. Window ha|
00003470  6e 64 6c 69 6e 67 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ndling ---------|
00003480  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000034a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 01 ba 05  |------------....|
000034b0  3a 0d 01 bb 15 dd 20 f2  63 72 65 61 74 65 5f 77  |:..... .create_w|
000034c0  69 6e 64 6f 77 73 0d 01  bc 3d c8 99 20 22 57 69  |indows...=.. "Wi|
000034d0  6d 70 5f 4f 70 65 6e 54  65 6d 70 6c 61 74 65 22  |mp_OpenTemplate"|
000034e0  2c 2c 22 3c 50 62 61 73  65 24 44 69 72 3e 2e 52  |,,"<Pbase$Dir>.R|
000034f0  65 73 6f 75 72 63 65 73  2e 54 65 6d 70 6c 61 74  |esources.Templat|
00003500  65 73 22 0d 01 bd 27 69  6e 66 6f 57 25 3d a4 6e  |es"...'infoW%=.n|
00003510  65 77 5f 77 69 6e 64 6f  77 28 22 69 6e 66 6f 22  |ew_window("info"|
00003520  2c 73 70 72 69 74 65 73  25 29 0d 01 be 1d 24 a4  |,sprites%)....$.|
00003530  74 65 78 74 28 69 6e 66  6f 57 25 2c 37 29 3d 76  |text(infoW%,7)=v|
00003540  65 72 73 69 6f 6e 24 0d  01 bf 20 24 a4 74 65 78  |ersion$... $.tex|
00003550  74 28 69 6e 66 6f 57 25  2c 38 29 3d 69 6e 74 76  |t(infoW%,8)=intv|
00003560  65 72 73 69 6f 6e 24 0d  01 c0 3c 6b 65 79 70 61  |ersion$...<keypa|
00003570  64 57 25 3d a4 6e 65 77  5f 77 69 6e 64 6f 77 28  |dW%=.new_window(|
00003580  22 6b 65 79 70 61 64 22  2c 73 70 72 69 74 65 73  |"keypad",sprites|
00003590  25 29 3a 54 69 74 6c 65  25 3d 62 6c 6f 63 6b 25  |%):Title%=block%|
000035a0  21 37 32 0d 01 c1 7a 73  61 76 65 73 75 62 57 25  |!72...zsavesubW%|
000035b0  3d a4 6e 65 77 5f 77 69  6e 64 6f 77 28 22 73 61  |=.new_window("sa|
000035c0  76 65 73 75 62 22 2c 73  70 72 69 74 65 73 25 29  |vesub",sprites%)|
000035d0  3a 53 75 62 4e 61 6d 65  25 3d a4 74 65 78 74 28  |:SubName%=.text(|
000035e0  73 61 76 65 73 75 62 57  25 2c 33 29 3a 53 75 62  |savesubW%,3):Sub|
000035f0  53 70 72 69 74 65 25 3d  a4 76 61 6c 28 73 61 76  |Sprite%=.val(sav|
00003600  65 73 75 62 57 25 2c 31  29 3a 53 75 62 54 69 74  |esubW%,1):SubTit|
00003610  6c 65 25 3d 62 6c 6f 63  6b 25 21 37 32 0d 01 c2  |le%=block%!72...|
00003620  55 73 61 76 65 57 25 3d  a4 6e 65 77 5f 77 69 6e  |UsaveW%=.new_win|
00003630  64 6f 77 28 22 73 61 76  65 22 2c 31 29 3a 53 61  |dow("save",1):Sa|
00003640  76 65 4e 61 6d 65 25 3d  a4 74 65 78 74 28 73 61  |veName%=.text(sa|
00003650  76 65 57 25 2c 30 29 3a  53 61 76 65 53 70 72 69  |veW%,0):SaveSpri|
00003660  74 65 25 3d a4 76 61 6c  28 73 61 76 65 57 25 2c  |te%=.val(saveW%,|
00003670  31 29 0d 01 c3 41 64 61  74 61 64 69 63 57 25 3d  |1)...AdatadicW%=|
00003680  a4 6e 65 77 5f 77 69 6e  64 6f 77 28 22 64 61 74  |.new_window("dat|
00003690  61 64 69 63 22 2c 73 70  72 69 74 65 73 25 29 3a  |adic",sprites%):|
000036a0  54 61 62 54 69 74 6c 65  25 3d 62 6c 6f 63 6b 25  |TabTitle%=block%|
000036b0  21 37 32 0d 01 c4 5e 61  63 63 65 73 73 57 25 3d  |!72...^accessW%=|
000036c0  a4 6e 65 77 5f 77 69 6e  64 6f 77 28 22 61 63 63  |.new_window("acc|
000036d0  65 73 73 22 2c 73 70 72  69 74 65 73 25 29 3a 50  |ess",sprites%):P|
000036e0  61 73 73 77 6f 72 64 25  3d a4 74 65 78 74 28 61  |assword%=.text(a|
000036f0  63 63 65 73 73 57 25 2c  30 29 3a 41 63 63 65 73  |ccessW%,0):Acces|
00003700  73 54 69 74 6c 65 25 3d  62 6c 6f 63 6b 25 21 37  |sTitle%=block%!7|
00003710  32 0d 01 c5 71 70 61 73  73 57 25 3d a4 6e 65 77  |2...qpassW%=.new|
00003720  5f 77 69 6e 64 6f 77 28  22 70 61 73 73 77 6f 72  |_window("passwor|
00003730  64 22 2c 73 70 72 69 74  65 73 25 29 3a 52 65 61  |d",sprites%):Rea|
00003740  64 25 3d a4 74 65 78 74  28 70 61 73 73 57 25 2c  |d%=.text(passW%,|
00003750  32 29 3a 57 72 69 74 65  25 3d a4 74 65 78 74 28  |2):Write%=.text(|
00003760  70 61 73 73 57 25 2c 33  29 3a 4d 61 6e 61 67 65  |passW%,3):Manage|
00003770  72 25 3d a4 74 65 78 74  28 70 61 73 73 57 25 2c  |r%=.text(passW%,|
00003780  35 29 0d 01 c6 3a 6d 61  69 6e 57 25 3d a4 6e 65  |5)...:mainW%=.ne|
00003790  77 5f 77 69 6e 64 6f 77  28 22 6d 61 69 6e 22 2c  |w_window("main",|
000037a0  73 70 72 69 74 65 73 25  29 3a 52 65 63 49 6e 66  |sprites%):RecInf|
000037b0  6f 25 3d 62 6c 6f 63 6b  25 21 37 32 0d 01 c7 3f  |o%=block%!72...?|
000037c0  6b 65 79 57 25 3d a4 6e  65 77 5f 77 69 6e 64 6f  |keyW%=.new_windo|
000037d0  77 28 22 63 68 61 6e 67  65 6b 65 79 22 2c 73 70  |w("changekey",sp|
000037e0  72 69 74 65 73 25 29 3a  4b 65 79 54 69 74 6c 65  |rites%):KeyTitle|
000037f0  25 3d 62 6c 6f 63 6b 25  21 37 32 0d 01 c8 31 46  |%=block%!72...1F|
00003800  31 64 6b 65 79 25 3d a4  74 65 78 74 28 6b 65 79  |1dkey%=.text(key|
00003810  57 25 2c 30 29 3a 46 32  64 6b 65 79 25 3d a4 74  |W%,0):F2dkey%=.t|
00003820  65 78 74 28 6b 65 79 57  25 2c 31 29 0d 01 c9 0e  |ext(keyW%,1)....|
00003830  de 20 57 6b 65 79 25 28  33 29 0d 01 ca 11 e3 20  |. Wkey%(3)..... |
00003840  77 6f 72 64 25 3d 30 20  b8 20 33 0d 01 cb 27 20  |word%=0 . 3...' |
00003850  20 57 6b 65 79 25 28 77  6f 72 64 25 29 3d a4 74  | Wkey%(word%)=.t|
00003860  65 78 74 28 6b 65 79 57  25 2c 77 6f 72 64 25 2b  |ext(keyW%,word%+|
00003870  32 29 0d 01 cc 0b ed 20  77 6f 72 64 25 0d 01 cd  |2)..... word%...|
00003880  19 4b 65 79 4e 6f 25 3d  a4 74 65 78 74 28 6b 65  |.KeyNo%=.text(ke|
00003890  79 57 25 2c 36 29 0d 01  ce 42 63 68 61 6e 67 65  |yW%,6)...Bchange|
000038a0  57 25 3d a4 6e 65 77 5f  77 69 6e 64 6f 77 28 22  |W%=.new_window("|
000038b0  63 68 61 6e 67 65 22 2c  73 70 72 69 74 65 73 25  |change",sprites%|
000038c0  29 3a 43 68 61 6e 67 65  54 69 74 6c 65 25 3d 62  |):ChangeTitle%=b|
000038d0  6c 6f 63 6b 25 21 37 32  0d 01 cf 27 6d 6f 76 65  |lock%!72...'move|
000038e0  57 25 3d a4 6e 65 77 5f  77 69 6e 64 6f 77 28 22  |W%=.new_window("|
000038f0  6d 6f 76 65 22 2c 73 70  72 69 74 65 73 25 29 0d  |move",sprites%).|
00003900  01 d0 29 74 61 62 6c 65  57 25 3d a4 6e 65 77 5f  |..)tableW%=.new_|
00003910  77 69 6e 64 6f 77 28 22  74 61 62 6c 65 22 2c 73  |window("table",s|
00003920  70 72 69 74 65 73 25 29  0d 01 d1 8a 6c 69 6e 6b  |prites%)....link|
00003930  57 25 3d a4 6e 65 77 5f  77 69 6e 64 6f 77 28 22  |W%=.new_window("|
00003940  6c 69 6e 6b 22 2c 73 70  72 69 74 65 73 25 29 3a  |link",sprites%):|
00003950  4c 69 6e 6b 54 69 74 6c  65 25 3d 62 6c 6f 63 6b  |LinkTitle%=block|
00003960  25 21 37 32 3a 54 61 62  6c 65 6e 61 6d 65 25 3d  |%!72:Tablename%=|
00003970  a4 74 65 78 74 28 6c 69  6e 6b 57 25 2c 30 29 3a  |.text(linkW%,0):|
00003980  66 69 65 6c 64 6e 75 6d  25 3d a4 74 65 78 74 28  |fieldnum%=.text(|
00003990  6c 69 6e 6b 57 25 2c 32  29 3a 65 78 70 61 6e 64  |linkW%,2):expand|
000039a0  25 3d a4 74 65 78 74 28  6c 69 6e 6b 57 25 2c 31  |%=.text(linkW%,1|
000039b0  30 29 0d 01 d2 56 6d 69  73 63 57 25 3d a4 6e 65  |0)...VmiscW%=.ne|
000039c0  77 5f 77 69 6e 64 6f 77  28 22 6d 69 73 63 22 2c  |w_window("misc",|
000039d0  73 70 72 69 74 65 73 25  29 3a 64 61 74 61 62 61  |sprites%):databa|
000039e0  73 65 25 3d a4 74 65 78  74 28 6d 69 73 63 57 25  |se%=.text(miscW%|
000039f0  2c 31 29 3a 24 64 61 74  61 62 61 73 65 25 3d 22  |,1):$database%="|
00003a00  4e 6f 20 64 61 74 61 22  0d 01 d3 0f e3 20 69 63  |No data"..... ic|
00003a10  25 3d 32 20 b8 20 37 0d  01 d4 24 20 20 44 61 74  |%=2 . 7...$  Dat|
00003a20  65 25 28 69 63 25 2d 32  29 3d a4 74 65 78 74 28  |e%(ic%-2)=.text(|
00003a30  6d 69 73 63 57 25 2c 69  63 25 29 0d 01 d5 09 ed  |miscW%,ic%).....|
00003a40  20 69 63 25 0d 01 d6 4f  75 73 65 64 25 3d a4 74  | ic%...Oused%=.t|
00003a50  65 78 74 28 6d 69 73 63  57 25 2c 31 37 29 3a 66  |ext(miscW%,17):f|
00003a60  69 6c 65 73 69 7a 65 25  3d a4 74 65 78 74 28 6d  |ilesize%=.text(m|
00003a70  69 73 63 57 25 2c 31 38  29 3a 70 65 72 63 65 6e  |iscW%,18):percen|
00003a80  74 25 3d a4 74 65 78 74  28 6d 69 73 63 57 25 2c  |t%=.text(miscW%,|
00003a90  31 34 29 0d 01 d7 29 70  72 69 6e 74 57 25 3d a4  |14)...)printW%=.|
00003aa0  6e 65 77 5f 77 69 6e 64  6f 77 28 22 70 72 69 6e  |new_window("prin|
00003ab0  74 22 2c 73 70 72 69 74  65 73 25 29 0d 01 d8 29  |t",sprites%)...)|
00003ac0  6d 61 74 63 68 57 25 3d  a4 6e 65 77 5f 77 69 6e  |matchW%=.new_win|
00003ad0  64 6f 77 28 22 6d 61 74  63 68 22 2c 73 70 72 69  |dow("match",spri|
00003ae0  74 65 73 25 29 0d 01 d9  27 6c 69 73 74 57 25 3d  |tes%)...'listW%=|
00003af0  a4 6e 65 77 5f 77 69 6e  64 6f 77 28 22 6c 69 73  |.new_window("lis|
00003b00  74 22 2c 73 70 72 69 74  65 73 25 29 0d 01 da 58  |t",sprites%)...X|
00003b10  63 72 65 61 74 65 57 25  3d a4 6e 65 77 5f 77 69  |createW%=.new_wi|
00003b20  6e 64 6f 77 28 22 63 72  65 61 74 65 22 2c 73 70  |ndow("create",sp|
00003b30  72 69 74 65 73 25 29 3a  46 74 69 74 6c 65 54 65  |rites%):FtitleTe|
00003b40  78 74 25 3d 62 6c 6f 63  6b 25 21 37 32 3a 24 46  |xt%=block%!72:$F|
00003b50  74 69 74 6c 65 54 65 78  74 25 3d 22 46 69 65 6c  |titleText%="Fiel|
00003b60  64 20 30 22 0d 01 db b3  44 65 73 63 54 65 78 74  |d 0"....DescText|
00003b70  25 3d a4 74 65 78 74 28  63 72 65 61 74 65 57 25  |%=.text(createW%|
00003b80  2c 34 29 3a 54 61 67 54  65 78 74 25 3d a4 74 65  |,4):TagText%=.te|
00003b90  78 74 28 63 72 65 61 74  65 57 25 2c 35 29 3a 4c  |xt(createW%,5):L|
00003ba0  65 6e 54 65 78 74 25 3d  a4 74 65 78 74 28 63 72  |enText%=.text(cr|
00003bb0  65 61 74 65 57 25 2c 36  29 3a 56 61 6c 54 65 78  |eateW%,6):ValTex|
00003bc0  74 25 3d a4 74 65 78 74  28 63 72 65 61 74 65 57  |t%=.text(createW|
00003bd0  25 2c 32 38 29 3a 49 6e  73 54 65 78 74 25 3d a4  |%,28):InsText%=.|
00003be0  74 65 78 74 28 63 72 65  61 74 65 57 25 2c 32 36  |text(createW%,26|
00003bf0  29 3a 46 69 78 70 74 25  3d a4 74 65 78 74 28 63  |):Fixpt%=.text(c|
00003c00  72 65 61 74 65 57 25 2c  31 33 29 3a 24 46 69 78  |reateW%,13):$Fix|
00003c10  70 74 25 3d 22 32 22 0d  01 dc 3b 6d 69 6e 74 65  |pt%="2"...;minte|
00003c20  78 74 25 3d a4 74 65 78  74 28 63 72 65 61 74 65  |xt%=.text(create|
00003c30  57 25 2c 31 35 29 3a 6d  61 78 74 65 78 74 25 3d  |W%,15):maxtext%=|
00003c40  a4 74 65 78 74 28 63 72  65 61 74 65 57 25 2c 32  |.text(createW%,2|
00003c50  35 29 0d 01 dd 64 62 6f  78 58 25 3d a4 74 65 78  |5)...dboxX%=.tex|
00003c60  74 28 63 72 65 61 74 65  57 25 2c 37 29 3a 62 6f  |t(createW%,7):bo|
00003c70  78 59 25 3d a4 74 65 78  74 28 63 72 65 61 74 65  |xY%=.text(create|
00003c80  57 25 2c 38 29 3a 62 6f  78 57 25 3d a4 74 65 78  |W%,8):boxW%=.tex|
00003c90  74 28 63 72 65 61 74 65  57 25 2c 39 29 3a 62 6f  |t(createW%,9):bo|
00003ca0  78 48 25 3d a4 74 65 78  74 28 63 72 65 61 74 65  |xH%=.text(create|
00003cb0  57 25 2c 31 30 29 0d 01  de 41 72 65 6c 61 74 65  |W%,10)...Arelate|
00003cc0  57 25 3d a4 6e 65 77 5f  77 69 6e 64 6f 77 28 22  |W%=.new_window("|
00003cd0  72 65 6c 61 74 69 6f 6e  22 2c 73 70 72 69 74 65  |relation",sprite|
00003ce0  73 25 29 3a 52 65 6c 54  69 74 6c 65 25 3d 62 6c  |s%):RelTitle%=bl|
00003cf0  6f 63 6b 25 21 37 32 0d  01 df 40 72 65 66 6f 72  |ock%!72...@refor|
00003d00  6d 57 25 3d a4 6e 65 77  5f 77 69 6e 64 6f 77 28  |mW%=.new_window(|
00003d10  22 72 65 66 6f 72 6d 22  2c 73 70 72 69 74 65 73  |"reform",sprites|
00003d20  25 29 3a 52 65 66 6d 54  69 74 6c 65 25 3d 62 6c  |%):RefmTitle%=bl|
00003d30  6f 63 6b 25 21 37 32 0d  01 e0 26 63 6f 6c 57 25  |ock%!72...&colW%|
00003d40  3d a4 6e 65 77 5f 77 69  6e 64 6f 77 28 22 63 6f  |=.new_window("co|
00003d50  6c 73 22 2c 73 70 72 69  74 65 73 25 29 0d 01 e1  |ls",sprites%)...|
00003d60  56 63 61 6c 63 57 25 3d  a4 6e 65 77 5f 77 69 6e  |VcalcW%=.new_win|
00003d70  64 6f 77 28 22 63 61 6c  63 22 2c 73 70 72 69 74  |dow("calc",sprit|
00003d80  65 73 25 29 3a 43 61 6c  63 46 6f 72 6d 25 3d a4  |es%):CalcForm%=.|
00003d90  74 65 78 74 28 63 61 6c  63 57 25 2c 30 29 3a 43  |text(calcW%,0):C|
00003da0  61 6c 63 54 69 74 6c 65  25 3d 62 6c 6f 63 6b 25  |alcTitle%=block%|
00003db0  21 37 32 0d 01 e2 29 6c  61 62 65 6c 57 25 3d a4  |!72...)labelW%=.|
00003dc0  6e 65 77 5f 77 69 6e 64  6f 77 28 22 6c 61 62 65  |new_window("labe|
00003dd0  6c 22 2c 73 70 72 69 74  65 73 25 29 0d 01 e3 2d  |l",sprites%)...-|
00003de0  70 73 65 6c 65 63 74 57  25 3d a4 6e 65 77 5f 77  |pselectW%=.new_w|
00003df0  69 6e 64 6f 77 28 22 70  73 65 6c 65 63 74 22 2c  |indow("pselect",|
00003e00  73 70 72 69 74 65 73 25  29 0d 01 e4 3f 6d 65 72  |sprites%)...?mer|
00003e10  67 65 57 25 3d a4 6e 65  77 5f 77 69 6e 64 6f 77  |geW%=.new_window|
00003e20  28 22 6d 65 72 67 65 22  2c 73 70 72 69 74 65 73  |("merge",sprites|
00003e30  25 29 3a 4d 65 72 67 65  54 69 74 6c 65 25 3d 62  |%):MergeTitle%=b|
00003e40  6c 6f 63 6b 25 21 37 32  0d 01 e5 50 73 69 7a 65  |lock%!72...Psize|
00003e50  57 25 3d a4 6e 65 77 5f  77 69 6e 64 6f 77 28 22  |W%=.new_window("|
00003e60  73 69 7a 65 22 2c 73 70  72 69 74 65 73 25 29 3a  |size",sprites%):|
00003e70  52 65 63 6f 72 64 73 25  3d a4 74 65 78 74 28 73  |Records%=.text(s|
00003e80  69 7a 65 57 25 2c 31 29  3a 24 52 65 63 6f 72 64  |izeW%,1):$Record|
00003e90  73 25 3d 22 31 30 30 22  0d 01 e6 2e 49 6e 63 72  |s%="100"....Incr|
00003ea0  65 6d 65 6e 74 25 3d a4  74 65 78 74 28 73 69 7a  |ement%=.text(siz|
00003eb0  65 57 25 2c 33 29 3a 24  49 6e 63 72 65 6d 65 6e  |eW%,3):$Incremen|
00003ec0  74 25 3d 22 30 22 0d 01  e7 3d 63 73 76 57 25 3d  |t%="0"...=csvW%=|
00003ed0  a4 6e 65 77 5f 77 69 6e  64 6f 77 28 22 63 73 76  |.new_window("csv|
00003ee0  66 69 6c 65 22 2c 73 70  72 69 74 65 73 25 29 3a  |file",sprites%):|
00003ef0  43 53 56 54 69 74 6c 65  25 3d 62 6c 6f 63 6b 25  |CSVTitle%=block%|
00003f00  21 37 32 0d 01 e8 1b c8  99 20 22 57 69 6d 70 5f  |!72...... "Wimp_|
00003f10  43 6c 6f 73 65 54 65 6d  70 6c 61 74 65 22 0d 01  |CloseTemplate"..|
00003f20  e9 1e e7 20 63 6f 6d 6d  6f 6e 25 20 8c 20 f2 63  |... common% . .c|
00003f30  6f 6d 6d 6f 6e 62 75 66  66 65 72 73 0d 01 ea 05  |ommonbuffers....|
00003f40  e1 0d 01 eb 05 3a 0d 01  ec 14 dd 20 f2 63 6f 6d  |.....:..... .com|
00003f50  6d 6f 6e 62 75 66 66 65  72 73 0d 01 ed 22 f2 63  |monbuffers...".c|
00003f60  6f 6d 6d 6f 6e 28 6b 65  79 70 61 64 57 25 2c 32  |ommon(keypadW%,2|
00003f70  39 2c 6d 61 74 63 68 57  25 2c 30 29 0d 01 ee 1f  |9,matchW%,0)....|
00003f80  f2 63 6f 6d 6d 6f 6e 28  6d 6f 76 65 57 25 2c 37  |.common(moveW%,7|
00003f90  2c 6d 61 74 63 68 57 25  2c 30 29 0d 01 ef 21 f2  |,matchW%,0)...!.|
00003fa0  63 6f 6d 6d 6f 6e 28 63  68 61 6e 67 65 57 25 2c  |common(changeW%,|
00003fb0  33 2c 6d 61 74 63 68 57  25 2c 30 29 0d 01 f0 22  |3,matchW%,0)..."|
00003fc0  f2 63 6f 6d 6d 6f 6e 28  73 61 76 65 73 75 62 57  |.common(savesubW|
00003fd0  25 2c 30 2c 6d 61 74 63  68 57 25 2c 30 29 0d 01  |%,0,matchW%,0)..|
00003fe0  f1 20 f2 63 6f 6d 6d 6f  6e 28 6d 65 72 67 65 57  |. .common(mergeW|
00003ff0  25 2c 33 2c 6d 61 74 63  68 57 25 2c 30 29 0d 01  |%,3,matchW%,0)..|
00004000  f2 05 e1 0d 01 f3 05 3a  0d 01 f4 20 dd 20 f2 63  |.......:... . .c|
00004010  6f 6d 6d 6f 6e 28 77 69  25 2c 69 63 25 2c 77 69  |ommon(wi%,ic%,wi|
00004020  63 25 2c 69 63 63 25 29  0d 01 f5 1d 46 6f 72 6d  |c%,icc%)....Form|
00004030  75 6c 61 25 3d a4 74 65  78 74 28 77 69 63 25 2c  |ula%=.text(wic%,|
00004040  69 63 63 25 29 0d 01 f6  3b 21 62 6c 6f 63 6b 25  |icc%)...;!block%|
00004050  3d 77 69 25 3a 62 6c 6f  63 6b 25 21 34 3d 69 63  |=wi%:block%!4=ic|
00004060  25 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 49 63  |%:.. "Wimp_GetIc|
00004070  6f 6e 53 74 61 74 65 22  2c 2c 62 6c 6f 63 6b 25  |onState",,block%|
00004080  0d 01 f7 20 c8 99 20 22  57 69 6d 70 5f 44 65 6c  |... .. "Wimp_Del|
00004090  65 74 65 49 63 6f 6e 22  2c 2c 62 6c 6f 63 6b 25  |eteIcon",,block%|
000040a0  0d 01 f8 23 62 6c 6f 63  6b 25 21 32 38 3d 46 6f  |...#block%!28=Fo|
000040b0  72 6d 75 6c 61 25 3a 62  6c 6f 63 6b 25 21 34 3d  |rmula%:block%!4=|
000040c0  77 69 25 0d 01 f9 2c c8  99 20 22 57 69 6d 70 5f  |wi%...,.. "Wimp_|
000040d0  43 72 65 61 74 65 49 63  6f 6e 22 2c 2c 62 6c 6f  |CreateIcon",,blo|
000040e0  63 6b 25 2b 34 20 b8 20  68 61 6e 64 6c 65 25 0d  |ck%+4 . handle%.|
000040f0  01 fa 05 e1 0d 01 fb 05  3a 0d 01 fc 1a dd 20 f2  |........:..... .|
00004100  63 6f 6d 6d 6f 6e 63 61  73 65 28 77 69 25 2c 69  |commoncase(wi%,i|
00004110  63 25 29 0d 01 fd 09 ea  20 6f 6e 25 0d 01 fe 17  |c%)..... on%....|
00004120  e7 20 ac 20 63 6f 6d 6d  6f 6e 63 61 73 65 25 20  |. . commoncase% |
00004130  8c 20 e1 0d 01 ff 1a 6f  6e 25 3d a4 73 65 6c 65  |. .....on%=.sele|
00004140  63 74 65 64 28 77 69 25  2c 69 63 25 29 0d 02 00  |cted(wi%,ic%)...|
00004150  1d f2 73 65 74 5f 69 63  6f 6e 28 6d 61 74 63 68  |..set_icon(match|
00004160  57 25 2c 31 36 2c 6f 6e  25 29 0d 02 01 1e f2 73  |W%,16,on%).....s|
00004170  65 74 5f 69 63 6f 6e 28  6b 65 79 70 61 64 57 25  |et_icon(keypadW%|
00004180  2c 33 32 2c 6f 6e 25 29  0d 02 02 1b f2 73 65 74  |,32,on%).....set|
00004190  5f 69 63 6f 6e 28 6d 6f  76 65 57 25 2c 39 2c 6f  |_icon(moveW%,9,o|
000041a0  6e 25 29 0d 02 03 1d f2  73 65 74 5f 69 63 6f 6e  |n%).....set_icon|
000041b0  28 63 68 61 6e 67 65 57  25 2c 35 2c 6f 6e 25 29  |(changeW%,5,on%)|
000041c0  0d 02 04 1e f2 73 65 74  5f 69 63 6f 6e 28 73 61  |.....set_icon(sa|
000041d0  76 65 73 75 62 57 25 2c  35 2c 6f 6e 25 29 0d 02  |vesubW%,5,on%)..|
000041e0  05 1d f2 73 65 74 5f 69  63 6f 6e 28 6d 65 72 67  |...set_icon(merg|
000041f0  65 57 25 2c 31 32 2c 6f  6e 25 29 0d 02 06 05 e1  |eW%,12,on%).....|
00004200  0d 02 07 05 3a 0d 02 08  1c dd 20 a4 6e 65 77 5f  |....:..... .new_|
00004210  77 69 6e 64 6f 77 28 6e  61 6d 65 24 2c 73 70 25  |window(name$,sp%|
00004220  29 0d 02 09 0d ea 20 68  61 6e 64 6c 65 25 0d 02  |)..... handle%..|
00004230  0a 46 c8 99 20 22 57 69  6d 70 5f 4c 6f 61 64 54  |.F.. "Wimp_LoadT|
00004240  65 6d 70 6c 61 74 65 22  2c 2c 62 6c 6f 63 6b 25  |emplate",,block%|
00004250  2c 62 75 66 66 25 2c 65  6e 64 62 75 66 66 25 2c  |,buff%,endbuff%,|
00004260  2d 31 2c 6e 61 6d 65 24  2c 30 20 b8 20 2c 2c 62  |-1,name$,0 . ,,b|
00004270  75 66 66 25 0d 02 0b 27  e7 20 6e 61 6d 65 24 3d  |uff%...'. name$=|
00004280  22 6d 61 69 6e 22 20 8c  20 62 6c 6f 63 6b 25 3f  |"main" . block%?|
00004290  33 35 3d 77 69 6e 62 61  63 6b 25 0d 02 0c 11 62  |35=winback%....b|
000042a0  6c 6f 63 6b 25 21 36 34  3d 73 70 25 0d 02 0d 2c  |lock%!64=sp%...,|
000042b0  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 57  |.. "Wimp_CreateW|
000042c0  69 6e 64 6f 77 22 2c 2c  62 6c 6f 63 6b 25 20 b8  |indow",,block% .|
000042d0  20 68 61 6e 64 6c 65 25  0d 02 0e 0c 3d 68 61 6e  | handle%....=han|
000042e0  64 6c 65 25 0d 02 0f 05  3a 0d 02 10 13 dd 20 f2  |dle%....:..... .|
000042f0  73 68 6f 77 5f 77 69 6e  64 6f 77 73 0d 02 11 18  |show_windows....|
00004300  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 6d 61 69  |.open_window(mai|
00004310  6e 57 25 29 0d 02 12 18  e7 20 28 70 72 65 73 65  |nW%)..... (prese|
00004320  6e 74 25 20 80 20 37 29  3d 37 20 8c 0d 02 13 1d  |nt% . 7)=7 .....|
00004330  20 20 e7 20 a4 73 65 6c  65 63 74 65 64 28 70 61  |  . .selected(pa|
00004340  73 73 57 25 2c 39 29 20  8c 0d 02 14 39 20 20 20  |ssW%,9) ....9   |
00004350  20 21 62 6c 6f 63 6b 25  3d 6b 65 79 70 61 64 57  | !block%=keypadW|
00004360  25 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 57 69  |%:.. "Wimp_GetWi|
00004370  6e 64 6f 77 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |ndowState",,bloc|
00004380  6b 25 0d 02 15 35 20 20  20 20 62 6c 6f 63 6b 25  |k%...5    block%|
00004390  21 31 32 3d 62 6c 6f 63  6b 25 21 34 2b 36 36 30  |!12=block%!4+660|
000043a0  3a 62 6c 6f 63 6b 25 21  38 3d 62 6c 6f 63 6b 25  |:block%!8=block%|
000043b0  21 31 36 2d 33 32 38 0d  02 16 2c 20 20 20 20 62  |!16-328...,    b|
000043c0  6c 6f 63 6b 25 21 32 30  3d 30 3a 62 6c 6f 63 6b  |lock%!20=0:block|
000043d0  25 21 32 34 3d 30 3a 62  6c 6f 63 6b 25 21 32 38  |%!24=0:block%!28|
000043e0  3d 2d 31 0d 02 17 24 20  20 20 20 c8 99 20 22 57  |=-1...$    .. "W|
000043f0  69 6d 70 5f 4f 70 65 6e  57 69 6e 64 6f 77 22 2c  |imp_OpenWindow",|
00004400  2c 62 6c 6f 63 6b 25 0d  02 18 07 20 20 cd 0d 02  |,block%....  ...|
00004410  19 1e 20 20 61 64 64 72  3d a4 6d 6f 76 65 74 6f  |..  addr=.moveto|
00004420  28 6b 65 79 25 2c 74 6f  70 2c 31 29 0d 02 1a 05  |(key%,top,1)....|
00004430  cd 0d 02 1b 24 e7 20 4c  69 73 74 65 64 25 20 8c  |....$. Listed% .|
00004440  20 f2 6f 70 65 6e 5f 77  69 6e 64 6f 77 28 6c 69  | .open_window(li|
00004450  73 74 57 25 29 0d 02 1c  05 e1 0d 02 1d 05 3a 0d  |stW%).........:.|
00004460  02 1e 1c dd 20 f2 6f 70  65 6e 5f 77 69 6e 64 6f  |.... .open_windo|
00004470  77 28 77 68 61 6e 64 6c  65 25 29 0d 02 1f 15 62  |w(whandle%)....b|
00004480  6c 6f 63 6b 25 21 30 3d  77 68 61 6e 64 6c 65 25  |lock%!0=whandle%|
00004490  0d 02 20 24 c8 99 20 22  57 69 6d 70 5f 47 65 74  |.. $.. "Wimp_Get|
000044a0  57 69 6e 64 6f 77 53 74  61 74 65 22 2c 2c 62 6c  |WindowState",,bl|
000044b0  6f 63 6b 25 0d 02 21 10  62 6c 6f 63 6b 25 21 32  |ock%..!.block%!2|
000044c0  38 3d 2d 31 0d 02 22 20  c8 99 20 22 57 69 6d 70  |8=-1.." .. "Wimp|
000044d0  5f 4f 70 65 6e 57 69 6e  64 6f 77 22 2c 2c 62 6c  |_OpenWindow",,bl|
000044e0  6f 63 6b 25 0d 02 23 05  e1 0d 02 24 05 3a 0d 02  |ock%..#....$.:..|
000044f0  25 22 dd 20 f2 73 65 74  5f 68 65 69 67 68 74 28  |%". .set_height(|
00004500  68 61 6e 64 6c 65 25 2c  68 65 69 67 68 74 25 29  |handle%,height%)|
00004510  0d 02 26 34 21 62 6c 6f  63 6b 25 3d 68 61 6e 64  |..&4!block%=hand|
00004520  6c 65 25 3a c8 99 20 22  57 69 6d 70 5f 47 65 74  |le%:.. "Wimp_Get|
00004530  57 69 6e 64 6f 77 53 74  61 74 65 22 2c 2c 62 6c  |WindowState",,bl|
00004540  6f 63 6b 25 0d 02 27 1e  62 6c 6f 63 6b 25 21 31  |ock%..'.block%!1|
00004550  36 3d 62 6c 6f 63 6b 25  21 38 2b 68 65 69 67 68  |6=block%!8+heigh|
00004560  74 25 0d 02 28 20 c8 99  20 22 57 69 6d 70 5f 4f  |t%..( .. "Wimp_O|
00004570  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
00004580  6b 25 0d 02 29 05 e1 0d  02 2a 05 3a 0d 02 2b 19  |k%..)....*.:..+.|
00004590  dd 20 f2 70 65 72 66 6f  72 6d 5f 63 6c 6f 73 65  |. .perform_close|
000045a0  28 77 69 25 29 0d 02 2c  0c c8 8e 20 77 69 25 20  |(wi%)..,... wi% |
000045b0  ca 0d 02 2d 26 20 20 c9  20 6d 61 69 6e 57 25 3a  |...-&  . mainW%:|
000045c0  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 6b 65  |.close_window(ke|
000045d0  79 70 61 64 57 25 29 0d  02 2e 1b 20 20 c9 20 6d  |ypadW%)....  . m|
000045e0  61 74 63 68 57 25 3a 6d  61 74 63 68 69 6e 67 25  |atchW%:matching%|
000045f0  3d a3 0d 02 2f 1a 20 20  c9 20 63 61 6c 63 57 25  |=.../.  . calcW%|
00004600  3a 63 61 6c 63 6c 69 6e  6b 25 3d 30 0d 02 30 0e  |:calclink%=0..0.|
00004610  20 20 c9 20 6b 65 79 57  25 3a 0d 02 31 1a 20 20  |  . keyW%:..1.  |
00004620  64 65 73 69 67 6e 25 3d  a3 3a 6e 65 77 74 72 65  |design%=.:newtre|
00004630  65 25 3d a3 0d 02 32 1d  20 20 21 62 6c 6f 63 6b  |e%=...2.  !block|
00004640  25 3d 30 3a 62 6c 6f 63  6b 25 21 34 3d 2d 37 30  |%=0:block%!4=-70|
00004650  30 0d 02 33 1e 20 20 62  6c 6f 63 6b 25 21 38 3d  |0..3.  block%!8=|
00004660  35 30 36 3a 62 6c 6f 63  6b 25 21 31 32 3d 30 0d  |506:block%!12=0.|
00004670  02 34 26 20 20 c8 99 20  22 57 69 6d 70 5f 53 65  |.4&  .. "Wimp_Se|
00004680  74 45 78 74 65 6e 74 22  2c 6b 65 79 57 25 2c 62  |tExtent",keyW%,b|
00004690  6c 6f 63 6b 25 0d 02 35  13 20 20 21 62 6c 6f 63  |lock%..5.  !bloc|
000046a0  6b 25 3d 6b 65 79 57 25  0d 02 36 10 20 20 c9 20  |k%=keyW%..6.  . |
000046b0  6d 65 72 67 65 57 25 3a  0d 02 37 6c 20 20 e7 20  |mergeW%:..7l  . |
000046c0  6d 65 72 67 65 77 69 74  68 24 3c 3e 22 22 20 8c  |mergewith$<>"" .|
000046d0  20 c8 99 20 22 49 6d 70  75 6c 73 65 5f 53 65 6e  | .. "Impulse_Sen|
000046e0  64 4d 65 73 73 61 67 65  22 2c 26 32 30 30 2c 22  |dMessage",&200,"|
000046f0  3a 22 2b 6d 65 72 67 65  77 69 74 68 24 2b 22 2e  |:"+mergewith$+".|
00004700  22 2b 64 6f 63 75 6d 65  6e 74 24 2b 22 20 45 64  |"+document$+" Ed|
00004710  69 74 20 4f 6e 22 2c 2c  2c 2c 2d 31 2c 6d 79 74  |it On",,,,-1,myt|
00004720  61 73 6b 25 0d 02 38 10  20 20 6d 65 72 67 69 6e  |ask%..8.  mergin|
00004730  67 25 3d a3 0d 02 39 05  cb 0d 02 3a 16 f2 63 6c  |g%=...9....:..cl|
00004740  6f 73 65 5f 77 69 6e 64  6f 77 28 77 69 25 29 0d  |ose_window(wi%).|
00004750  02 3b 05 e1 0d 02 3c 05  3a 0d 02 3d 13 dd 20 f2  |.;....<.:..=.. .|
00004760  68 69 64 65 5f 77 69 6e  64 6f 77 73 0d 02 3e 1a  |hide_windows..>.|
00004770  f2 70 65 72 66 6f 72 6d  5f 63 6c 6f 73 65 28 6d  |.perform_close(m|
00004780  61 69 6e 57 25 29 0d 02  3f 1c f2 70 65 72 66 6f  |ainW%)..?..perfo|
00004790  72 6d 5f 63 6c 6f 73 65  28 6b 65 79 70 61 64 57  |rm_close(keypadW|
000047a0  25 29 0d 02 40 1d f2 70  65 72 66 6f 72 6d 5f 63  |%)..@..perform_c|
000047b0  6c 6f 73 65 28 64 61 74  61 64 69 63 57 25 29 0d  |lose(datadicW%).|
000047c0  02 41 1a f2 70 65 72 66  6f 72 6d 5f 63 6c 6f 73  |.A..perform_clos|
000047d0  65 28 6c 69 73 74 57 25  29 0d 02 42 1b f2 70 65  |e(listW%)..B..pe|
000047e0  72 66 6f 72 6d 5f 63 6c  6f 73 65 28 6d 61 74 63  |rform_close(matc|
000047f0  68 57 25 29 0d 02 43 1c  f2 70 65 72 66 6f 72 6d  |hW%)..C..perform|
00004800  5f 63 6c 6f 73 65 28 72  65 6c 61 74 65 57 25 29  |_close(relateW%)|
00004810  0d 02 44 19 f2 70 65 72  66 6f 72 6d 5f 63 6c 6f  |..D..perform_clo|
00004820  73 65 28 6b 65 79 57 25  29 0d 02 45 1c f2 70 65  |se(keyW%)..E..pe|
00004830  72 66 6f 72 6d 5f 63 6c  6f 73 65 28 72 65 66 6f  |rform_close(refo|
00004840  72 6d 57 25 29 0d 02 46  1a f2 70 65 72 66 6f 72  |rmW%)..F..perfor|
00004850  6d 5f 63 6c 6f 73 65 28  63 61 6c 63 57 25 29 0d  |m_close(calcW%).|
00004860  02 47 1b f2 70 65 72 66  6f 72 6d 5f 63 6c 6f 73  |.G..perform_clos|
00004870  65 28 6d 65 72 67 65 57  25 29 0d 02 48 19 f2 70  |e(mergeW%)..H..p|
00004880  65 72 66 6f 72 6d 5f 63  6c 6f 73 65 28 63 73 76  |erform_close(csv|
00004890  57 25 29 0d 02 49 05 e1  0d 02 4a 05 3a 0d 02 4b  |W%)..I....J.:..K|
000048a0  1d dd 20 f2 63 6c 6f 73  65 5f 77 69 6e 64 6f 77  |.. .close_window|
000048b0  28 77 68 61 6e 64 6c 65  25 29 0d 02 4c 14 21 62  |(whandle%)..L.!b|
000048c0  6c 6f 63 6b 25 3d 77 68  61 6e 64 6c 65 25 0d 02  |lock%=whandle%..|
000048d0  4d 21 c8 99 20 22 57 69  6d 70 5f 43 6c 6f 73 65  |M!.. "Wimp_Close|
000048e0  57 69 6e 64 6f 77 22 2c  2c 62 6c 6f 63 6b 25 0d  |Window",,block%.|
000048f0  02 4e 05 e1 0d 02 4f 05  3a 0d 02 50 16 dd 20 f2  |.N....O.:..P.. .|
00004900  72 65 64 72 61 77 28 68  61 6e 64 6c 65 25 29 0d  |redraw(handle%).|
00004910  02 51 08 ea 20 4c 25 0d  02 52 11 4c 25 3d a9 28  |.Q.. L%..R.L%=.(|
00004920  6d 61 72 67 69 6e 24 29  0d 02 53 13 21 62 6c 6f  |margin$)..S.!blo|
00004930  63 6b 25 3d 68 61 6e 64  6c 65 25 0d 02 54 2a c8  |ck%=handle%..T*.|
00004940  99 20 22 57 69 6d 70 5f  52 65 64 72 61 77 57 69  |. "Wimp_RedrawWi|
00004950  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 20 b8 20  |ndow",,block% . |
00004960  6d 6f 72 65 25 0d 02 55  1f f2 67 65 74 5f 6f 72  |more%..U..get_or|
00004970  69 67 69 6e 28 62 6c 6f  63 6b 25 2c 78 30 25 2c  |igin(block%,x0%,|
00004980  79 30 25 29 0d 02 56 0c  c8 95 20 6d 6f 72 65 25  |y0%)..V... more%|
00004990  0d 02 57 14 20 20 f2 64  72 61 77 28 78 30 25 2c  |..W.  .draw(x0%,|
000049a0  79 30 25 29 0d 02 58 42  20 20 e7 20 68 61 6e 64  |y0%)..XB  . hand|
000049b0  6c 65 25 3c 3e 64 61 74  61 64 69 63 57 25 20 8c  |le%<>datadicW% .|
000049c0  20 c8 99 20 22 49 6e 74  65 72 66 61 63 65 5f 52  | .. "Interface_R|
000049d0  65 6e 64 65 72 33 64 57  69 6e 64 6f 77 22 2c 2c  |ender3dWindow",,|
000049e0  62 6c 6f 63 6b 25 0d 02  59 2c 20 20 c8 99 20 22  |block%..Y,  .. "|
000049f0  57 69 6d 70 5f 47 65 74  52 65 63 74 61 6e 67 6c  |Wimp_GetRectangl|
00004a00  65 22 2c 2c 62 6c 6f 63  6b 25 20 b8 20 6d 6f 72  |e",,block% . mor|
00004a10  65 25 0d 02 5a 05 ce 0d  02 5b 05 e1 0d 02 5c 05  |e%..Z....[....\.|
00004a20  3a 0d 02 5d 25 dd 20 f2  67 65 74 5f 6f 72 69 67  |:..]%. .get_orig|
00004a30  69 6e 28 62 6c 6f 63 6b  25 2c f8 20 78 30 25 2c  |in(block%,. x0%,|
00004a40  f8 20 79 30 25 29 0d 02  5e 1a 78 30 25 3d 62 6c  |. y0%)..^.x0%=bl|
00004a50  6f 63 6b 25 21 34 2d 62  6c 6f 63 6b 25 21 32 30  |ock%!4-block%!20|
00004a60  0d 02 5f 1b 79 30 25 3d  62 6c 6f 63 6b 25 21 31  |.._.y0%=block%!1|
00004a70  36 2d 62 6c 6f 63 6b 25  21 32 34 0d 02 60 05 e1  |6-block%!24..`..|
00004a80  0d 02 61 05 3a 0d 02 62  14 dd 20 f2 64 72 61 77  |..a.:..b.. .draw|
00004a90  28 78 30 25 2c 79 30 25  29 0d 02 63 20 ea 20 54  |(x0%,y0%)..c . T|
00004aa0  65 78 74 50 74 72 25 2c  79 31 25 2c 79 32 25 2c  |extPtr%,y1%,y2%,|
00004ab0  49 25 2c 63 68 61 72 73  25 0d 02 64 10 c8 8e 20  |I%,chars%..d... |
00004ac0  68 61 6e 64 6c 65 25 20  ca 0d 02 65 0e 20 20 c9  |handle% ...e.  .|
00004ad0  20 6c 69 73 74 57 25 0d  02 66 1a 20 20 79 31 25  | listW%..f.  y1%|
00004ae0  3d 2d 28 62 6c 6f 63 6b  25 21 34 30 2d 79 30 25  |=-(block%!40-y0%|
00004af0  29 0d 02 67 1a 20 20 79  32 25 3d 2d 28 62 6c 6f  |)..g.  y2%=-(blo|
00004b00  63 6b 25 21 33 32 2d 79  30 25 29 0d 02 68 14 20  |ck%!32-y0%)..h. |
00004b10  20 79 31 25 3d 79 31 25  20 81 20 33 32 2b 31 0d  | y1%=y1% . 32+1.|
00004b20  02 69 14 20 20 79 32 25  3d 79 32 25 20 81 20 33  |.i.  y2%=y2% . 3|
00004b30  32 2b 31 0d 02 6a 2e 20  20 54 65 78 74 50 74 72  |2+1..j.  TextPtr|
00004b40  25 3d 28 21 74 65 78 74  61 6e 63 68 6f 72 25 29  |%=(!textanchor%)|
00004b50  2b 28 79 31 25 2d 31 29  2a 4c 65 6e 4c 69 6e 65  |+(y1%-1)*LenLine|
00004b60  25 0d 02 6b 1f 20 20 e7  20 79 32 25 3e 43 6f 75  |%..k.  . y2%>Cou|
00004b70  6e 74 25 20 8c 20 79 32  25 3d 43 6f 75 6e 74 25  |nt% . y2%=Count%|
00004b80  0d 02 6c 14 20 20 e3 20  49 25 3d 79 31 25 20 b8  |..l.  . I%=y1% .|
00004b90  20 79 32 25 0d 02 6d 16  20 20 20 20 f2 64 72 61  | y2%..m.    .dra|
00004ba0  77 5f 6c 69 6e 65 28 49  25 29 0d 02 6e 1a 20 20  |w_line(I%)..n.  |
00004bb0  20 20 54 65 78 74 50 74  72 25 2b 3d 4c 65 6e 4c  |  TextPtr%+=LenL|
00004bc0  69 6e 65 25 0d 02 6f 0a  20 20 ed 20 49 25 0d 02  |ine%..o.  . I%..|
00004bd0  70 05 cb 0d 02 71 05 e1  0d 02 72 05 3a 0d 02 73  |p....q....r.:..s|
00004be0  17 dd 20 f2 64 72 61 77  5f 6c 69 6e 65 28 4c 69  |.. .draw_line(Li|
00004bf0  6e 65 25 29 0d 02 74 1c  ec 20 78 30 25 2c 79 30  |ne%)..t.. x0%,y0|
00004c00  25 2d 28 4c 69 6e 65 25  2d 31 29 2a 33 32 2d 34  |%-(Line%-1)*32-4|
00004c10  0d 02 75 18 e7 20 54 65  78 74 50 74 72 25 3f 4c  |..u.. TextPtr%?L|
00004c20  25 3d 31 32 20 8c 20 e1  0d 02 76 24 c8 99 20 22  |%=12 . ...v$.. "|
00004c30  4f 53 5f 57 72 69 74 65  4e 22 2c 54 65 78 74 50  |OS_WriteN",TextP|
00004c40  74 72 25 2c 4c 65 6e 4c  69 6e 65 25 0d 02 77 05  |tr%,LenLine%..w.|
00004c50  e1 0d 02 78 05 3a 0d 02  79 4b f4 20 4d 65 6e 75  |...x.:..yK. Menu|
00004c60  20 68 61 6e 64 6c 69 6e  67 20 2d 2d 2d 2d 2d 2d  | handling ------|
00004c70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00004ca0  2d 0d 02 7a 05 3a 0d 02  7b 11 dd 20 f2 6d 61 6b  |-..z.:..{.. .mak|
00004cb0  65 5f 6d 65 6e 75 73 0d  02 7c 08 ea 20 49 25 0d  |e_menus..|.. I%.|
00004cc0  02 7d f1 6d 65 6e 75 25  28 31 30 29 3d a4 63 72  |.}.menu%(10)=.cr|
00004cd0  65 61 74 65 5f 6d 65 6e  75 28 6d 65 6e 75 5f 70  |eate_menu(menu_p|
00004ce0  74 72 25 2c 32 36 30 2c  22 46 69 65 6c 64 2c 49  |tr%,260,"Field,I|
00004cf0  6e 64 65 78 20 66 69 65  6c 64 2e 2e 2e 2c 41 6e  |ndex field...,An|
00004d00  61 6c 79 73 65 20 6d 6f  6e 74 68 73 2c 47 6c 6f  |alyse months,Glo|
00004d10  62 61 6c 20 63 68 61 6e  67 65 73 3e 22 2b c3 28  |bal changes>"+.(|
00004d20  63 68 61 6e 67 65 57 25  29 2b 22 2c 4c 69 6e 6b  |changeW%)+",Link|
00004d30  20 74 6f 20 74 61 62 6c  65 2e 2e 2e 2c 43 6f 6d  | to table...,Com|
00004d40  62 69 6e 65 20 66 69 65  6c 64 73 3e 22 2b c3 28  |bine fields>"+.(|
00004d50  63 61 6c 63 57 25 29 2b  22 2c 53 74 61 72 74 20  |calcW%)+",Start |
00004d60  65 64 69 74 69 6e 67 2c  43 6c 65 61 72 20 63 6f  |editing,Clear co|
00004d70  6e 74 65 6e 74 73 2c 57  61 72 6e 20 6f 66 20 64  |ntents,Warn of d|
00004d80  65 6c 65 74 65 2c 53 61  76 65 20 63 6f 6e 74 65  |elete,Save conte|
00004d90  6e 74 73 3e 22 2b c3 28  73 61 76 65 57 25 29 2b  |nts>"+.(saveW%)+|
00004da0  22 2c 55 6e 64 6f 20 63  68 61 6e 67 65 73 22 29  |",Undo changes")|
00004db0  0d 02 7e 4f 6d 65 6e 69  63 25 3d 6d 65 6e 75 25  |..~Omenic%=menu%|
00004dc0  28 31 30 29 2b 32 38 2b  28 31 2a 32 34 29 3a 41  |(10)+28+(1*24):A|
00004dd0  6e 61 6c 79 73 65 46 75  6e 63 25 3d 6d 65 6e 69  |nalyseFunc%=meni|
00004de0  63 25 21 31 32 3a 6d 65  6e 69 63 25 21 31 36 3d  |c%!12:menic%!16=|
00004df0  2d 31 3a 6d 65 6e 69 63  25 21 32 30 3d 31 34 0d  |-1:menic%!20=14.|
00004e00  02 7f 4c 6d 65 6e 69 63  25 3d 6d 65 6e 75 25 28  |..Lmenic%=menu%(|
00004e10  31 30 29 2b 32 38 2b 28  34 2a 32 34 29 3a 43 61  |10)+28+(4*24):Ca|
00004e20  6c 63 46 75 6e 63 25 3d  6d 65 6e 69 63 25 21 31  |lcFunc%=menic%!1|
00004e30  32 3a 6d 65 6e 69 63 25  21 31 36 3d 2d 31 3a 6d  |2:menic%!16=-1:m|
00004e40  65 6e 69 63 25 21 32 30  3d 31 34 0d 02 80 3f 6d  |enic%!20=14...?m|
00004e50  65 6e 75 25 28 31 33 29  3d a4 63 72 65 61 74 65  |enu%(13)=.create|
00004e60  5f 6d 65 6e 75 28 6d 65  6e 75 5f 70 74 72 25 2c  |_menu(menu_ptr%,|
00004e70  31 32 30 2c 22 49 6e 74  65 72 76 61 6c 3a 2c 22  |120,"Interval:,"|
00004e80  2b c4 31 33 2c 22 30 22  29 29 0d 02 81 17 6d 65  |+.13,"0"))....me|
00004e90  6e 69 63 25 3d 6d 65 6e  75 25 28 31 33 29 2b 32  |nic%=menu%(13)+2|
00004ea0  38 0d 02 82 3e 49 6e 74  65 72 76 61 6c 25 3d 6d  |8...>Interval%=m|
00004eb0  65 6e 69 63 25 21 31 32  3a 6d 65 6e 69 63 25 21  |enic%!12:menic%!|
00004ec0  31 36 3d 62 75 66 66 25  3a 24 62 75 66 66 25 3d  |16=buff%:$buff%=|
00004ed0  22 41 30 2d 39 22 3a 62  75 66 66 25 2b 3d 35 0d  |"A0-9":buff%+=5.|
00004ee0  02 83 30 3f 6d 65 6e 69  63 25 3d 3f 6d 65 6e 69  |..0?menic%=?meni|
00004ef0  63 25 20 84 20 28 31 3c  3c 32 29 3a 24 49 6e 74  |c% . (1<<2):$Int|
00004f00  65 72 76 61 6c 25 3d 22  31 30 20 6d 69 6e 22 0d  |erval%="10 min".|
00004f10  02 84 73 6d 65 6e 75 25  28 31 32 29 3d a4 63 72  |..smenu%(12)=.cr|
00004f20  65 61 74 65 5f 6d 65 6e  75 28 6d 65 6e 75 5f 70  |eate_menu(menu_p|
00004f30  74 72 25 2c 31 36 30 2c  22 53 61 76 65 20 69 6e  |tr%,160,"Save in|
00004f40  64 69 63 65 73 2c 41 75  74 6f 6d 61 74 69 63 3e  |dices,Automatic>|
00004f50  22 2b c3 28 6d 65 6e 75  25 28 31 33 29 29 2b 22  |"+.(menu%(13))+"|
00004f60  2c 57 61 72 6e 69 6e 67  3e 22 2b c3 28 6d 65 6e  |,Warning>"+.(men|
00004f70  75 25 28 31 33 29 29 2b  22 2c 4d 61 6e 75 61 6c  |u%(13))+",Manual|
00004f80  22 29 0d 02 85 83 6d 65  6e 75 25 28 32 29 3d a4  |")....menu%(2)=.|
00004f90  63 72 65 61 74 65 5f 6d  65 6e 75 28 6d 65 6e 75  |create_menu(menu|
00004fa0  5f 70 74 72 25 2c 32 36  35 2c 22 56 61 6c 69 64  |_ptr%,265,"Valid|
00004fb0  61 74 69 6f 6e 2c 43 72  65 61 74 65 20 74 61 62  |ation,Create tab|
00004fc0  6c 65 2e 2e 2e 2c 7e 44  69 73 70 6c 61 79 20 74  |le...,~Display t|
00004fd0  61 62 6c 65 2c 53 68 6f  77 20 74 61 62 6c 65 20  |able,Show table |
00004fe0  66 69 6c 65 73 2c 56 61  6c 69 64 61 74 65 20 69  |files,Validate i|
00004ff0  6e 70 75 74 2c 53 68 6f  77 20 72 65 6c 61 74 69  |nput,Show relati|
00005000  6f 6e 73 22 29 0d 02 86  17 f2 74 69 63 6b 28 6d  |ons").....tick(m|
00005010  65 6e 75 25 28 32 29 2c  33 2c b9 29 0d 02 87 18  |enu%(2),3,.)....|
00005020  f2 74 69 63 6b 28 6d 65  6e 75 25 28 31 30 29 2c  |.tick(menu%(10),|
00005030  37 2c b9 29 0d 02 88 9d  6d 65 6e 75 25 28 37 29  |7,.)....menu%(7)|
00005040  3d a4 63 72 65 61 74 65  5f 6d 65 6e 75 28 6d 65  |=.create_menu(me|
00005050  6e 75 5f 70 74 72 25 2c  32 36 30 2c 22 4d 69 73  |nu_ptr%,260,"Mis|
00005060  63 2e 2c 42 61 74 63 68  20 64 65 6c 65 74 65 21  |c.,Batch delete!|
00005070  22 2b c3 28 6d 6f 76 65  57 25 29 2b 22 2c 53 65  |"+.(moveW%)+",Se|
00005080  74 20 70 61 73 73 77 6f  72 64 73 2e 2e 2e 2c 43  |t passwords...,C|
00005090  6f 6c 6f 75 72 73 21 22  2b c3 28 63 6f 6c 57 25  |olours!"+.(colW%|
000050a0  29 2b 22 2c 53 61 76 65  20 69 6e 64 69 63 65 73  |)+",Save indices|
000050b0  3e 22 2b c3 28 6d 65 6e  75 25 28 31 32 29 29 2b  |>"+.(menu%(12))+|
000050c0  22 2c 45 64 69 74 20 74  65 6d 70 6c 61 74 65 22  |",Edit template"|
000050d0  29 0d 02 89 4e 6d 65 6e  75 25 28 31 35 29 3d a4  |)...Nmenu%(15)=.|
000050e0  63 72 65 61 74 65 5f 6d  65 6e 75 28 6d 65 6e 75  |create_menu(menu|
000050f0  5f 70 74 72 25 2c 39 30  2c 22 53 65 70 61 72 61  |_ptr%,90,"Separa|
00005100  74 6f 72 2c 43 6f 6d 6d  61 2c 54 41 42 2c 43 52  |tor,Comma,TAB,CR|
00005110  2c 4c 46 2c 22 2b c4 31  33 2c 22 30 22 29 29 0d  |,LF,"+.13,"0")).|
00005120  02 8a 1e 6d 65 6e 69 63  25 3d 6d 65 6e 75 25 28  |...menic%=menu%(|
00005130  31 35 29 2b 32 38 2b 28  34 2a 32 34 29 0d 02 8b  |15)+28+(4*24)...|
00005140  2d 44 65 6c 69 6d 25 3d  6d 65 6e 69 63 25 21 31  |-Delim%=menic%!1|
00005150  32 3a 6d 65 6e 69 63 25  21 31 36 3d 2d 31 3a 6d  |2:menic%!16=-1:m|
00005160  65 6e 69 63 25 21 32 30  3d 33 0d 02 8c 27 3f 6d  |enic%!20=3...'?m|
00005170  65 6e 69 63 25 3d 3f 6d  65 6e 69 63 25 20 84 20  |enic%=?menic% . |
00005180  28 31 3c 3c 32 29 3a 24  44 65 6c 69 6d 25 3d 22  |(1<<2):$Delim%="|
00005190  22 0d 02 8d 5d 6d 65 6e  75 25 28 32 30 29 3d a4  |"...]menu%(20)=.|
000051a0  63 72 65 61 74 65 5f 6d  65 6e 75 28 6d 65 6e 75  |create_menu(menu|
000051b0  5f 70 74 72 25 2c 39 30  2c 22 54 65 72 6d 69 6e  |_ptr%,90,"Termin|
000051c0  61 74 6f 72 2c 43 52 2c  4c 46 2c 4c 46 20 43 52  |ator,CR,LF,LF CR|
000051d0  2c 43 52 20 4c 46 2c 43  52 20 43 52 2c 4c 46 20  |,CR LF,CR CR,LF |
000051e0  4c 46 2c 22 2b c4 31 33  2c 22 30 22 29 29 0d 02  |LF,"+.13,"0"))..|
000051f0  8e 1e 6d 65 6e 69 63 25  3d 6d 65 6e 75 25 28 32  |..menic%=menu%(2|
00005200  30 29 2b 32 38 2b 28 36  2a 32 34 29 0d 02 8f 2e  |0)+28+(6*24)....|
00005210  54 65 72 6d 69 6e 25 3d  6d 65 6e 69 63 25 21 31  |Termin%=menic%!1|
00005220  32 3a 6d 65 6e 69 63 25  21 31 36 3d 2d 31 3a 6d  |2:menic%!16=-1:m|
00005230  65 6e 69 63 25 21 32 30  3d 33 0d 02 90 28 3f 6d  |enic%!20=3...(?m|
00005240  65 6e 69 63 25 3d 3f 6d  65 6e 69 63 25 20 84 20  |enic%=?menic% . |
00005250  28 31 3c 3c 32 29 3a 24  54 65 72 6d 69 6e 25 3d  |(1<<2):$Termin%=|
00005260  22 22 0d 02 91 c6 73 74  72 69 6e 67 24 3d 22 50  |""....string$="P|
00005270  72 69 6e 74 2c 4d 61 74  63 68 2c 53 68 6f 77 20  |rint,Match,Show |
00005280  72 65 73 6f 75 72 63 65  73 2c 53 68 6f 77 20 6a  |resources,Show j|
00005290  6f 62 73 20 64 6f 6e 65  2c 4f 70 74 69 6f 6e 73  |obs done,Options|
000052a0  2e 2e 2e 2c 53 61 76 65  20 6f 70 74 69 6f 6e 73  |...,Save options|
000052b0  21 22 2b c3 28 73 61 76  65 57 25 29 2b 22 2c 53  |!"+.(saveW%)+",S|
000052c0  61 76 65 20 71 75 65 72  79 21 22 2b c3 28 73 61  |ave query!"+.(sa|
000052d0  76 65 57 25 29 2b 22 2c  7e 4e 75 6d 65 72 69 63  |veW%)+",~Numeric|
000052e0  20 66 69 65 6c 64 73 3e  22 2b c3 28 70 73 65 6c  | fields>"+.(psel|
000052f0  65 63 74 57 25 29 2b 22  2c 7e 53 61 76 65 20 73  |ectW%)+",~Save s|
00005300  65 6c 65 63 74 69 6f 6e  21 22 2b c3 28 73 61 76  |election!"+.(sav|
00005310  65 57 25 29 2b 22 2c 7e  43 6c 65 61 72 20 73 65  |eW%)+",~Clear se|
00005320  6c 65 63 74 69 6f 6e 22  0d 02 92 3e 6d 65 6e 75  |lection"...>menu|
00005330  25 28 36 29 3d a4 63 72  65 61 74 65 5f 6d 65 6e  |%(6)=.create_men|
00005340  75 28 6d 65 6e 75 5f 70  74 72 25 2c 32 36 30 2c  |u(menu_ptr%,260,|
00005350  73 74 72 69 6e 67 24 2b  22 2c 53 65 6c 65 63 74  |string$+",Select|
00005360  20 61 6c 6c 22 29 0d 02  93 7a 73 74 72 69 6e 67  | all")...zstring|
00005370  24 3d 22 50 6f 77 65 72  62 61 73 65 2c 49 6e 66  |$="Powerbase,Inf|
00005380  6f 72 6d 61 74 69 6f 6e  21 22 2b c3 28 6d 69 73  |ormation!"+.(mis|
00005390  63 57 25 29 2b 22 2c 46  69 65 6c 64 3a 20 27 27  |cW%)+",Field: ''|
000053a0  3e 22 2b c3 28 6d 65 6e  75 25 28 31 30 29 29 2b  |>"+.(menu%(10))+|
000053b0  22 2c 50 72 69 6e 74 3e  22 2b c3 28 6d 65 6e 75  |",Print>"+.(menu|
000053c0  25 28 36 29 29 2b 22 2c  56 61 6c 69 64 61 74 69  |%(6))+",Validati|
000053d0  6f 6e 3e 22 2b c3 28 6d  65 6e 75 25 28 32 29 29  |on>"+.(menu%(2))|
000053e0  0d 02 94 b1 73 74 72 69  6e 67 32 24 3d 22 2c 43  |....string2$=",C|
000053f0  75 72 72 65 6e 74 20 6b  65 79 2e 2e 2e 2c 4d 69  |urrent key...,Mi|
00005400  73 63 65 6c 6c 61 6e 65  6f 75 73 3e 22 2b c3 28  |scellaneous>"+.(|
00005410  6d 65 6e 75 25 28 37 29  29 2b 22 2c 53 68 6f 77  |menu%(7))+",Show|
00005420  20 6b 65 79 70 61 64 2c  45 78 70 6f 72 74 20 73  | keypad,Export s|
00005430  75 62 73 65 74 21 22 2b  c3 28 73 61 76 65 73 75  |ubset!"+.(savesu|
00005440  62 57 25 29 2b 22 2c 45  78 70 6f 72 74 20 43 53  |bW%)+",Export CS|
00005450  56 21 22 2b c3 28 73 61  76 65 73 75 62 57 25 29  |V!"+.(savesubW%)|
00005460  2b 22 2c 43 53 56 20 6f  70 74 69 6f 6e 73 2e 2e  |+",CSV options..|
00005470  2e 2c 53 61 76 65 20 63  68 6f 69 63 65 73 2c 55  |.,Save choices,U|
00005480  6e 64 6f 20 63 68 61 6e  67 65 73 2c 48 65 6c 70  |ndo changes,Help|
00005490  22 0d 02 95 39 6d 65 6e  75 25 28 31 29 3d a4 63  |"...9menu%(1)=.c|
000054a0  72 65 61 74 65 5f 6d 65  6e 75 28 6d 65 6e 75 5f  |reate_menu(menu_|
000054b0  70 74 72 25 2c 32 33 36  2c 73 74 72 69 6e 67 24  |ptr%,236,string$|
000054c0  2b 73 74 72 69 6e 67 32  24 29 0d 02 96 23 46 69  |+string2$)...#Fi|
000054d0  65 6c 64 70 6f 73 25 3d  6d 65 6e 75 25 28 31 29  |eldpos%=menu%(1)|
000054e0  2b 32 38 2b 28 31 2a 32  34 29 2b 31 32 0d 02 97  |+28+(1*24)+12...|
000054f0  4a 6d 65 6e 75 25 28 34  29 3d a4 63 72 65 61 74  |Jmenu%(4)=.creat|
00005500  65 5f 6d 65 6e 75 28 6d  65 6e 75 5f 70 74 72 25  |e_menu(menu_ptr%|
00005510  2c 32 30 30 2c 22 50 72  69 6e 74 20 74 72 65 65  |,200,"Print tree|
00005520  2c 43 6f 6d 70 6c 65 74  65 2c 54 6f 74 61 6c 73  |,Complete,Totals|
00005530  20 6f 6e 6c 79 22 29 0d  02 98 3c 6d 65 6e 75 25  | only")...<menu%|
00005540  28 32 32 29 3d a4 63 72  65 61 74 65 5f 6d 65 6e  |(22)=.create_men|
00005550  75 28 6d 65 6e 75 5f 70  74 72 25 2c 31 32 30 2c  |u(menu_ptr%,120,|
00005560  22 45 76 65 72 79 3a 2c  22 2b c4 31 33 2c 22 30  |"Every:,"+.13,"0|
00005570  22 29 29 0d 02 99 17 6d  65 6e 69 63 25 3d 6d 65  |"))....menic%=me|
00005580  6e 75 25 28 32 32 29 2b  32 38 0d 02 9a 3b 45 76  |nu%(22)+28...;Ev|
00005590  65 72 79 25 3d 6d 65 6e  69 63 25 21 31 32 3a 6d  |ery%=menic%!12:m|
000055a0  65 6e 69 63 25 21 31 36  3d 62 75 66 66 25 3a 24  |enic%!16=buff%:$|
000055b0  62 75 66 66 25 3d 22 41  30 2d 39 22 3a 62 75 66  |buff%="A0-9":buf|
000055c0  66 25 2b 3d 35 0d 02 9b  2e 3f 6d 65 6e 69 63 25  |f%+=5....?menic%|
000055d0  3d 3f 6d 65 6e 69 63 25  20 84 20 28 31 3c 3c 32  |=?menic% . (1<<2|
000055e0  29 3a 24 45 76 65 72 79  25 3d 22 32 35 20 72 65  |):$Every%="25 re|
000055f0  63 73 22 0d 02 9c 58 6d  65 6e 75 25 28 32 31 29  |cs"...Xmenu%(21)|
00005600  3d a4 63 72 65 61 74 65  5f 6d 65 6e 75 28 6d 65  |=.create_menu(me|
00005610  6e 75 5f 70 74 72 25 2c  31 36 30 2c 22 42 61 6c  |nu_ptr%,160,"Bal|
00005620  61 6e 63 65 2c 41 75 74  6f 6d 61 74 69 63 3e 22  |ance,Automatic>"|
00005630  2b c3 28 6d 65 6e 75 25  28 32 32 29 29 2b 22 2c  |+.(menu%(22))+",|
00005640  52 69 67 68 74 20 6e 6f  77 22 29 0d 02 9d f1 6d  |Right now")....m|
00005650  65 6e 75 25 28 33 29 3d  a4 63 72 65 61 74 65 5f  |enu%(3)=.create_|
00005660  6d 65 6e 75 28 6d 65 6e  75 5f 70 74 72 25 2c 33  |menu(menu_ptr%,3|
00005670  30 30 2c 22 55 74 69 6c  69 74 69 65 73 2c 4e 65  |00,"Utilities,Ne|
00005680  77 20 70 72 69 6d 61 72  79 20 6b 65 79 2e 2e 2e  |w primary key...|
00005690  2c 41 64 6a 75 73 74 20  66 6f 72 6d 61 74 2c 4e  |,Adjust format,N|
000056a0  65 77 20 72 65 63 6f 72  64 20 66 6f 72 6d 61 74  |ew record format|
000056b0  2c 4d 65 72 67 65 20 64  61 74 61 62 61 73 65 2c  |,Merge database,|
000056c0  7e 43 68 61 6e 67 65 20  6c 65 6e 67 74 68 3e 22  |~Change length>"|
000056d0  2b c3 28 73 69 7a 65 57  25 29 2b 22 2c 42 61 6c  |+.(sizeW%)+",Bal|
000056e0  61 6e 63 65 20 69 6e 64  65 78 3e 22 2b c3 28 6d  |ance index>"+.(m|
000056f0  65 6e 75 25 28 32 31 29  29 2b 22 2c 50 72 69 6e  |enu%(21))+",Prin|
00005700  74 20 69 6e 64 65 78 3e  22 2b c3 28 6d 65 6e 75  |t index>"+.(menu|
00005710  25 28 34 29 29 2b 22 2c  46 69 6e 64 20 64 75 70  |%(4))+",Find dup|
00005720  6c 69 63 61 74 65 73 2c  57 61 72 6e 20 6f 66 20  |licates,Warn of |
00005730  64 75 70 6c 69 63 61 74  65 73 22 29 0d 02 9e ce  |duplicates")....|
00005740  6d 65 6e 75 25 28 30 29  3d a4 63 72 65 61 74 65  |menu%(0)=.create|
00005750  5f 6d 65 6e 75 28 6d 65  6e 75 5f 70 74 72 25 2c  |_menu(menu_ptr%,|
00005760  32 36 36 2c 22 5c 50 6f  77 65 72 62 61 73 65 2c  |266,"\Powerbase,|
00005770  49 6e 66 6f 72 6d 61 74  69 6f 6e 3e 22 2b c3 28  |Information>"+.(|
00005780  69 6e 66 6f 57 25 29 2b  22 2c 4e 65 77 20 64 61  |infoW%)+",New da|
00005790  74 61 62 61 73 65 21 22  2b c3 28 73 61 76 65 57  |tabase!"+.(saveW|
000057a0  25 29 2b 22 2c 7e 55 74  69 6c 69 74 69 65 73 3e  |%)+",~Utilities>|
000057b0  22 2b c3 28 6d 65 6e 75  25 28 33 29 29 2b 22 2c  |"+.(menu%(3))+",|
000057c0  7e 43 6c 6f 73 65 20 64  61 74 61 62 61 73 65 2c  |~Close database,|
000057d0  7e 41 62 61 6e 64 6f 6e  20 64 61 74 61 62 61 73  |~Abandon databas|
000057e0  65 2c 53 61 76 65 20 63  68 6f 69 63 65 73 2c 44  |e,Save choices,D|
000057f0  65 66 61 75 6c 74 20 63  68 6f 69 63 65 73 2c 48  |efault choices,H|
00005800  65 6c 70 2c 51 75 69 74  22 29 0d 02 9f b2 6d 65  |elp,Quit")....me|
00005810  6e 75 25 28 39 29 3d a4  63 72 65 61 74 65 5f 6d  |nu%(9)=.create_m|
00005820  65 6e 75 28 6d 65 6e 75  5f 70 74 72 25 2c 32 37  |enu(menu_ptr%,27|
00005830  30 2c 22 4e 65 77 20 64  61 74 61 62 61 73 65 2c  |0,"New database,|
00005840  44 65 73 69 67 6e 20 66  69 65 6c 64 2e 2e 2e 2c  |Design field...,|
00005850  7e 5f 44 65 66 61 75 6c  74 20 64 61 74 61 62 61  |~_Default databa|
00005860  73 65 2c 7e 53 61 76 65  20 66 6f 72 6d 20 66 69  |se,~Save form fi|
00005870  6c 65 21 22 2b c3 28 73  61 76 65 57 25 29 2b 22  |le!"+.(saveW%)+"|
00005880  2c 7e 44 61 74 61 62 61  73 65 20 73 69 7a 65 3e  |,~Database size>|
00005890  22 2b c3 28 73 69 7a 65  57 25 29 2b 22 2c 7e 50  |"+.(sizeW%)+",~P|
000058a0  72 69 6d 61 72 79 20 6b  65 79 2e 2e 2e 2c 7e 51  |rimary key...,~Q|
000058b0  75 69 74 20 64 65 73 69  67 6e 22 29 0d 02 a0 6a  |uit design")...j|
000058c0  6d 65 6e 75 25 28 31 37  29 3d a4 63 72 65 61 74  |menu%(17)=.creat|
000058d0  65 5f 6d 65 6e 75 28 6d  65 6e 75 5f 70 74 72 25  |e_menu(menu_ptr%|
000058e0  2c 32 30 30 2c 22 54 61  62 6c 65 2c 43 6c 65 61  |,200,"Table,Clea|
000058f0  72 2c 53 61 76 65 21 22  2b c3 28 73 61 76 65 57  |r,Save!"+.(saveW|
00005900  25 29 2b 22 2c 50 72 69  6e 74 2c 53 6f 72 74 2c  |%)+",Print,Sort,|
00005910  55 6e 64 6f 20 63 68 61  6e 67 65 2c 55 6e 64 6f  |Undo change,Undo|
00005920  20 61 6c 6c 22 29 0d 02  a1 56 6d 65 6e 75 25 28  | all")...Vmenu%(|
00005930  31 38 29 3d a4 63 72 65  61 74 65 5f 6d 65 6e 75  |18)=.create_menu|
00005940  28 6d 65 6e 75 5f 70 74  72 25 2c 32 35 30 2c 22  |(menu_ptr%,250,"|
00005950  4c 69 73 74 2c 53 61 76  65 20 61 73 20 74 65 78  |List,Save as tex|
00005960  74 21 22 2b c3 28 73 61  76 65 57 25 29 2b 22 2c  |t!"+.(saveW%)+",|
00005970  53 6f 72 74 2c 53 63 72  61 70 22 29 0d 02 a2 10  |Sort,Scrap")....|
00005980  6d 65 6e 75 24 3d 22 44  61 74 61 22 0d 02 a3 0e  |menu$="Data"....|
00005990  e3 20 49 25 3d 30 20 b8  20 38 0d 02 a4 1b 20 20  |. I%=0 . 8....  |
000059a0  6d 65 6e 75 24 2b 3d 22  2c 22 2b 76 6e 61 6d 65  |menu$+=","+vname|
000059b0  24 28 49 25 29 0d 02 a5  08 ed 20 49 25 0d 02 a6  |$(I%)..... I%...|
000059c0  42 6d 65 6e 75 25 28 38  29 3d a4 63 72 65 61 74  |Bmenu%(8)=.creat|
000059d0  65 5f 6d 65 6e 75 28 6d  65 6e 75 5f 70 74 72 25  |e_menu(menu_ptr%|
000059e0  2c 32 30 30 2c 6d 65 6e  75 24 29 3a f2 74 69 63  |,200,menu$):.tic|
000059f0  6b 28 6d 65 6e 75 25 28  38 29 2c 31 2c b9 29 0d  |k(menu%(8),1,.).|
00005a00  02 a7 14 6d 65 6e 75 24  3d 22 45 78 74 65 72 6e  |...menu$="Extern|
00005a10  61 6c 22 0d 02 a8 10 e3  20 49 25 3d 33 36 20 b8  |al"..... I%=36 .|
00005a20  20 34 30 0d 02 a9 1b 20  20 6d 65 6e 75 24 2b 3d  | 40....  menu$+=|
00005a30  22 2c 22 2b 76 6e 61 6d  65 24 28 49 25 29 0d 02  |","+vname$(I%)..|
00005a40  aa 08 ed 20 49 25 0d 02  ab 44 6d 65 6e 75 25 28  |... I%...Dmenu%(|
00005a50  31 31 29 3d a4 63 72 65  61 74 65 5f 6d 65 6e 75  |11)=.create_menu|
00005a60  28 6d 65 6e 75 5f 70 74  72 25 2c 31 38 30 2c 6d  |(menu_ptr%,180,m|
00005a70  65 6e 75 24 29 3a f2 74  69 63 6b 28 6d 65 6e 75  |enu$):.tick(menu|
00005a80  25 28 31 31 29 2c 30 2c  b9 29 0d 02 ac 15 6d 65  |%(11),0,.)....me|
00005a90  6e 75 24 3d 22 43 68 65  63 6b 20 62 6f 78 22 0d  |nu$="Check box".|
00005aa0  02 ad 10 e3 20 49 25 3d  34 31 20 b8 20 34 35 0d  |.... I%=41 . 45.|
00005ab0  02 ae 1b 20 20 6d 65 6e  75 24 2b 3d 22 2c 22 2b  |...  menu$+=","+|
00005ac0  76 6e 61 6d 65 24 28 49  25 29 0d 02 af 08 ed 20  |vname$(I%)..... |
00005ad0  49 25 0d 02 b0 44 6d 65  6e 75 25 28 31 34 29 3d  |I%...Dmenu%(14)=|
00005ae0  a4 63 72 65 61 74 65 5f  6d 65 6e 75 28 6d 65 6e  |.create_menu(men|
00005af0  75 5f 70 74 72 25 2c 31  38 30 2c 6d 65 6e 75 24  |u_ptr%,180,menu$|
00005b00  29 3a f2 74 69 63 6b 28  6d 65 6e 75 25 28 31 34  |):.tick(menu%(14|
00005b10  29 2c 30 2c b9 29 0d 02  b1 11 6d 65 6e 75 24 3d  |),0,.)....menu$=|
00005b20  22 53 74 61 6d 70 22 0d  02 b2 10 e3 20 49 25 3d  |"Stamp"..... I%=|
00005b30  34 36 20 b8 20 35 39 0d  02 b3 1b 20 20 6d 65 6e  |46 . 59....  men|
00005b40  75 24 2b 3d 22 2c 22 2b  76 6e 61 6d 65 24 28 49  |u$+=","+vname$(I|
00005b50  25 29 0d 02 b4 08 ed 20  49 25 0d 02 b5 44 6d 65  |%)..... I%...Dme|
00005b60  6e 75 25 28 31 36 29 3d  a4 63 72 65 61 74 65 5f  |nu%(16)=.create_|
00005b70  6d 65 6e 75 28 6d 65 6e  75 5f 70 74 72 25 2c 32  |menu(menu_ptr%,2|
00005b80  35 30 2c 6d 65 6e 75 24  29 3a f2 74 69 63 6b 28  |50,menu$):.tick(|
00005b90  6d 65 6e 75 25 28 31 36  29 2c 30 2c b9 29 0d 02  |menu%(16),0,.)..|
00005ba0  b6 12 6d 65 6e 75 24 3d  22 42 75 74 74 6f 6e 22  |..menu$="Button"|
00005bb0  0d 02 b7 0f e3 20 49 25  3d 39 20 b8 20 33 35 0d  |..... I%=9 . 35.|
00005bc0  02 b8 1b 20 20 6d 65 6e  75 24 2b 3d 22 2c 22 2b  |...  menu$+=","+|
00005bd0  76 6e 61 6d 65 24 28 49  25 29 0d 02 b9 08 ed 20  |vname$(I%)..... |
00005be0  49 25 0d 02 ba 44 6d 65  6e 75 25 28 31 39 29 3d  |I%...Dmenu%(19)=|
00005bf0  a4 63 72 65 61 74 65 5f  6d 65 6e 75 28 6d 65 6e  |.create_menu(men|
00005c00  75 5f 70 74 72 25 2c 32  37 30 2c 6d 65 6e 75 24  |u_ptr%,270,menu$|
00005c10  29 3a f2 74 69 63 6b 28  6d 65 6e 75 25 28 31 39  |):.tick(menu%(19|
00005c20  29 2c 30 2c b9 29 0d 02  bb 11 79 62 61 72 25 3d  |),0,.)....ybar%=|
00005c30  39 36 2b 39 2a 34 34 0d  02 bc 05 e1 0d 02 bd 05  |96+9*44.........|
00005c40  3a 0d 02 be 1b dd 20 f2  66 69 65 6c 64 5f 6d 65  |:..... .field_me|
00005c50  6e 75 28 6d 65 6e 75 25  2c 4e 25 29 0d 02 bf 14  |nu(menu%,N%)....|
00005c60  ea 20 46 25 2c 50 25 2c  4c 25 2c 44 24 2c 46 24  |. F%,P%,L%,D$,F$|
00005c70  0d 02 c0 17 24 6d 65 6e  75 25 3d 22 46 69 65 6c  |....$menu%="Fiel|
00005c80  64 20 6c 69 73 74 22 0d  02 c1 53 6d 65 6e 75 25  |d list"...Smenu%|
00005c90  3f 31 32 3d 37 3a 6d 65  6e 75 25 3f 31 33 3d 32  |?12=7:menu%?13=2|
00005ca0  3a 6d 65 6e 75 25 3f 31  34 3d 37 3a 6d 65 6e 75  |:menu%?14=7:menu|
00005cb0  25 3f 31 35 3d 30 3a 6d  65 6e 75 25 21 31 36 3d  |%?15=0:menu%!16=|
00005cc0  32 37 30 3a 6d 65 6e 75  25 21 32 30 3d 34 34 3a  |270:menu%!20=44:|
00005cd0  6d 65 6e 75 25 21 32 34  3d 30 0d 02 c2 0f 50 25  |menu%!24=0....P%|
00005ce0  3d 6d 65 6e 75 25 2b 32  38 0d 02 c3 0f e3 20 46  |=menu%+28..... F|
00005cf0  25 3d 31 20 b8 20 4e 25  0d 02 c4 22 20 20 46 24  |%=1 . N%..."  F$|
00005d00  3d c3 28 46 25 29 3a 46  24 3d c4 33 2d a9 28 46  |=.(F%):F$=.3-.(F|
00005d10  24 29 2c 22 20 22 29 2b  46 24 0d 02 c5 37 20 20  |$)," ")+F$...7  |
00005d20  44 24 3d c0 24 a4 74 65  78 74 28 6d 61 69 6e 57  |D$=.$.text(mainW|
00005d30  25 2c 64 65 73 63 25 28  46 25 29 29 2c 37 29 3a  |%,desc%(F%)),7):|
00005d40  44 24 2b 3d c4 37 2d a9  28 44 24 29 2c 22 20 22  |D$+=.7-.(D$)," "|
00005d50  29 0d 02 c6 26 20 20 46  24 2b 3d 22 20 22 2b 44  |)...&  F$+=" "+D|
00005d60  24 2b 22 20 22 2b 54 61  67 24 28 46 25 29 3a 4c  |$+" "+Tag$(F%):L|
00005d70  25 3d a9 28 46 24 29 0d  02 c7 41 20 20 21 50 25  |%=.(F$)...A  !P%|
00005d80  3d 30 3a 50 25 21 34 3d  2d 31 3a 50 25 21 38 3d  |=0:P%!4=-1:P%!8=|
00005d90  26 37 30 30 30 31 32 31  3a 50 25 21 31 32 3d 62  |&7000121:P%!12=b|
00005da0  75 66 66 25 3a 50 25 21  31 36 3d 2d 31 3a 50 25  |uff%:P%!16=-1:P%|
00005db0  21 32 30 3d 4c 25 2b 31  0d 02 c8 1b 20 20 24 62  |!20=L%+1....  $b|
00005dc0  75 66 66 25 3d 46 24 3a  62 75 66 66 25 2b 3d 4c  |uff%=F$:buff%+=L|
00005dd0  25 2b 31 0d 02 c9 0c 20  20 50 25 2b 3d 32 34 0d  |%+1....  P%+=24.|
00005de0  02 ca 08 ed 20 46 25 0d  02 cb 17 50 25 21 2d 32  |.... F%....P%!-2|
00005df0  34 3d 50 25 21 2d 32 34  20 84 20 26 38 30 0d 02  |4=P%!-24 . &80..|
00005e00  cc 05 e1 0d 02 cd 05 3a  0d 02 ce 28 dd 20 a4 63  |.......:...(. .c|
00005e10  72 65 61 74 65 5f 6d 65  6e 75 28 f8 20 6d 65 6e  |reate_menu(. men|
00005e20  75 25 2c 77 69 64 74 68  25 2c 6c 69 73 74 24 29  |u%,width%,list$)|
00005e30  0d 02 cf 34 ea 20 73 74  61 72 74 25 2c 63 68 6f  |...4. start%,cho|
00005e40  69 63 65 24 2c 65 6e 74  72 69 65 73 25 2c 69 74  |ice$,entries%,it|
00005e50  65 6d 25 2c 50 25 2c 51  25 2c 53 25 2c 73 68 61  |em%,P%,Q%,S%,sha|
00005e60  64 65 64 25 0d 02 d0 10  73 74 61 72 74 25 3d 6d  |ded%....start%=m|
00005e70  65 6e 75 25 0d 02 d1 41  e7 20 c0 6c 69 73 74 24  |enu%...A. .list$|
00005e80  2c 31 29 3d 22 5c 22 20  80 20 28 52 49 53 43 4f  |,1)="\" . (RISCO|
00005e90  53 33 3d a3 20 84 20 6c  65 66 74 6d 65 6e 75 25  |S3=. . leftmenu%|
00005ea0  3d a3 29 20 8c 20 6c 69  73 74 24 3d c1 6c 69 73  |=.) . list$=.lis|
00005eb0  74 24 2c 32 29 0d 02 d2  12 50 25 3d a7 6c 69 73  |t$,2)....P%=.lis|
00005ec0  74 24 2c 22 2c 22 29 0d  02 d3 17 24 6d 65 6e 75  |t$,",")....$menu|
00005ed0  25 3d c0 6c 69 73 74 24  2c 50 25 2d 31 29 0d 02  |%=.list$,P%-1)..|
00005ee0  d4 19 6d 65 6e 75 25 3f  31 32 3d 37 3a 6d 65 6e  |..menu%?12=7:men|
00005ef0  75 25 3f 31 33 3d 32 0d  02 d5 19 6d 65 6e 75 25  |u%?13=2....menu%|
00005f00  3f 31 34 3d 37 3a 6d 65  6e 75 25 3f 31 35 3d 30  |?14=7:menu%?15=0|
00005f10  0d 02 d6 2a 6d 65 6e 75  25 21 31 36 3d 77 69 64  |...*menu%!16=wid|
00005f20  74 68 25 3a 6d 65 6e 75  25 21 32 30 3d 34 34 3a  |th%:menu%!20=44:|
00005f30  6d 65 6e 75 25 21 32 34  3d 30 0d 02 d7 12 69 74  |menu%!24=0....it|
00005f40  65 6d 25 3d 6d 65 6e 75  25 2b 32 38 0d 02 d8 0e  |em%=menu%+28....|
00005f50  6c 69 73 74 24 2b 3d 22  2c 22 0d 02 d9 0e 65 6e  |list$+=","....en|
00005f60  74 72 69 65 73 25 3d 30  0d 02 da 05 f5 0d 02 db  |tries%=0........|
00005f70  0d 20 20 51 25 3d 50 25  2b 31 0d 02 dc 17 20 20  |.  Q%=P%+1....  |
00005f80  50 25 3d a7 6c 69 73 74  24 2c 22 2c 22 2c 51 25  |P%=.list$,",",Q%|
00005f90  29 0d 02 dd 0e 20 20 e7  20 50 25 3e 30 20 8c 0d  |)....  . P%>0 ..|
00005fa0  02 de 1a 20 20 20 20 21  69 74 65 6d 25 3d 30 3a  |...    !item%=0:|
00005fb0  73 68 61 64 65 64 25 3d  30 0d 02 df 20 20 20 20  |shaded%=0...    |
00005fc0  20 63 68 6f 69 63 65 24  3d c1 6c 69 73 74 24 2c  | choice$=.list$,|
00005fd0  51 25 2c 50 25 2d 51 25  29 0d 02 e0 3f 20 20 20  |Q%,P%-Q%)...?   |
00005fe0  20 e7 20 c0 63 68 6f 69  63 65 24 2c 31 29 3d 22  | . .choice$,1)="|
00005ff0  7e 22 20 8c 20 63 68 6f  69 63 65 24 3d c1 63 68  |~" . choice$=.ch|
00006000  6f 69 63 65 24 2c 32 29  3a 73 68 61 64 65 64 25  |oice$,2):shaded%|
00006010  3d 28 31 3c 3c 32 32 29  0d 02 e1 41 20 20 20 20  |=(1<<22)...A    |
00006020  e7 20 c0 63 68 6f 69 63  65 24 2c 31 29 3d 22 5f  |. .choice$,1)="_|
00006030  22 20 8c 20 63 68 6f 69  63 65 24 3d c1 63 68 6f  |" . choice$=.cho|
00006040  69 63 65 24 2c 32 29 3a  3f 69 74 65 6d 25 3d 3f  |ice$,2):?item%=?|
00006050  69 74 65 6d 25 20 84 20  32 0d 02 e2 18 20 20 20  |item% . 2....   |
00006060  20 53 25 3d a7 63 68 6f  69 63 65 24 2c 22 21 22  | S%=.choice$,"!"|
00006070  29 0d 02 e3 35 20 20 20  20 e7 20 53 25 3e 30 20  |)...5    . S%>0 |
00006080  8c 20 3f 69 74 65 6d 25  3d 3f 69 74 65 6d 25 20  |. ?item%=?item% |
00006090  84 20 38 3a c1 63 68 6f  69 63 65 24 2c 53 25 2c  |. 8:.choice$,S%,|
000060a0  31 29 3d 22 3e 22 0d 02  e4 18 20 20 20 20 53 25  |1)=">"....    S%|
000060b0  3d a7 63 68 6f 69 63 65  24 2c 22 3e 22 29 0d 02  |=.choice$,">")..|
000060c0  e5 10 20 20 20 20 e7 20  53 25 3d 30 20 8c 0d 02  |..    . S%=0 ...|
000060d0  e6 14 20 20 20 20 20 20  69 74 65 6d 25 21 34 3d  |..      item%!4=|
000060e0  2d 31 0d 02 e7 0b 20 20  20 20 20 20 cc 0d 02 e8  |-1....      ....|
000060f0  23 20 20 20 20 20 20 69  74 65 6d 25 21 34 3d bb  |#      item%!4=.|
00006100  28 c1 63 68 6f 69 63 65  24 2c 53 25 2b 31 29 29  |(.choice$,S%+1))|
00006110  0d 02 e9 20 20 20 20 20  20 20 63 68 6f 69 63 65  |...       choice|
00006120  24 3d c0 63 68 6f 69 63  65 24 2c 53 25 2d 31 29  |$=.choice$,S%-1)|
00006130  0d 02 ea 09 20 20 20 20  cd 0d 02 eb 1a 20 20 20  |....    .....   |
00006140  20 e7 20 a9 28 63 68 6f  69 63 65 24 29 3c 3d 31  | . .(choice$)<=1|
00006150  32 20 8c 0d 02 ec 1d 20  20 20 20 20 20 24 28 69  |2 .....      $(i|
00006160  74 65 6d 25 2b 31 32 29  3d 63 68 6f 69 63 65 24  |tem%+12)=choice$|
00006170  0d 02 ed 1a 20 20 20 20  20 20 69 74 65 6d 25 21  |....      item%!|
00006180  38 3d 26 37 30 30 30 30  32 31 0d 02 ee 0b 20 20  |8=&7000021....  |
00006190  20 20 20 20 cc 0d 02 ef  19 20 20 20 20 20 20 4c  |    .....      L|
000061a0  25 3d a9 28 63 68 6f 69  63 65 24 29 2b 31 0d 02  |%=.(choice$)+1..|
000061b0  f0 49 20 20 20 20 20 20  69 74 65 6d 25 21 31 32  |.I      item%!12|
000061c0  3d 62 75 66 66 25 3a 24  62 75 66 66 25 3d 63 68  |=buff%:$buff%=ch|
000061d0  6f 69 63 65 24 3a 62 75  66 66 25 2b 3d 4c 25 3a  |oice$:buff%+=L%:|
000061e0  69 74 65 6d 25 21 31 36  3d 2d 31 3a 69 74 65 6d  |item%!16=-1:item|
000061f0  25 21 32 30 3d 4c 25 0d  02 f1 1a 20 20 20 20 20  |%!20=L%....     |
00006200  20 69 74 65 6d 25 21 38  3d 26 37 30 30 30 31 32  | item%!8=&700012|
00006210  31 0d 02 f2 09 20 20 20  20 cd 0d 02 f3 21 20 20  |1....    ....!  |
00006220  20 20 69 74 65 6d 25 21  38 3d 69 74 65 6d 25 21  |  item%!8=item%!|
00006230  38 20 84 20 73 68 61 64  65 64 25 0d 02 f4 11 20  |8 . shaded%.... |
00006240  20 20 20 69 74 65 6d 25  2b 3d 32 34 0d 02 f5 13  |   item%+=24....|
00006250  20 20 20 20 65 6e 74 72  69 65 73 25 2b 3d 31 0d  |    entries%+=1.|
00006260  02 f6 07 20 20 cd 0d 02  f7 0a fd 20 50 25 3d 30  |...  ...... P%=0|
00006270  0d 02 f8 1d 69 74 65 6d  25 21 2d 32 34 3d 69 74  |....item%!-24=it|
00006280  65 6d 25 21 2d 32 34 20  84 20 26 38 30 0d 02 f9  |em%!-24 . &80...|
00006290  0f 6d 65 6e 75 25 3d 69  74 65 6d 25 0d 02 fa 51  |.menu%=item%...Q|
000062a0  e7 20 6d 65 6e 75 25 3e  6d 65 6e 5f 65 6e 64 25  |. menu%>men_end%|
000062b0  20 8c 20 85 20 a2 20 30  2c 22 4e 6f 74 20 65 6e  | . . . 0,"Not en|
000062c0  6f 75 67 68 20 72 6f 6f  6d 20 66 6f 72 20 6d 65  |ough room for me|
000062d0  6e 75 73 20 28 69 6e 74  65 72 6e 61 6c 20 65 72  |nus (internal er|
000062e0  72 6f 72 20 63 6f 64 65  20 35 30 29 22 0d 02 fb  |ror code 50)"...|
000062f0  0b 3d 73 74 61 72 74 25  0d 02 fc 05 3a 0d 02 fd  |.=start%....:...|
00006300  1c dd 20 f2 74 69 63 6b  28 6d 65 6e 75 25 2c 69  |.. .tick(menu%,i|
00006310  74 65 6d 25 2c 6f 6e 25  29 0d 02 fe 1b 69 74 65  |tem%,on%)....ite|
00006320  6d 25 3d 6d 65 6e 75 25  2b 32 38 2b 69 74 65 6d  |m%=menu%+28+item|
00006330  25 2a 32 34 0d 02 ff 0c  c8 8e 20 6f 6e 25 20 ca  |%*24...... on% .|
00006340  0d 03 00 1b 20 20 c9 20  b9 3a 3f 69 74 65 6d 25  |....  . .:?item%|
00006350  3d 3f 69 74 65 6d 25 20  84 20 31 0d 03 01 1d 20  |=?item% . 1.... |
00006360  20 c9 20 a3 3a 3f 69 74  65 6d 25 3d 3f 69 74 65  | . .:?item%=?ite|
00006370  6d 25 20 80 20 32 35 34  0d 03 02 05 cb 0d 03 03  |m% . 254........|
00006380  05 e1 0d 03 04 05 3a 0d  03 05 29 dd 20 f2 74 69  |......:...). .ti|
00006390  63 6b 5f 6f 6e 65 28 6d  65 6e 75 25 2c 66 69 72  |ck_one(menu%,fir|
000063a0  73 74 25 2c 6c 61 73 74  25 2c 69 74 65 6d 25 29  |st%,last%,item%)|
000063b0  0d 03 06 08 ea 20 49 25  0d 03 07 17 e3 20 49 25  |..... I%..... I%|
000063c0  3d 66 69 72 73 74 25 20  b8 20 6c 61 73 74 25 0d  |=first% . last%.|
000063d0  03 08 20 20 20 f2 74 69  63 6b 28 6d 65 6e 75 25  |..   .tick(menu%|
000063e0  2c 49 25 2c 28 49 25 3d  69 74 65 6d 25 29 29 0d  |,I%,(I%=item%)).|
000063f0  03 09 08 ed 20 49 25 0d  03 0a 05 e1 0d 03 0b 05  |.... I%.........|
00006400  3a 0d 03 0c 1a dd 20 a4  74 69 63 6b 65 64 28 6d  |:..... .ticked(m|
00006410  65 6e 75 25 2c 69 74 65  6d 25 29 0d 03 0d 1b 69  |enu%,item%)....i|
00006420  74 65 6d 25 3d 6d 65 6e  75 25 2b 32 38 2b 69 74  |tem%=menu%+28+it|
00006430  65 6d 25 2a 32 34 0d 03  0e 1a e7 20 28 3f 69 74  |em%*24..... (?it|
00006440  65 6d 25 20 80 20 31 29  20 8c 3d b9 20 8b 3d a3  |em% . 1) .=. .=.|
00006450  0d 03 0f 05 3a 0d 03 10  1b dd 20 f2 6c 69 74 28  |....:..... .lit(|
00006460  6d 65 6e 75 25 2c 69 74  65 6d 25 2c 6f 6e 25 29  |menu%,item%,on%)|
00006470  0d 03 11 1b 69 74 65 6d  25 3d 6d 65 6e 75 25 2b  |....item%=menu%+|
00006480  32 38 2b 69 74 65 6d 25  2a 32 34 0d 03 12 0c c8  |28+item%*24.....|
00006490  8e 20 6f 6e 25 20 ca 0d  03 13 26 20 20 c9 20 b9  |. on% ....&  . .|
000064a0  3a 20 69 74 65 6d 25 21  38 3d 69 74 65 6d 25 21  |: item%!8=item%!|
000064b0  38 20 80 20 ac 20 28 31  3c 3c 32 32 29 0d 03 14  |8 . . (1<<22)...|
000064c0  24 20 20 c9 20 a3 3a 20  69 74 65 6d 25 21 38 3d  |$  . .: item%!8=|
000064d0  69 74 65 6d 25 21 38 20  84 20 28 31 3c 3c 32 32  |item%!8 . (1<<22|
000064e0  29 0d 03 15 05 cb 0d 03  16 05 e1 0d 03 17 05 3a  |)..............:|
000064f0  0d 03 18 1d dd 20 f2 73  68 6f 77 5f 6d 65 6e 75  |..... .show_menu|
00006500  28 6d 65 6e 75 25 2c 78  25 2c 79 25 29 0d 03 19  |(menu%,x%,y%)...|
00006510  29 6d 65 6e 75 68 61 6e  64 6c 65 25 3d 6d 65 6e  |)menuhandle%=men|
00006520  75 25 3a 6d 65 6e 75 78  25 3d 78 25 3a 6d 65 6e  |u%:menux%=x%:men|
00006530  75 79 25 3d 79 25 0d 03  1a 25 c8 99 20 22 57 69  |uy%=y%...%.. "Wi|
00006540  6d 70 5f 43 72 65 61 74  65 4d 65 6e 75 22 2c 2c  |mp_CreateMenu",,|
00006550  6d 65 6e 75 25 2c 78 25  2c 79 25 0d 03 1b 05 e1  |menu%,x%,y%.....|
00006560  0d 03 1c 05 3a 0d 03 1d  4b f4 20 49 63 6f 6e 20  |....:...K. Icon |
00006570  68 61 6e 64 6c 69 6e 67  20 2d 2d 2d 2d 2d 2d 2d  |handling -------|
00006580  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000065b0  0d 03 1e 05 3a 0d 03 1f  54 dd 20 a4 63 72 65 61  |....:...T. .crea|
000065c0  74 65 5f 69 63 6f 6e 28  77 68 61 6e 64 6c 65 25  |te_icon(whandle%|
000065d0  2c 78 6d 69 6e 25 2c 79  6d 69 6e 25 2c 77 69 64  |,xmin%,ymin%,wid|
000065e0  74 68 25 2c 68 65 69 67  68 74 25 2c 69 63 6f 6e  |th%,height%,icon|
000065f0  66 6c 61 67 73 25 2c 74  65 78 74 24 2c 64 31 25  |flags%,text$,d1%|
00006600  2c 64 32 25 2c 64 33 25  29 0d 03 20 0d ea 20 68  |,d2%,d3%).. .. h|
00006610  61 6e 64 6c 65 25 0d 03  21 15 62 6c 6f 63 6b 25  |andle%..!.block%|
00006620  21 30 3d 77 68 61 6e 64  6c 65 25 0d 03 22 21 62  |!0=whandle%.."!b|
00006630  6c 6f 63 6b 25 21 34 3d  78 6d 69 6e 25 3a 62 6c  |lock%!4=xmin%:bl|
00006640  6f 63 6b 25 21 38 3d 79  6d 69 6e 25 0d 03 23 32  |ock%!8=ymin%..#2|
00006650  62 6c 6f 63 6b 25 21 31  32 3d 78 6d 69 6e 25 2b  |block%!12=xmin%+|
00006660  77 69 64 74 68 25 3a 62  6c 6f 63 6b 25 21 31 36  |width%:block%!16|
00006670  3d 79 6d 69 6e 25 2b 68  65 69 67 68 74 25 0d 03  |=ymin%+height%..|
00006680  24 18 62 6c 6f 63 6b 25  21 32 30 3d 69 63 6f 6e  |$.block%!20=icon|
00006690  66 6c 61 67 73 25 0d 03  25 0d e7 20 64 31 25 3d  |flags%..%.. d1%=|
000066a0  30 20 8c 0d 03 26 18 20  20 24 28 62 6c 6f 63 6b  |0 ...&.  $(block|
000066b0  25 2b 32 34 29 3d 74 65  78 74 24 0d 03 27 07 20  |%+24)=text$..'. |
000066c0  20 cc 0d 03 28 13 20 20  62 6c 6f 63 6b 25 21 32  | ...(.  block%!2|
000066d0  34 3d 64 31 25 0d 03 29  13 20 20 62 6c 6f 63 6b  |4=d1%..).  block|
000066e0  25 21 32 38 3d 64 32 25  0d 03 2a 13 20 20 62 6c  |%!28=d2%..*.  bl|
000066f0  6f 63 6b 25 21 33 32 3d  64 33 25 0d 03 2b 05 cd  |ock%!32=d3%..+..|
00006700  0d 03 2c 2a c8 99 20 22  57 69 6d 70 5f 43 72 65  |..,*.. "Wimp_Cre|
00006710  61 74 65 49 63 6f 6e 22  2c 2c 62 6c 6f 63 6b 25  |ateIcon",,block%|
00006720  20 b8 20 68 61 6e 64 6c  65 25 0d 03 2d 0c 3d 68  | . handle%..-.=h|
00006730  61 6e 64 6c 65 25 0d 03  2e 05 3a 0d 03 2f 1b dd  |andle%....:../..|
00006740  20 f2 72 65 64 72 61 77  5f 69 63 6f 6e 28 77 69  | .redraw_icon(wi|
00006750  25 2c 69 63 25 29 0d 03  30 1c 21 62 6c 6f 63 6b  |%,ic%)..0.!block|
00006760  25 3d 77 69 25 3a 62 6c  6f 63 6b 25 21 34 3d 69  |%=wi%:block%!4=i|
00006770  63 25 0d 03 31 1a 62 6c  6f 63 6b 25 21 38 3d 30  |c%..1.block%!8=0|
00006780  3a 62 6c 6f 63 6b 25 21  31 32 3d 30 0d 03 32 22  |:block%!12=0..2"|
00006790  c8 99 20 22 57 69 6d 70  5f 53 65 74 49 63 6f 6e  |.. "Wimp_SetIcon|
000067a0  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 03  |State",,block%..|
000067b0  33 2a 62 6c 6f 63 6b 25  21 38 3d 30 3a 62 6c 6f  |3*block%!8=0:blo|
000067c0  63 6b 25 21 31 32 3d 77  69 25 3a 62 6c 6f 63 6b  |ck%!12=wi%:block|
000067d0  25 21 31 36 3d 69 63 25  0d 03 34 05 e1 0d 03 35  |%!16=ic%..4....5|
000067e0  05 3a 0d 03 36 21 dd 20  f2 69 63 6f 6e 5f 62 69  |.:..6!. .icon_bi|
000067f0  74 28 62 69 74 25 2c 77  69 25 2c 69 63 25 2c 6f  |t(bit%,wi%,ic%,o|
00006800  6e 25 29 0d 03 37 0f 21  62 6c 6f 63 6b 25 3d 77  |n%)..7.!block%=w|
00006810  69 25 0d 03 38 10 62 6c  6f 63 6b 25 21 34 3d 69  |i%..8.block%!4=i|
00006820  63 25 0d 03 39 0c c8 8e  20 6f 6e 25 20 ca 0d 03  |c%..9... on% ...|
00006830  3a 26 20 20 c9 20 b9 3a  62 6c 6f 63 6b 25 21 38  |:&  . .:block%!8|
00006840  3d 30 3a 62 6c 6f 63 6b  25 21 31 32 3d 31 3c 3c  |=0:block%!12=1<<|
00006850  62 69 74 25 0d 03 3b 2c  20 20 c9 20 a3 3a 62 6c  |bit%..;,  . .:bl|
00006860  6f 63 6b 25 21 38 3d 31  3c 3c 62 69 74 25 3a 62  |ock%!8=1<<bit%:b|
00006870  6c 6f 63 6b 25 21 31 32  3d 31 3c 3c 62 69 74 25  |lock%!12=1<<bit%|
00006880  0d 03 3c 05 cb 0d 03 3d  22 c8 99 20 22 57 69 6d  |..<....=".. "Wim|
00006890  70 5f 53 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_SetIconState",|
000068a0  2c 62 6c 6f 63 6b 25 0d  03 3e 05 e1 0d 03 3f 05  |,block%..>....?.|
000068b0  3a 0d 03 40 16 dd 20 f2  73 65 6c 65 63 74 28 77  |:..@.. .select(w|
000068c0  69 25 2c 69 63 25 29 0d  03 41 1c 21 62 6c 6f 63  |i%,ic%)..A.!bloc|
000068d0  6b 25 3d 77 69 25 3a 62  6c 6f 63 6b 25 21 34 3d  |k%=wi%:block%!4=|
000068e0  69 63 25 0d 03 42 22 62  6c 6f 63 6b 25 21 38 3d  |ic%..B"block%!8=|
000068f0  31 3c 3c 32 31 3a 62 6c  6f 63 6b 25 21 31 32 3d  |1<<21:block%!12=|
00006900  31 3c 3c 32 31 0d 03 43  22 c8 99 20 22 57 69 6d  |1<<21..C".. "Wim|
00006910  70 5f 53 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_SetIconState",|
00006920  2c 62 6c 6f 63 6b 25 0d  03 44 05 e1 0d 03 45 05  |,block%..D....E.|
00006930  3a 0d 03 46 18 dd 20 f2  64 65 73 65 6c 65 63 74  |:..F.. .deselect|
00006940  28 77 69 25 2c 69 63 25  29 0d 03 47 1c 21 62 6c  |(wi%,ic%)..G.!bl|
00006950  6f 63 6b 25 3d 77 69 25  3a 62 6c 6f 63 6b 25 21  |ock%=wi%:block%!|
00006960  34 3d 69 63 25 0d 03 48  20 62 6c 6f 63 6b 25 21  |4=ic%..H block%!|
00006970  38 3d 30 3a 62 6c 6f 63  6b 25 21 31 32 3d 28 31  |8=0:block%!12=(1|
00006980  3c 3c 32 31 29 0d 03 49  22 c8 99 20 22 57 69 6d  |<<21)..I".. "Wim|
00006990  70 5f 53 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_SetIconState",|
000069a0  2c 62 6c 6f 63 6b 25 0d  03 4a 05 e1 0d 03 4b 05  |,block%..J....K.|
000069b0  3a 0d 03 4c 16 dd 20 f2  69 6e 76 65 72 74 28 77  |:..L.. .invert(w|
000069c0  69 25 2c 69 63 25 29 0d  03 4d 40 e7 20 a4 73 65  |i%,ic%)..M@. .se|
000069d0  6c 65 63 74 65 64 28 77  69 25 2c 69 63 25 29 20  |lected(wi%,ic%) |
000069e0  8c 20 f2 64 65 73 65 6c  65 63 74 28 77 69 25 2c  |. .deselect(wi%,|
000069f0  69 63 25 29 20 8b 20 f2  73 65 6c 65 63 74 28 77  |ic%) . .select(w|
00006a00  69 25 2c 69 63 25 29 0d  03 4e 05 e1 0d 03 4f 05  |i%,ic%)..N....O.|
00006a10  3a 0d 03 50 1c dd 20 f2  73 65 74 5f 69 63 6f 6e  |:..P.. .set_icon|
00006a20  28 77 69 25 2c 69 63 25  2c 6f 6e 25 29 0d 03 51  |(wi%,ic%,on%)..Q|
00006a30  31 e7 20 6f 6e 25 20 8c  20 f2 73 65 6c 65 63 74  |1. on% . .select|
00006a40  28 77 69 25 2c 69 63 25  29 20 8b 20 f2 64 65 73  |(wi%,ic%) . .des|
00006a50  65 6c 65 63 74 28 77 69  25 2c 69 63 25 29 0d 03  |elect(wi%,ic%)..|
00006a60  52 05 e1 0d 03 53 05 3a  0d 03 54 18 dd 20 a4 73  |R....S.:..T.. .s|
00006a70  65 6c 65 63 74 65 64 28  77 69 25 2c 69 63 25 29  |elected(wi%,ic%)|
00006a80  0d 03 55 1c 21 62 6c 6f  63 6b 25 3d 77 69 25 3a  |..U.!block%=wi%:|
00006a90  62 6c 6f 63 6b 25 21 34  3d 69 63 25 0d 03 56 22  |block%!4=ic%..V"|
00006aa0  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
00006ab0  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 03  |State",,block%..|
00006ac0  57 1e 3d 28 28 62 6c 6f  63 6b 25 21 32 34 29 20  |W.=((block%!24) |
00006ad0  80 20 28 31 3c 3c 32 31  29 29 3e 30 0d 03 58 05  |. (1<<21))>0..X.|
00006ae0  3a 0d 03 59 16 dd 20 a4  73 68 61 64 65 64 28 77  |:..Y.. .shaded(w|
00006af0  69 25 2c 69 63 25 29 0d  03 5a 1c 21 62 6c 6f 63  |i%,ic%)..Z.!bloc|
00006b00  6b 25 3d 77 69 25 3a 62  6c 6f 63 6b 25 21 34 3d  |k%=wi%:block%!4=|
00006b10  69 63 25 0d 03 5b 22 c8  99 20 22 57 69 6d 70 5f  |ic%..[".. "Wimp_|
00006b20  47 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 62  |GetIconState",,b|
00006b30  6c 6f 63 6b 25 0d 03 5c  1e 3d 28 28 62 6c 6f 63  |lock%..\.=((bloc|
00006b40  6b 25 21 32 34 29 20 80  20 28 31 3c 3c 32 32 29  |k%!24) . (1<<22)|
00006b50  29 3e 30 0d 03 5d 05 3b  0d 03 5e 1d dd 20 a4 73  |)>0..].;..^.. .s|
00006b60  65 6c 65 63 74 65 64 5f  65 73 67 28 77 69 25 2c  |elected_esg(wi%,|
00006b70  65 73 67 25 29 0d 03 5f  41 c8 99 20 22 57 69 6d  |esg%).._A.. "Wim|
00006b80  70 5f 57 68 69 63 68 49  63 6f 6e 22 2c 77 69 25  |p_WhichIcon",wi%|
00006b90  2c 62 6c 6f 63 6b 25 2c  26 30 30 33 46 30 30 30  |,block%,&003F000|
00006ba0  30 2c 26 30 30 32 30 30  30 30 30 2b 28 65 73 67  |0,&00200000+(esg|
00006bb0  25 3c 3c 31 36 29 0d 03  60 0c 3d 21 62 6c 6f 63  |%<<16)..`.=!bloc|
00006bc0  6b 25 0d 03 61 05 3a 0d  03 62 24 dd 20 a4 6e 65  |k%..a.:..b$. .ne|
00006bd0  78 74 5f 77 72 69 74 65  61 62 6c 65 28 77 69 25  |xt_writeable(wi%|
00006be0  2c 69 63 25 2c 64 25 2c  72 25 29 0d 03 63 11 ea  |,ic%,d%,r%)..c..|
00006bf0  20 50 25 2c 45 25 2c 6e  65 78 74 25 0d 03 64 35  | P%,E%,next%..d5|
00006c00  c8 99 20 22 57 69 6d 70  5f 57 68 69 63 68 49 63  |.. "Wimp_WhichIc|
00006c10  6f 6e 22 2c 77 69 25 2c  62 6c 6f 63 6b 25 2c 26  |on",wi%,block%,&|
00006c20  30 30 43 30 45 30 30 30  2c 28 31 34 3c 3c 31 32  |00C0E000,(14<<12|
00006c30  29 0d 03 65 05 f5 0d 03  66 0b 20 20 45 25 2b 3d  |)..e....f.  E%+=|
00006c40  34 0d 03 67 12 fd 20 62  6c 6f 63 6b 25 21 45 25  |4..g.. block%!E%|
00006c50  3d 2d 31 0d 03 68 1d c8  95 20 62 6c 6f 63 6b 25  |=-1..h... block%|
00006c60  21 50 25 3c 3e 69 63 25  20 80 20 50 25 3c 45 25  |!P%<>ic% . P%<E%|
00006c70  0d 03 69 0b 20 20 50 25  2b 3d 34 0d 03 6a 05 ce  |..i.  P%+=4..j..|
00006c80  0d 03 6b 13 e7 20 50 25  3d 45 25 20 8c 20 50 25  |..k.. P%=E% . P%|
00006c90  2d 3d 34 0d 03 6c 18 e7  20 72 25 3d 31 20 80 20  |-=4..l.. r%=1 . |
00006ca0  50 25 2b 34 3d 45 25 20  8c 3d b9 0d 03 6d 0b c8  |P%+4=E% .=...m..|
00006cb0  8e 20 64 25 20 ca 0d 03  6e 0f 20 20 c9 20 30 3a  |. d% ...n.  . 0:|
00006cc0  50 25 3d 45 25 0d 03 6f  0f 20 20 c9 20 32 3a 50  |P%=E%..o.  . 2:P|
00006cd0  25 3d 2d 34 0d 03 70 10  20 20 7f 3a 50 25 2b 3d  |%=-4..p.  .:P%+=|
00006ce0  34 2a 64 25 0d 03 71 05  cb 0d 03 72 0b c8 8e 20  |4*d%..q....r... |
00006cf0  50 25 20 ca 0d 03 73 18  20 20 c9 20 45 25 3a 6e  |P% ...s.  . E%:n|
00006d00  65 78 74 25 3d 21 62 6c  6f 63 6b 25 0d 03 74 1e  |ext%=!block%..t.|
00006d10  20 20 c9 20 2d 34 3a 6e  65 78 74 25 3d 62 6c 6f  |  . -4:next%=blo|
00006d20  63 6b 25 21 28 45 25 2d  34 29 0d 03 75 17 20 20  |ck%!(E%-4)..u.  |
00006d30  7f 3a 6e 65 78 74 25 3d  62 6c 6f 63 6b 25 21 50  |.:next%=block%!P|
00006d40  25 0d 03 76 05 cb 0d 03  77 19 f2 73 65 74 5f 63  |%..v....w..set_c|
00006d50  61 72 65 74 28 77 69 25  2c 6e 65 78 74 25 29 0d  |aret(wi%,next%).|
00006d60  03 78 06 3d a3 0d 03 79  05 3a 0d 03 7a 14 dd 20  |.x.=...y.:..z.. |
00006d70  a4 74 65 78 74 28 77 69  25 2c 69 63 25 29 0d 03  |.text(wi%,ic%)..|
00006d80  7b 1c 21 62 6c 6f 63 6b  25 3d 77 69 25 3a 62 6c  |{.!block%=wi%:bl|
00006d90  6f 63 6b 25 21 34 3d 69  63 25 0d 03 7c 22 c8 99  |ock%!4=ic%..|"..|
00006da0  20 22 57 69 6d 70 5f 47  65 74 49 63 6f 6e 53 74  | "Wimp_GetIconSt|
00006db0  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 03 7d 0e  |ate",,block%..}.|
00006dc0  3d 62 6c 6f 63 6b 25 21  32 38 0d 03 7e 05 3a 0d  |=block%!28..~.:.|
00006dd0  03 7f 13 dd 20 a4 76 61  6c 28 77 69 25 2c 69 63  |.... .val(wi%,ic|
00006de0  25 29 0d 03 80 1c 21 62  6c 6f 63 6b 25 3d 77 69  |%)....!block%=wi|
00006df0  25 3a 62 6c 6f 63 6b 25  21 34 3d 69 63 25 0d 03  |%:block%!4=ic%..|
00006e00  81 22 c8 99 20 22 57 69  6d 70 5f 47 65 74 49 63  |.".. "Wimp_GetIc|
00006e10  6f 6e 53 74 61 74 65 22  2c 2c 62 6c 6f 63 6b 25  |onState",,block%|
00006e20  0d 03 82 0e 3d 62 6c 6f  63 6b 25 21 33 32 0d 03  |....=block%!32..|
00006e30  83 05 3a 0d 03 84 1b dd  20 a4 74 65 78 74 5f 6c  |..:..... .text_l|
00006e40  65 6e 67 74 68 28 77 69  25 2c 69 63 25 29 0d 03  |ength(wi%,ic%)..|
00006e50  85 1c 21 62 6c 6f 63 6b  25 3d 77 69 25 3a 62 6c  |..!block%=wi%:bl|
00006e60  6f 63 6b 25 21 34 3d 69  63 25 0d 03 86 22 c8 99  |ock%!4=ic%..."..|
00006e70  20 22 57 69 6d 70 5f 47  65 74 49 63 6f 6e 53 74  | "Wimp_GetIconSt|
00006e80  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 03 87 14  |ate",,block%....|
00006e90  3d a9 28 24 28 62 6c 6f  63 6b 25 21 32 38 29 29  |=.($(block%!28))|
00006ea0  0d 03 88 05 3a 0d 03 89  1d dd 20 f2 73 65 74 5f  |....:..... .set_|
00006eb0  63 61 72 65 74 28 68 61  6e 64 6c 65 25 2c 69 63  |caret(handle%,ic|
00006ec0  25 29 0d 03 8a 0e e7 20  69 63 25 3d 2d 31 20 8c  |%)..... ic%=-1 .|
00006ed0  0d 03 8b 2c 20 20 c8 99  20 22 57 69 6d 70 5f 53  |...,  .. "Wimp_S|
00006ee0  65 74 43 61 72 65 74 50  6f 73 69 74 69 6f 6e 22  |etCaretPosition"|
00006ef0  2c 68 61 6e 64 6c 65 25  2c 69 63 25 0d 03 8c 07  |,handle%,ic%....|
00006f00  20 20 cc 0d 03 8d 4d 20  20 c8 99 20 22 57 69 6d  |  ....M  .. "Wim|
00006f10  70 5f 53 65 74 43 61 72  65 74 50 6f 73 69 74 69  |p_SetCaretPositi|
00006f20  6f 6e 22 2c 68 61 6e 64  6c 65 25 2c 69 63 25 2c  |on",handle%,ic%,|
00006f30  30 2c 30 2c 2d 31 2c a4  74 65 78 74 5f 6c 65 6e  |0,0,-1,.text_len|
00006f40  67 74 68 28 68 61 6e 64  6c 65 25 2c 69 63 25 29  |gth(handle%,ic%)|
00006f50  0d 03 8e 05 cd 0d 03 8f  05 e1 0d 03 90 05 3a 0d  |..............:.|
00006f60  03 91 22 dd 20 f2 61 6c  74 65 72 5f 66 6c 61 67  |..". .alter_flag|
00006f70  73 28 64 66 67 25 2c 66  66 67 25 2c 62 66 67 25  |s(dfg%,ffg%,bfg%|
00006f80  29 0d 03 92 0c ea 20 69  63 25 2c 46 25 0d 03 93  |)..... ic%,F%...|
00006f90  12 21 62 6c 6f 63 6b 25  3d 6d 61 69 6e 57 25 0d  |.!block%=mainW%.|
00006fa0  03 94 19 e3 20 69 63 25  3d 30 20 b8 20 66 69 65  |.... ic%=0 . fie|
00006fb0  6c 64 73 25 2a 32 2d 31  0d 03 95 14 20 20 46 25  |lds%*2-1....  F%|
00006fc0  3d 28 69 63 25 2b 31 29  20 81 20 32 0d 03 96 31  |=(ic%+1) . 2...1|
00006fd0  20 20 62 6c 6f 63 6b 25  21 34 3d 69 63 25 3a c8  |  block%!4=ic%:.|
00006fe0  99 20 22 57 69 6d 70 5f  47 65 74 49 63 6f 6e 53  |. "Wimp_GetIconS|
00006ff0  74 61 74 65 22 2c 2c 62  6c 6f 63 6b 25 0d 03 97  |tate",,block%...|
00007000  15 20 20 e7 20 28 69 63  25 20 83 20 32 29 3d 31  |.  . (ic% . 2)=1|
00007010  20 8c 0d 03 98 1a 20 20  20 20 c8 8e 20 63 68 61  | .....    .. cha|
00007020  72 74 79 70 65 25 28 46  25 29 20 ca 0d 03 99 55  |rtype%(F%) ....U|
00007030  20 20 20 20 20 20 c9 20  30 2c 31 2c 32 2c 33 2c  |      . 0,1,2,3,|
00007040  34 2c 35 2c 36 2c 37 2c  38 2c 34 30 2c 34 36 2c  |4,5,6,7,8,40,46,|
00007050  34 37 2c 34 38 2c 34 39  2c 35 30 2c 35 31 2c 35  |47,48,49,50,51,5|
00007060  32 2c 35 33 2c 35 34 2c  35 35 2c 35 36 2c 35 37  |2,53,54,55,56,57|
00007070  2c 35 38 3a 62 6c 6f 63  6b 25 21 38 3d 66 66 67  |,58:block%!8=ffg|
00007080  25 0d 03 9a 27 20 20 20  20 20 20 c9 20 33 39 3a  |%...'      . 39:|
00007090  62 6c 6f 63 6b 25 21 38  3d 66 66 67 25 3a 6c 65  |block%!8=ffg%:le|
000070a0  6e 25 28 46 25 29 3d 30  0d 03 9b 42 20 20 20 20  |n%(F%)=0...B    |
000070b0  20 20 c9 20 35 39 3a e7  20 6c 6f 67 6f 73 6c 6f  |  . 59:. logoslo|
000070c0  61 64 65 64 25 20 8c 20  62 6c 6f 63 6b 25 21 38  |aded% . block%!8|
000070d0  3d 26 30 30 30 30 36 31  31 45 20 8b 20 62 6c 6f  |=&0000611E . blo|
000070e0  63 6b 25 21 38 3d 66 66  67 25 0d 03 9c 19 20 20  |ck%!8=ffg%....  |
000070f0  20 20 20 20 7f 3a 62 6c  6f 63 6b 25 21 38 3d 62  |    .:block%!8=b|
00007100  66 67 25 0d 03 9d 09 20  20 20 20 cb 0d 03 9e 17  |fg%....    .....|
00007110  20 20 20 20 cc 20 62 6c  6f 63 6b 25 21 38 3d 64  |    . block%!8=d|
00007120  66 67 25 0d 03 9f 07 20  20 cd 0d 03 a0 19 20 20  |fg%....  .....  |
00007130  62 6c 6f 63 6b 25 21 31  32 3d 26 46 46 46 46 46  |block%!12=&FFFFF|
00007140  46 46 46 0d 03 a1 24 20  20 c8 99 20 22 57 69 6d  |FFF...$  .. "Wim|
00007150  70 5f 53 65 74 49 63 6f  6e 53 74 61 74 65 22 2c  |p_SetIconState",|
00007160  2c 62 6c 6f 63 6b 25 0d  03 a2 09 ed 20 69 63 25  |,block%..... ic%|
00007170  0d 03 a3 05 e1 0d 03 a4  05 3a 0d 03 a5 1a dd 20  |.........:..... |
00007180  f2 6c 69 6d 69 74 5f 61  63 74 69 6f 6e 73 28 6f  |.limit_actions(o|
00007190  66 66 25 29 0d 03 a6 09  ea 20 69 63 25 0d 03 a7  |ff%)..... ic%...|
000071a0  08 f7 20 2b 30 0d 03 a8  09 f3 20 69 63 25 0d 03  |.. +0..... ic%..|
000071b0  a9 05 f5 0d 03 aa 25 20  20 f2 69 63 6f 6e 5f 62  |......%  .icon_b|
000071c0  69 74 28 32 32 2c 6b 65  79 70 61 64 57 25 2c 69  |it(22,keypadW%,i|
000071d0  63 25 2c 6f 66 66 25 29  0d 03 ab 51 20 20 e7 20  |c%,off%)...Q  . |
000071e0  62 75 74 74 6f 6e 66 69  65 6c 64 25 28 69 63 25  |buttonfield%(ic%|
000071f0  29 3e 30 20 8c 20 f2 69  63 6f 6e 5f 62 69 74 28  |)>0 . .icon_bit(|
00007200  32 32 2c 6d 61 69 6e 57  25 2c 66 69 65 6c 64 25  |22,mainW%,field%|
00007210  28 62 75 74 74 6f 6e 66  69 65 6c 64 25 28 69 63  |(buttonfield%(ic|
00007220  25 29 29 2c 6f 66 66 25  29 0d 03 ac 0b 20 20 f3  |%)),off%)....  .|
00007230  20 69 63 25 0d 03 ad 0c  fd 20 69 63 25 3d 2d 31  | ic%..... ic%=-1|
00007240  0d 03 ae 1a f2 6c 69 74  28 6d 65 6e 75 25 28 31  |.....lit(menu%(1|
00007250  30 29 2c 30 2c 6f 66 66  25 29 0d 03 af 1a f2 6c  |0),0,off%).....l|
00007260  69 74 28 6d 65 6e 75 25  28 31 30 29 2c 31 2c 6f  |it(menu%(10),1,o|
00007270  66 66 25 29 0d 03 b0 1a  f2 6c 69 74 28 6d 65 6e  |ff%).....lit(men|
00007280  75 25 28 31 30 29 2c 32  2c 6f 66 66 25 29 0d 03  |u%(10),2,off%)..|
00007290  b1 05 3a 0d 03 b2 23 dc  20 31 32 2c 31 34 2c 31  |..:...#. 12,14,1|
000072a0  35 2c 31 36 2c 31 37 2c  31 38 2c 32 30 2c 32 31  |5,16,17,18,20,21|
000072b0  2c 32 32 2c 2d 31 0d 03  b3 05 3a 0d 03 b4 05 e1  |,22,-1....:.....|
000072c0  0d 03 b5 05 3a 0d 03 b6  1a dd 20 f2 69 64 65 6e  |....:..... .iden|
000072d0  74 69 66 79 5f 66 69 65  6c 64 28 69 63 25 29 0d  |tify_field(ic%).|
000072e0  03 b7 2e 46 69 65 6c 64  6e 75 6d 62 65 72 25 3d  |...Fieldnumber%=|
000072f0  30 3a 46 69 65 6c 64 6e  61 6d 65 24 3d 22 22 3a  |0:Fieldname$="":|
00007300  54 65 78 74 4c 65 6e 67  74 68 25 3d 30 0d 03 b8  |TextLength%=0...|
00007310  13 e7 20 28 69 63 25 20  83 20 32 29 3d 31 20 8c  |.. (ic% . 2)=1 .|
00007320  0d 03 b9 21 20 20 21 62  6c 6f 63 6b 25 3d 6d 61  |...!  !block%=ma|
00007330  69 6e 57 25 3a 62 6c 6f  63 6b 25 21 34 3d 69 63  |inW%:block%!4=ic|
00007340  25 0d 03 ba 24 20 20 c8  99 20 22 57 69 6d 70 5f  |%...$  .. "Wimp_|
00007350  47 65 74 49 63 6f 6e 53  74 61 74 65 22 2c 2c 62  |GetIconState",,b|
00007360  6c 6f 63 6b 25 0d 03 bb  1d 20 20 54 65 78 74 4c  |lock%....  TextL|
00007370  65 6e 67 74 68 25 3d 62  6c 6f 63 6b 25 21 33 36  |ength%=block%!36|
00007380  2d 31 0d 03 bc 1e 20 20  46 69 65 6c 64 6e 75 6d  |-1....  Fieldnum|
00007390  62 65 72 25 3d 28 69 63  25 2b 31 29 20 81 20 32  |ber%=(ic%+1) . 2|
000073a0  0d 03 bd 33 20 20 46 69  65 6c 64 6e 61 6d 65 24  |...3  Fieldname$|
000073b0  3d 24 a4 74 65 78 74 28  6d 61 69 6e 57 25 2c 64  |=$.text(mainW%,d|
000073c0  65 73 63 25 28 46 69 65  6c 64 6e 75 6d 62 65 72  |esc%(Fieldnumber|
000073d0  25 29 29 0d 03 be 35 20  20 e7 20 46 69 65 6c 64  |%))...5  . Field|
000073e0  6e 61 6d 65 24 3d 22 22  20 8c 20 46 69 65 6c 64  |name$="" . Field|
000073f0  6e 61 6d 65 24 3d 54 61  67 24 28 46 69 65 6c 64  |name$=Tag$(Field|
00007400  6e 75 6d 62 65 72 25 29  0d 03 bf 22 20 20 c8 8e  |number%)..."  ..|
00007410  20 63 68 61 72 74 79 70  65 25 28 46 69 65 6c 64  | chartype%(Field|
00007420  6e 75 6d 62 65 72 25 29  20 ca 0d 03 c0 24 20 20  |number%) ....$  |
00007430  20 20 c9 20 32 2c 34 3a  c8 99 20 22 4f 53 5f 42  |  . 2,4:.. "OS_B|
00007440  79 74 65 22 2c 32 30 32  2c 30 2c 32 33 39 0d 03  |yte",202,0,239..|
00007450  c1 21 20 20 20 20 7f 3a  c8 99 20 22 4f 53 5f 42  |.!    .:.. "OS_B|
00007460  79 74 65 22 2c 32 30 32  2c 31 36 2c 31 31 31 0d  |yte",202,16,111.|
00007470  03 c2 07 20 20 cb 0d 03  c3 16 20 20 c8 99 20 22  |...  .....  .. "|
00007480  4f 53 5f 42 79 74 65 22  2c 31 31 38 0d 03 c4 05  |OS_Byte",118....|
00007490  cd 0d 03 c5 05 e1 0d 03  c6 05 3a 0d 03 c7 12 dd  |..........:.....|
000074a0  20 a4 66 69 72 73 74 5f  66 69 65 6c 64 0d 03 c8  | .first_field...|
000074b0  08 ea 20 49 25 0d 03 c9  0b f5 20 49 25 2b 3d 31  |.. I%..... I%+=1|
000074c0  0d 03 ca 31 fd 20 28 6c  65 6e 25 28 49 25 29 3e  |...1. (len%(I%)>|
000074d0  30 20 80 20 63 68 61 72  74 79 70 65 25 28 49 25  |0 . chartype%(I%|
000074e0  29 3c 36 29 20 84 20 49  25 3e 66 69 65 6c 64 73  |)<6) . I%>fields|
000074f0  25 0d 03 cb 19 e7 20 49  25 3e 66 69 65 6c 64 73  |%..... I%>fields|
00007500  25 20 8c 3d 30 20 8b 3d  49 25 0d 03 cc 05 3a 0d  |% .=0 .=I%....:.|
00007510  03 cd 4b f4 20 4d 6f 75  73 65 5f 63 6c 69 63 6b  |..K. Mouse_click|
00007520  20 70 72 6f 63 65 73 73  69 6e 67 20 2d 2d 2d 2d  | processing ----|
00007530  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007550  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 03 ce 05 3a 0d  |----------....:.|
00007560  03 cf 1e dd 20 f2 6d 6f  75 73 65 28 78 25 2c 79  |.... .mouse(x%,y|
00007570  25 2c 62 25 2c 77 69 25  2c 69 63 25 29 0d 03 d0  |%,b%,wi%,ic%)...|
00007580  15 6f 6c 64 78 25 3d 78  25 3a 6f 6c 64 79 25 3d  |.oldx%=x%:oldy%=|
00007590  79 25 0d 03 d1 43 62 6c  6f 63 6b 25 21 30 3d 78  |y%...Cblock%!0=x|
000075a0  25 3a 62 6c 6f 63 6b 25  21 34 3d 79 25 3a 62 6c  |%:block%!4=y%:bl|
000075b0  6f 63 6b 25 21 38 3d 62  25 3a 62 6c 6f 63 6b 25  |ock%!8=b%:block%|
000075c0  21 31 32 3d 77 69 25 3a  62 6c 6f 63 6b 25 21 31  |!12=wi%:block%!1|
000075d0  36 3d 69 63 25 0d 03 d2  52 e7 20 28 62 25 20 80  |6=ic%...R. (b% .|
000075e0  20 32 29 3c 3e 32 20 80  20 ac 20 28 64 65 73 69  | 2)<>2 . . (desi|
000075f0  67 6e 25 20 80 20 28 77  69 25 3d 6d 61 69 6e 57  |gn% . (wi%=mainW|
00007600  25 29 29 20 8c 20 c8 99  20 22 49 6e 74 65 72 66  |%)) . .. "Interf|
00007610  61 63 65 5f 53 6c 61 62  42 75 74 74 6f 6e 22 2c  |ace_SlabButton",|
00007620  2c 62 6c 6f 63 6b 25 0d  03 d3 0c c8 8e 20 77 69  |,block%...... wi|
00007630  25 20 ca 0d 03 d4 19 20  20 c9 20 2d 32 3a f2 69  |% .....  . -2:.i|
00007640  63 6f 6e 62 61 72 5f 63  6c 69 63 6b 0d 03 d5 22  |conbar_click..."|
00007650  20 20 c9 20 61 63 63 65  73 73 57 25 3a 61 63 63  |  . accessW%:acc|
00007660  65 73 73 62 75 74 74 6f  6e 25 3d 69 63 25 0d 03  |essbutton%=ic%..|
00007670  d6 1a 20 20 c9 20 6d 61  69 6e 57 25 3a f2 6d 61  |..  . mainW%:.ma|
00007680  69 6e 5f 63 6c 69 63 6b  0d 03 d7 2a 20 20 c9 20  |in_click...*  . |
00007690  6b 65 79 70 61 64 57 25  3a f2 6b 65 79 70 61 64  |keypadW%:.keypad|
000076a0  5f 63 6c 69 63 6b 28 77  69 25 2c 69 63 25 2c 62  |_click(wi%,ic%,b|
000076b0  25 29 0d 03 d8 30 20 20  c9 20 73 61 76 65 57 25  |%)...0  . saveW%|
000076c0  2c 73 61 76 65 73 75 62  57 25 3a f2 73 61 76 65  |,savesubW%:.save|
000076d0  5f 63 6c 69 63 6b 28 77  69 25 2c 69 63 25 2c 62  |_click(wi%,ic%,b|
000076e0  25 29 0d 03 d9 18 20 20  c9 20 6b 65 79 57 25 3a  |%)....  . keyW%:|
000076f0  f2 6b 65 79 5f 63 6c 69  63 6b 0d 03 da 1d 20 20  |.key_click....  |
00007700  c9 20 74 61 62 6c 65 57  25 3a f2 63 72 65 61 74  |. tableW%:.creat|
00007710  65 5f 74 61 62 6c 65 0d  03 db 1d 20 20 c9 20 6c  |e_table....  . l|
00007720  69 6e 6b 57 25 3a f2 6c  69 6e 6b 5f 74 6f 5f 74  |inkW%:.link_to_t|
00007730  61 62 6c 65 0d 03 dc 19  20 20 c9 20 70 61 73 73  |able....  . pass|
00007740  57 25 3a f2 70 61 73 73  77 6f 72 64 73 0d 03 dd  |W%:.passwords...|
00007750  1c 20 20 c9 20 70 72 69  6e 74 57 25 3a f2 70 72  |.  . printW%:.pr|
00007760  69 6e 74 5f 63 6c 69 63  6b 0d 03 de 28 20 20 c9  |int_click...(  .|
00007770  20 6d 61 74 63 68 57 25  3a f2 6d 61 74 63 68 5f  | matchW%:.match_|
00007780  63 6c 69 63 6b 28 62 25  2c 77 69 25 2c 69 63 25  |click(b%,wi%,ic%|
00007790  29 0d 03 df 1e 20 20 c9  20 63 72 65 61 74 65 57  |)....  . createW|
000077a0  25 3a f2 63 72 65 61 74  65 5f 63 6c 69 63 6b 0d  |%:.create_click.|
000077b0  03 e0 20 20 20 c9 20 64  61 74 61 64 69 63 57 25  |..   . datadicW%|
000077c0  3a f2 64 61 74 61 64 69  63 5f 63 6c 69 63 6b 0d  |:.datadic_click.|
000077d0  03 e1 1e 20 20 c9 20 63  68 61 6e 67 65 57 25 3a  |...  . changeW%:|
000077e0  f2 63 68 61 6e 67 65 5f  63 6c 69 63 6b 0d 03 e2  |.change_click...|
000077f0  1a 20 20 c9 20 6d 6f 76  65 57 25 3a f2 6d 6f 76  |.  . moveW%:.mov|
00007800  65 5f 63 6c 69 63 6b 0d  03 e3 28 20 20 c9 20 6c  |e_click...(  . l|
00007810  69 73 74 57 25 3a f2 6c  69 73 74 5f 63 6c 69 63  |istW%:.list_clic|
00007820  6b 28 78 25 2c 79 25 2c  62 25 2c 77 69 25 29 0d  |k(x%,y%,b%,wi%).|
00007830  03 e4 1a 20 20 c9 20 63  6f 6c 57 25 3a f2 73 65  |...  . colW%:.se|
00007840  74 5f 63 6f 6c 6f 75 72  73 0d 03 e5 32 20 20 c9  |t_colours...2  .|
00007850  20 63 61 6c 63 57 25 3a  e7 20 69 63 25 3d 31 20  | calcW%:. ic%=1 |
00007860  8c 20 f2 63 61 6c 63 5f  66 6f 72 6d 75 6c 61 28  |. .calc_formula(|
00007870  24 43 61 6c 63 46 6f 72  6d 25 29 0d 03 e6 10 20  |$CalcForm%).... |
00007880  20 c9 20 6c 61 62 65 6c  57 25 3a 0d 03 e7 0e 20  | . labelW%:.... |
00007890  20 c8 8e 20 69 63 25 20  ca 0d 03 e8 3b 20 20 20  | .. ic% ....;   |
000078a0  20 c9 20 31 31 3a f2 69  63 6f 6e 5f 62 69 74 28  | . 11:.icon_bit(|
000078b0  32 32 2c 6c 61 62 65 6c  57 25 2c 31 32 2c a4 73  |22,labelW%,12,.s|
000078c0  65 6c 65 63 74 65 64 28  6c 61 62 65 6c 57 25 2c  |elected(labelW%,|
000078d0  31 31 29 29 0d 03 e9 25  20 20 20 20 c9 20 31 35  |11))...%    . 15|
000078e0  3a c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |:.. "Wimp_Create|
000078f0  4d 65 6e 75 22 2c 2c 2d  31 0d 03 ea 07 20 20 cb  |Menu",,-1....  .|
00007900  0d 03 eb 1c 20 20 c9 20  6d 65 72 67 65 57 25 3a  |....  . mergeW%:|
00007910  f2 6d 65 72 67 65 5f 63  6c 69 63 6b 0d 03 ec 1a  |.merge_click....|
00007920  20 20 c9 20 73 69 7a 65  57 25 3a f2 73 69 7a 65  |  . sizeW%:.size|
00007930  5f 63 6c 69 63 6b 0d 03  ed 18 20 20 c9 20 63 73  |_click....  . cs|
00007940  76 57 25 3a f2 63 73 76  5f 63 6c 69 63 6b 0d 03  |vW%:.csv_click..|
00007950  ee 4e 20 20 c9 20 70 73  65 6c 65 63 74 57 25 2c  |.N  . pselectW%,|
00007960  72 65 6c 61 74 65 57 25  2c 72 65 66 6f 72 6d 57  |relateW%,reformW|
00007970  25 2c 69 6e 66 6f 57 25  2c 6d 69 73 63 57 25 3a  |%,infoW%,miscW%:|
00007980  f4 20 23 23 23 20 4e 6f  20 61 63 74 69 6f 6e 20  |. ### No action |
00007990  6f 6e 20 74 68 65 73 65  20 23 23 23 0d 03 ef 16  |on these ###....|
000079a0  20 20 7f 3a f2 73 70 65  63 69 61 6c 5f 63 6c 69  |  .:.special_cli|
000079b0  63 6b 0d 03 f0 05 cb 0d  03 f1 2a 62 6c 6f 63 6b  |ck........*block|
000079c0  25 21 38 3d 30 3a 62 6c  6f 63 6b 25 21 31 32 3d  |%!8=0:block%!12=|
000079d0  77 69 25 3a 62 6c 6f 63  6b 25 21 31 36 3d 69 63  |wi%:block%!16=ic|
000079e0  25 0d 03 f2 25 c8 99 20  22 49 6e 74 65 72 66 61  |%...%.. "Interfa|
000079f0  63 65 5f 53 6c 61 62 42  75 74 74 6f 6e 22 2c 2c  |ce_SlabButton",,|
00007a00  62 6c 6f 63 6b 25 0d 03  f3 05 e1 0d 03 f4 05 3a  |block%.........:|
00007a10  0d 03 f5 13 dd 20 f2 63  68 61 6e 67 65 5f 63 6c  |..... .change_cl|
00007a20  69 63 6b 0d 03 f6 15 e7  20 28 62 25 20 80 20 25  |ick..... (b% . %|
00007a30  31 31 31 29 3d 34 20 8c  0d 03 f7 0e 20 20 c8 8e  |111)=4 .....  ..|
00007a40  20 69 63 25 20 ca 0d 03  f8 1a 20 20 20 20 c9 20  | ic% .....    . |
00007a50  34 3a f2 63 68 61 6e 67  65 73 28 6b 65 79 25 29  |4:.changes(key%)|
00007a60  0d 03 f9 20 20 20 20 20  c9 20 35 3a f2 63 6f 6d  |...     . 5:.com|
00007a70  6d 6f 6e 63 61 73 65 28  77 69 25 2c 69 63 25 29  |moncase(wi%,ic%)|
00007a80  0d 03 fa 07 20 20 cb 0d  03 fb 05 cd 0d 03 fc 05  |....  ..........|
00007a90  e1 0d 03 fd 05 3a 0d 03  fe 11 dd 20 f2 6d 6f 76  |.....:..... .mov|
00007aa0  65 5f 63 6c 69 63 6b 0d  03 ff 15 e7 20 28 62 25  |e_click..... (b%|
00007ab0  20 80 20 25 31 31 31 29  3d 34 20 8c 0d 04 00 0e  | . %111)=4 .....|
00007ac0  20 20 c8 8e 20 69 63 25  20 ca 0d 04 01 12 20 20  |  .. ic% .....  |
00007ad0  20 20 c9 20 38 3a f2 63  6c 65 61 72 0d 04 02 20  |  . 8:.clear... |
00007ae0  20 20 20 20 c9 20 39 3a  f2 63 6f 6d 6d 6f 6e 63  |    . 9:.commonc|
00007af0  61 73 65 28 77 69 25 2c  69 63 25 29 0d 04 03 07  |ase(wi%,ic%)....|
00007b00  20 20 cb 0d 04 04 05 cd  0d 04 05 05 e1 0d 04 06  |  ..............|
00007b10  05 3a 0d 04 07 10 dd 20  f2 63 73 76 5f 63 6c 69  |.:..... .csv_cli|
00007b20  63 6b 0d 04 08 14 c8 8e  20 28 62 25 20 80 20 25  |ck...... (b% . %|
00007b30  31 31 31 29 20 ca 0d 04  09 0c 20 20 c9 20 32 2c  |111) .....  . 2,|
00007b40  34 3a 0d 04 0a 0e 20 20  c8 8e 20 69 63 25 20 ca  |4:....  .. ic% .|
00007b50  0d 04 0b 30 20 20 20 20  c9 20 35 3a f2 73 68 6f  |...0    . 5:.sho|
00007b60  77 5f 6d 65 6e 75 28 6d  65 6e 75 25 28 31 35 29  |w_menu(menu%(15)|
00007b70  2c 6f 6c 64 78 25 2b 33  32 2c 6f 6c 64 79 25 29  |,oldx%+32,oldy%)|
00007b80  0d 04 0c 30 20 20 20 20  c9 20 36 3a f2 73 68 6f  |...0    . 6:.sho|
00007b90  77 5f 6d 65 6e 75 28 6d  65 6e 75 25 28 32 30 29  |w_menu(menu%(20)|
00007ba0  2c 6f 6c 64 78 25 2b 33  32 2c 6f 6c 64 79 25 29  |,oldx%+32,oldy%)|
00007bb0  0d 04 0d 07 20 20 cb 0d  04 0e 05 cb 0d 04 0f 14  |....  ..........|
00007bc0  c8 8e 20 28 62 25 20 80  20 25 31 31 31 29 20 ca  |.. (b% . %111) .|
00007bd0  0d 04 10 0a 20 20 c9 20  34 3a 0d 04 11 0e 20 20  |....  . 4:....  |
00007be0  c8 8e 20 69 63 25 20 ca  0d 04 12 36 20 20 20 20  |.. ic% ....6    |
00007bf0  c9 20 31 3a f2 69 63 6f  6e 5f 62 69 74 28 32 32  |. 1:.icon_bit(22|
00007c00  2c 63 73 76 57 25 2c 34  2c 28 a4 73 65 6c 65 63  |,csvW%,4,(.selec|
00007c10  74 65 64 28 63 73 76 57  25 2c 31 29 29 29 0d 04  |ted(csvW%,1)))..|
00007c20  13 2a 20 20 20 20 c9 20  39 3a f2 63 6f 6e 76 65  |.*    . 9:.conve|
00007c30  72 74 5f 63 73 76 28 24  a4 74 65 78 74 28 63 73  |rt_csv($.text(cs|
00007c40  76 57 25 2c 31 33 29 29  0d 04 14 21 20 20 20 20  |vW%,13))...!    |
00007c50  c9 20 31 30 3a f2 63 6c  6f 73 65 5f 77 69 6e 64  |. 10:.close_wind|
00007c60  6f 77 28 63 73 76 57 25  29 0d 04 15 07 20 20 cb  |ow(csvW%)....  .|
00007c70  0d 04 16 05 cb 0d 04 17  05 e1 0d 04 18 05 3a 0d  |..............:.|
00007c80  04 19 12 dd 20 f2 6d 65  72 67 65 5f 63 6c 69 63  |.... .merge_clic|
00007c90  6b 0d 04 1a 22 e7 20 28  62 25 20 80 20 25 31 31  |k...". (b% . %11|
00007ca0  31 29 3d 34 20 8c 20 7a  25 3d 31 20 8b 20 7a 25  |1)=4 . z%=1 . z%|
00007cb0  3d 2d 31 0d 04 1b 0c c8  8e 20 69 63 25 20 ca 0d  |=-1...... ic% ..|
00007cc0  04 1c 2f 20 20 c9 20 34  3a 43 6c 69 65 6e 74 50  |../  . 4:ClientP|
00007cd0  74 72 25 3d a4 6d 65 72  67 65 5f 6e 65 78 74 28  |tr%=.merge_next(|
00007ce0  43 6c 69 65 6e 74 50 74  72 25 2c 7a 25 29 0d 04  |ClientPtr%,z%)..|
00007cf0  1d 30 20 20 c9 20 39 3a  43 6c 69 65 6e 74 50 74  |.0  . 9:ClientPt|
00007d00  72 25 3d a4 6d 65 72 67  65 5f 6e 65 78 74 28 43  |r%=.merge_next(C|
00007d10  6c 69 65 6e 74 50 74 72  25 2c 2d 7a 25 29 0d 04  |lientPtr%,-z%)..|
00007d20  1e 29 20 20 c9 20 31 31  3a 43 6c 69 65 6e 74 50  |.)  . 11:ClientP|
00007d30  74 72 25 3d a4 6d 65 72  67 65 5f 6e 65 78 74 28  |tr%=.merge_next(|
00007d40  74 6f 70 2c 7a 25 29 0d  04 1f 2a 20 20 c9 20 31  |top,z%)...*  . 1|
00007d50  30 3a 43 6c 69 65 6e 74  50 74 72 25 3d a4 6d 65  |0:ClientPtr%=.me|
00007d60  72 67 65 5f 6e 65 78 74  28 74 6f 70 2c 2d 7a 25  |rge_next(top,-z%|
00007d70  29 0d 04 20 1f 20 20 c9  20 31 32 3a f2 63 6f 6d  |).. .  . 12:.com|
00007d80  6d 6f 6e 63 61 73 65 28  77 69 25 2c 69 63 25 29  |moncase(wi%,ic%)|
00007d90  0d 04 21 0a 20 20 c9 20  35 3a 0d 04 22 5e 20 20  |..!.  . 5:.."^  |
00007da0  c8 99 20 22 49 6d 70 75  6c 73 65 5f 53 65 6e 64  |.. "Impulse_Send|
00007db0  4d 65 73 73 61 67 65 22  2c 26 32 30 31 2c 22 3a  |Message",&201,":|
00007dc0  22 2b 6d 65 72 67 65 77  69 74 68 24 2b 22 2e 22  |"+mergewith$+"."|
00007dd0  2b 64 6f 63 75 6d 65 6e  74 24 2b 22 20 50 72 69  |+document$+" Pri|
00007de0  6e 74 22 2c 2c 2c 2c 70  72 69 6e 74 74 61 67 25  |nt",,,,printtag%|
00007df0  2c 6d 79 74 61 73 6b 25  0d 04 23 0a 20 20 c9 20  |,mytask%..#.  . |
00007e00  37 3a 0d 04 24 11 20 20  6d 65 72 67 65 6e 75 6d  |7:..$.  mergenum|
00007e10  25 3d 30 0d 04 25 43 20  20 43 6c 69 65 6e 74 53  |%=0..%C  ClientS|
00007e20  65 61 72 63 68 24 3d a4  70 61 72 73 65 28 24 a4  |earch$=.parse($.|
00007e30  74 65 78 74 28 6d 65 72  67 65 57 25 2c 33 29 2c  |text(mergeW%,3),|
00007e40  a4 73 65 6c 65 63 74 65  64 28 6d 65 72 67 65 57  |.selected(mergeW|
00007e50  25 2c 31 32 29 29 0d 04  26 23 20 20 43 6c 69 65  |%,12))..&#  Clie|
00007e60  6e 74 50 74 72 25 3d a4  6d 65 72 67 65 5f 6e 65  |ntPtr%=.merge_ne|
00007e70  78 74 28 74 6f 70 2c 31  29 0d 04 27 21 20 20 c9  |xt(top,1)..'!  .|
00007e80  20 38 3a f2 70 65 72 66  6f 72 6d 5f 63 6c 6f 73  | 8:.perform_clos|
00007e90  65 28 6d 65 72 67 65 57  25 29 0d 04 28 05 cb 0d  |e(mergeW%)..(...|
00007ea0  04 29 05 e1 0d 04 2a 05  3a 0d 04 2b 11 dd 20 f2  |.)....*.:..+.. .|
00007eb0  73 69 7a 65 5f 63 6c 69  63 6b 0d 04 2c 0a c8 8e  |size_click..,...|
00007ec0  20 b9 20 ca 0d 04 2d 18  20 20 c9 20 bb 28 24 52  | . ...-.  . .($R|
00007ed0  65 63 6f 72 64 73 25 29  3c 3d 30 3a 0d 04 2e 17  |ecords%)<=0:....|
00007ee0  20 20 f2 73 6f 66 74 65  72 72 6f 72 28 22 22 2c  |  .softerror("",|
00007ef0  37 31 29 0d 04 2f 2c 20  20 24 52 65 63 6f 72 64  |71)../,  $Record|
00007f00  73 25 3d 22 31 30 30 22  3a f2 72 65 64 72 61 77  |s%="100":.redraw|
00007f10  5f 69 63 6f 6e 28 73 69  7a 65 57 25 2c 31 29 0d  |_icon(sizeW%,1).|
00007f20  04 30 18 20 20 c9 20 bb  28 24 49 6e 63 72 65 6d  |.0.  . .($Increm|
00007f30  65 6e 74 25 29 3c 30 0d  04 31 17 20 20 f2 73 6f  |ent%)<0..1.  .so|
00007f40  66 74 65 72 72 6f 72 28  22 22 2c 37 32 29 0d 04  |fterror("",72)..|
00007f50  32 2d 20 20 24 49 6e 63  72 65 6d 65 6e 74 25 3d  |2-  $Increment%=|
00007f60  22 32 35 22 3a f2 72 65  64 72 61 77 5f 69 63 6f  |"25":.redraw_ico|
00007f70  6e 28 73 69 7a 65 57 25  2c 33 29 0d 04 33 08 20  |n(sizeW%,3)..3. |
00007f80  20 7f 3a 0d 04 34 33 20  20 e7 20 70 72 65 73 65  | .:..43  . prese|
00007f90  6e 74 25 3d 37 20 8c 20  f2 63 68 61 6e 67 65 5f  |nt%=7 . .change_|
00007fa0  6c 65 6e 67 74 68 28 bb  28 24 52 65 63 6f 72 64  |length(.($Record|
00007fb0  73 25 29 2c b9 29 0d 04  35 1e 20 20 c8 99 20 22  |s%),.)..5.  .. "|
00007fc0  57 69 6d 70 5f 43 72 65  61 74 65 4d 65 6e 75 22  |Wimp_CreateMenu"|
00007fd0  2c 2c 2d 31 0d 04 36 05  cb 0d 04 37 05 e1 0d 04  |,,-1..6....7....|
00007fe0  38 05 3a 0d 04 39 14 dd  20 f2 64 61 74 61 64 69  |8.:..9.. .datadi|
00007ff0  63 5f 63 6c 69 63 6b 0d  04 3a 12 c8 8e 20 62 25  |c_click..:... b%|
00008000  20 80 20 25 31 31 31 20  ca 0d 04 3b 0a 20 20 c9  | . %111 ...;.  .|
00008010  20 34 3a 0d 04 3c 38 20  20 21 62 6c 6f 63 6b 25  | 4:..<8  !block%|
00008020  3d 64 61 74 61 64 69 63  57 25 3a c8 99 20 22 57  |=datadicW%:.. "W|
00008030  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
00008040  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 04 3d 4d 20  |te",,block%..=M |
00008050  20 c8 99 20 22 57 69 6d  70 5f 53 65 74 43 61 72  | .. "Wimp_SetCar|
00008060  65 74 50 6f 73 69 74 69  6f 6e 22 2c 64 61 74 61  |etPosition",data|
00008070  64 69 63 57 25 2c 69 63  25 2c 78 25 2d 62 6c 6f  |dicW%,ic%,x%-blo|
00008080  63 6b 25 21 34 2b 62 6c  6f 63 6b 25 21 32 30 2c  |ck%!4+block%!20,|
00008090  79 25 2c 2d 31 2c 2d 31  0d 04 3e 2b 20 20 c9 20  |y%,-1,-1..>+  . |
000080a0  32 3a f2 73 68 6f 77 5f  6d 65 6e 75 28 6d 65 6e  |2:.show_menu(men|
000080b0  75 25 28 31 37 29 2c 78  25 2d 36 34 2c 79 25 2d  |u%(17),x%-64,y%-|
000080c0  32 30 29 0d 04 3f 0a 20  20 c9 20 31 3a 0d 04 40  |20)..?.  . 1:..@|
000080d0  10 20 20 e7 20 69 63 25  3e 3d 30 20 8c 0d 04 41  |.  . ic%>=0 ...A|
000080e0  25 20 20 20 20 66 69 65  6c 64 25 3d 28 69 63 25  |%    field%=(ic%|
000080f0  20 83 20 28 54 61 62 46  69 65 6c 64 73 25 2b 31  | . (TabFields%+1|
00008100  29 29 0d 04 42 1b 20 20  20 20 f2 69 6e 76 65 72  |))..B.    .inver|
00008110  74 28 77 69 25 2c 66 69  65 6c 64 25 29 0d 04 43  |t(wi%,field%)..C|
00008120  18 20 20 20 20 66 69 65  6c 64 24 3d c3 28 66 69  |.    field$=.(fi|
00008130  65 6c 64 25 29 0d 04 44  21 20 20 20 20 e7 20 a4  |eld%)..D!    . .|
00008140  73 65 6c 65 63 74 65 64  28 77 69 25 2c 66 69 65  |selected(wi%,fie|
00008150  6c 64 25 29 20 8c 0d 04  45 29 20 20 20 20 20 20  |ld%) ...E)      |
00008160  70 72 69 6e 74 72 65 6c  24 28 54 61 62 6c 65 6e  |printrel$(Tablen|
00008170  75 6d 62 65 72 25 29 2b  3d 66 69 65 6c 64 24 0d  |umber%)+=field$.|
00008180  04 46 0b 20 20 20 20 20  20 cc 0d 04 47 2d 20 20  |.F.      ...G-  |
00008190  20 20 20 20 50 25 3d a7  70 72 69 6e 74 72 65 6c  |    P%=.printrel|
000081a0  24 28 54 61 62 6c 65 6e  75 6d 62 65 72 25 29 2c  |$(Tablenumber%),|
000081b0  66 69 65 6c 64 24 29 0d  04 48 5f 20 20 20 20 20  |field$)..H_     |
000081c0  20 70 72 69 6e 74 72 65  6c 24 28 54 61 62 6c 65  | printrel$(Table|
000081d0  6e 75 6d 62 65 72 25 29  3d c0 70 72 69 6e 74 72  |number%)=.printr|
000081e0  65 6c 24 28 54 61 62 6c  65 6e 75 6d 62 65 72 25  |el$(Tablenumber%|
000081f0  29 2c 50 25 2d 31 29 2b  c1 70 72 69 6e 74 72 65  |),P%-1)+.printre|
00008200  6c 24 28 54 61 62 6c 65  6e 75 6d 62 65 72 25 29  |l$(Tablenumber%)|
00008210  2c 50 25 2b 31 29 0d 04  49 09 20 20 20 20 cd 0d  |,P%+1)..I.    ..|
00008220  04 4a 07 20 20 cd 0d 04  4b 05 cb 0d 04 4c 05 e1  |.J.  ...K....L..|
00008230  0d 04 4d 05 3a 0d 04 4e  1f dd 20 f2 6c 69 73 74  |..M.:..N.. .list|
00008240  5f 63 6c 69 63 6b 28 78  25 2c 79 25 2c 62 25 2c  |_click(x%,y%,b%,|
00008250  77 69 25 29 0d 04 4f 08  ea 20 4e 25 0d 04 50 14  |wi%)..O.. N%..P.|
00008260  c8 8e 20 28 62 25 20 80  20 25 31 31 31 29 20 ca  |.. (b% . %111) .|
00008270  0d 04 51 2b 20 20 c9 20  32 3a f2 73 68 6f 77 5f  |..Q+  . 2:.show_|
00008280  6d 65 6e 75 28 6d 65 6e  75 25 28 31 38 29 2c 78  |menu(menu%(18),x|
00008290  25 2d 36 34 2c 79 25 2d  32 30 29 0d 04 52 0a 20  |%-64,y%-20)..R. |
000082a0  20 c9 20 34 3a 0d 04 53  11 20 20 21 62 6c 6f 63  | . 4:..S.  !bloc|
000082b0  6b 25 3d 77 69 25 0d 04  54 26 20 20 c8 99 20 22  |k%=wi%..T&  .. "|
000082c0  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
000082d0  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 04 55 2c  |ate",,block%..U,|
000082e0  20 20 6c 69 6e 65 25 3d  28 62 6c 6f 63 6b 25 21  |  line%=(block%!|
000082f0  31 36 2d 62 6c 6f 63 6b  25 21 32 34 2d 79 25 2b  |16-block%!24-y%+|
00008300  33 32 29 20 81 20 33 32  0d 04 56 2a 20 20 63 6f  |32) . 32..V*  co|
00008310  6c 75 6d 6e 25 3d 28 78  25 2d 62 6c 6f 63 6b 25  |lumn%=(x%-block%|
00008320  21 34 2b 62 6c 6f 63 6b  25 21 32 30 29 20 81 20  |!4+block%!20) . |
00008330  31 36 0d 04 57 19 20 20  52 65 63 50 74 72 25 3d  |16..W.  RecPtr%=|
00008340  21 72 65 63 61 6e 63 68  6f 72 25 0d 04 58 1a 20  |!recanchor%..X. |
00008350  20 52 25 3d 52 65 63 50  74 72 25 21 28 6c 69 6e  | R%=RecPtr%!(lin|
00008360  65 25 2a 34 29 0d 04 59  15 20 20 45 25 3d a9 28  |e%*4)..Y.  E%=.(|
00008370  46 6f 72 6d 24 29 20 81  20 32 0d 04 5a 0f 20 20  |Form$) . 2..Z.  |
00008380  e7 20 52 25 3e 3d 30 20  8c 0d 04 5b 26 20 20 20  |. R%>=0 ...[&   |
00008390  20 61 64 64 72 3d a4 66  69 6e 64 28 22 23 22 2b  | addr=.find("#"+|
000083a0  c3 28 52 25 29 2c 6b 65  79 25 2c 31 2c b9 29 0d  |.(R%),key%,1,.).|
000083b0  04 5c 14 20 20 20 20 c8  8e 20 66 6f 72 6d 61 74  |.\.    .. format|
000083c0  24 20 ca 0d 04 5d 1b 20  20 20 20 20 20 c9 20 22  |$ ...].      . "|
000083d0  68 6f 72 69 7a 22 2c 22  74 61 62 6c 65 22 0d 04  |horiz","table"..|
000083e0  5e 0b 20 20 20 20 20 20  f5 0d 04 5f 11 20 20 20  |^.      ..._.   |
000083f0  20 20 20 20 20 4e 25 2b  3d 31 0d 04 60 26 20 20  |     N%+=1..`&  |
00008400  20 20 20 20 fd 20 54 61  62 25 28 4e 25 29 3e 63  |    . Tab%(N%)>c|
00008410  6f 6c 75 6d 6e 25 2b 31  20 84 20 4e 25 3d 45 25  |olumn%+1 . N%=E%|
00008420  0d 04 61 24 20 20 20 20  20 20 46 25 3d a4 66 6e  |..a$      F%=.fn|
00008430  75 6d 28 c1 46 6f 72 6d  24 2c 4e 25 2a 32 2d 31  |um(.Form$,N%*2-1|
00008440  2c 32 29 29 0d 04 62 13  20 20 20 20 20 20 c9 20  |,2))..b.      . |
00008450  22 76 65 72 74 22 3a 0d  04 63 0b 20 20 20 20 20  |"vert":..c.     |
00008460  20 f5 0d 04 64 1a 20 20  20 20 20 20 20 20 4e 25  | ...d.        N%|
00008470  2b 3d 31 3a 6c 69 6e 65  25 2d 3d 31 0d 04 65 29  |+=1:line%-=1..e)|
00008480  20 20 20 20 20 20 fd 20  52 65 63 50 74 72 25 21  |      . RecPtr%!|
00008490  28 6c 69 6e 65 25 2a 34  29 3c 3e 52 25 20 84 20  |(line%*4)<>R% . |
000084a0  4e 25 3d 45 25 0d 04 66  24 20 20 20 20 20 20 46  |N%=E%..f$      F|
000084b0  25 3d a4 66 6e 75 6d 28  c1 46 6f 72 6d 24 2c 4e  |%=.fnum(.Form$,N|
000084c0  25 2a 32 2d 31 2c 32 29  29 0d 04 67 22 20 20 20  |%*2-1,2))..g"   |
000084d0  20 20 20 c9 20 22 74 72  65 65 22 3a 46 25 3d 4b  |   . "tree":F%=K|
000084e0  46 25 28 74 6b 65 79 25  2c 30 29 0d 04 68 1d 20  |F%(tkey%,0)..h. |
000084f0  20 20 20 20 20 c9 20 22  64 75 70 22 3a 46 25 3d  |     . "dup":F%=|
00008500  4b 46 25 28 30 2c 30 29  0d 04 69 09 20 20 20 20  |KF%(0,0)..i.    |
00008510  cb 0d 04 6a 3b 20 20 20  20 e7 20 63 68 61 72 74  |...j;    . chart|
00008520  79 70 65 25 28 46 25 29  3c 3d 31 30 20 8c 20 f2  |ype%(F%)<=10 . .|
00008530  73 65 74 5f 63 61 72 65  74 28 6d 61 69 6e 57 25  |set_caret(mainW%|
00008540  2c 66 69 65 6c 64 25 28  46 25 29 29 0d 04 6b 17  |,field%(F%))..k.|
00008550  20 20 20 20 46 69 65 6c  64 6e 75 6d 62 65 72 25  |    Fieldnumber%|
00008560  3d 46 25 0d 04 6c 07 20  20 cd 0d 04 6d 05 cb 0d  |=F%..l.  ...m...|
00008570  04 6e 05 e1 0d 04 6f 05  3a 0d 04 70 1e dd 20 f2  |.n....o.:..p.. .|
00008580  6d 61 74 63 68 5f 63 6c  69 63 6b 28 62 25 2c 77  |match_click(b%,w|
00008590  69 25 2c 69 63 25 29 0d  04 71 13 ea 20 6e 6f 74  |i%,ic%)..q.. not|
000085a0  25 2c 61 6e 64 25 2c 6f  72 25 0d 04 72 2f e7 20  |%,and%,or%..r/. |
000085b0  62 25 3d 32 20 8c 20 f2  73 68 6f 77 5f 6d 65 6e  |b%=2 . .show_men|
000085c0  75 28 6d 65 6e 75 25 28  31 29 2c 78 25 2d 36 34  |u(menu%(1),x%-64|
000085d0  2c 79 25 2d 32 30 29 3a  e1 0d 04 73 21 c8 8e 20  |,y%-20):...s!.. |
000085e0  a4 73 65 6c 65 63 74 65  64 5f 65 73 67 28 70 72  |.selected_esg(pr|
000085f0  69 6e 74 57 25 2c 34 29  20 ca 0d 04 74 1f 20 20  |intW%,4) ...t.  |
00008600  c9 20 33 38 3a 72 65 70  6f 72 74 64 65 73 74 24  |. 38:reportdest$|
00008610  3d 22 57 69 6e 64 6f 77  22 0d 04 75 1d 20 20 c9  |="Window"..u.  .|
00008620  20 33 39 3a 72 65 70 6f  72 74 64 65 73 74 24 3d  | 39:reportdest$=|
00008630  22 46 69 6c 65 22 0d 04  76 20 20 20 c9 20 34 31  |"File"..v   . 41|
00008640  3a 72 65 70 6f 72 74 64  65 73 74 24 3d 22 50 72  |:reportdest$="Pr|
00008650  69 6e 74 65 72 22 0d 04  77 05 cb 0d 04 78 0c c8  |inter"..w....x..|
00008660  8e 20 69 63 25 20 ca 0d  04 79 1f 20 20 c9 20 31  |. ic% ...y.  . 1|
00008670  36 3a f2 63 6f 6d 6d 6f  6e 63 61 73 65 28 77 69  |6:.commoncase(wi|
00008680  25 2c 69 63 25 29 0d 04  7a 0b 20 20 c9 20 32 37  |%,ic%)..z.  . 27|
00008690  3a 0d 04 7b 63 20 20 e7  20 a4 73 65 6c 65 63 74  |:..{c  . .select|
000086a0  65 64 28 6d 61 74 63 68  57 25 2c 32 37 29 20 8c  |ed(matchW%,27) .|
000086b0  20 24 a4 74 65 78 74 28  6d 61 74 63 68 57 25 2c  | $.text(matchW%,|
000086c0  32 35 29 3d 22 4e 75 6d  62 65 72 20 66 6f 75 6e  |25)="Number foun|
000086d0  64 22 20 8b 20 24 a4 74  65 78 74 28 6d 61 74 63  |d" . $.text(matc|
000086e0  68 57 25 2c 32 35 29 3d  22 54 69 6d 65 20 74 61  |hW%,25)="Time ta|
000086f0  6b 65 6e 22 0d 04 7c 1e  20 20 f2 72 65 64 72 61  |ken"..|.  .redra|
00008700  77 5f 69 63 6f 6e 28 6d  61 74 63 68 57 25 2c 32  |w_icon(matchW%,2|
00008710  35 29 0d 04 7d 0d 20 20  c9 20 31 2c 32 34 3a 0d  |5)..}.  . 1,24:.|
00008720  04 7e 6f 20 20 e7 20 69  63 25 3d 32 34 20 8c 20  |.~o  . ic%=24 . |
00008730  53 65 61 72 63 68 24 3d  22 22 3a 64 69 73 70 6c  |Search$="":displ|
00008740  61 79 65 64 25 3d b9 20  8b 20 53 65 61 72 63 68  |ayed%=. . Search|
00008750  24 3d a4 70 61 72 73 65  28 24 a4 74 65 78 74 28  |$=.parse($.text(|
00008760  6d 61 74 63 68 57 25 2c  30 29 2c a4 73 65 6c 65  |matchW%,0),.sele|
00008770  63 74 65 64 28 6d 61 74  63 68 57 25 2c 31 36 29  |cted(matchW%,16)|
00008780  29 3a 64 69 73 70 6c 61  79 65 64 25 3d a3 0d 04  |):displayed%=...|
00008790  7f 1a 20 20 e7 20 53 65  61 72 63 68 24 3c 3e 22  |..  . Search$<>"|
000087a0  46 41 4c 53 45 22 20 8c  0d 04 80 1d 20 20 20 20  |FALSE" .....    |
000087b0  24 a4 74 65 78 74 28 6d  61 74 63 68 57 25 2c 31  |$.text(matchW%,1|
000087c0  34 29 3d 22 22 0d 04 81  20 20 20 20 20 f2 72 65  |4)=""...     .re|
000087d0  64 72 61 77 5f 69 63 6f  6e 28 6d 61 74 63 68 57  |draw_icon(matchW|
000087e0  25 2c 31 34 29 0d 04 82  18 20 20 20 20 c8 8e 20  |%,14)....    .. |
000087f0  72 65 70 6f 72 74 64 65  73 74 24 20 ca 0d 04 83  |reportdest$ ....|
00008800  39 20 20 20 20 20 20 c9  20 22 57 69 6e 64 6f 77  |9      . "Window|
00008810  22 2c 22 50 72 69 6e 74  65 72 22 3a f2 64 6f 5f  |","Printer":.do_|
00008820  69 74 28 53 65 61 72 63  68 24 2c 64 69 73 70 6c  |it(Search$,displ|
00008830  61 79 65 64 25 29 0d 04  84 13 20 20 20 20 20 20  |ayed%)....      |
00008840  c9 20 22 46 69 6c 65 22  3a 0d 04 85 1f 20 20 20  |. "File":....   |
00008850  20 20 20 73 61 76 65 66  75 6e 63 24 3d 22 53 61  |   savefunc$="Sa|
00008860  76 65 20 6c 69 73 74 22  0d 04 86 31 20 20 20 20  |ve list"...1    |
00008870  20 20 24 53 61 76 65 4e  61 6d 65 25 3d 24 64 61  |  $SaveName%=$da|
00008880  74 61 62 61 73 65 25 2b  22 2e 50 72 69 6e 74 4a  |tabase%+".PrintJ|
00008890  6f 62 73 2e 4c 69 73 74  22 0d 04 87 34 20 20 20  |obs.List"...4   |
000088a0  20 20 20 24 53 61 76 65  53 70 72 69 74 65 25 3d  |   $SaveSprite%=|
000088b0  22 73 66 69 6c 65 5f 66  66 66 3b 50 70 74 72 5f  |"sfile_fff;Pptr_|
000088c0  68 61 6e 64 2c 31 32 2c  38 3b 42 33 22 0d 04 88  |hand,12,8;B3"...|
000088d0  3a 20 20 20 20 20 20 21  62 6c 6f 63 6b 25 3d 6d  |:      !block%=m|
000088e0  61 74 63 68 57 25 3a c8  99 20 22 57 69 6d 70 5f  |atchW%:.. "Wimp_|
000088f0  47 65 74 57 69 6e 64 6f  77 53 74 61 74 65 22 2c  |GetWindowState",|
00008900  2c 62 6c 6f 63 6b 25 0d  04 89 2c 20 20 20 20 20  |,block%...,     |
00008910  20 78 6d 69 6e 25 3d 62  6c 6f 63 6b 25 21 34 2b  | xmin%=block%!4+|
00008920  32 30 30 3a 79 6d 61 78  25 3d 62 6c 6f 63 6b 25  |200:ymax%=block%|
00008930  21 31 36 0d 04 8a 39 20  20 20 20 20 20 21 62 6c  |!16...9      !bl|
00008940  6f 63 6b 25 3d 73 61 76  65 57 25 3a c8 99 20 22  |ock%=saveW%:.. "|
00008950  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
00008960  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 04 8b 3b  |ate",,block%...;|
00008970  20 20 20 20 20 20 62 6c  6f 63 6b 25 21 31 32 3d  |      block%!12=|
00008980  78 6d 69 6e 25 2b 62 6c  6f 63 6b 25 21 31 32 2d  |xmin%+block%!12-|
00008990  62 6c 6f 63 6b 25 21 34  3a 62 6c 6f 63 6b 25 21  |block%!4:block%!|
000089a0  34 3d 78 6d 69 6e 25 0d  04 8c 3b 20 20 20 20 20  |4=xmin%...;     |
000089b0  20 62 6c 6f 63 6b 25 21  38 3d 79 6d 61 78 25 2d  | block%!8=ymax%-|
000089c0  62 6c 6f 63 6b 25 21 31  36 2b 62 6c 6f 63 6b 25  |block%!16+block%|
000089d0  21 38 3a 62 6c 6f 63 6b  25 21 31 36 3d 79 6d 61  |!8:block%!16=yma|
000089e0  78 25 0d 04 8d 33 20 20  20 20 20 20 62 6c 6f 63  |x%...3      bloc|
000089f0  6b 25 21 32 38 3d 2d 31  3a c8 99 20 22 57 69 6d  |k%!28=-1:.. "Wim|
00008a00  70 5f 4f 70 65 6e 57 69  6e 64 6f 77 22 2c 2c 62  |p_OpenWindow",,b|
00008a10  6c 6f 63 6b 25 0d 04 8e  1e 20 20 20 20 20 20 f2  |lock%....      .|
00008a20  73 65 74 5f 63 61 72 65  74 28 73 61 76 65 57 25  |set_caret(saveW%|
00008a30  2c 30 29 0d 04 8f 09 20  20 20 20 cb 0d 04 90 07  |,0)....    .....|
00008a40  20 20 cd 0d 04 91 5e 20  20 e7 20 28 62 25 20 80  |  ....^  . (b% .|
00008a50  20 25 31 31 31 29 3d 34  20 80 20 ac 20 a4 73 65  | %111)=4 . . .se|
00008a60  6c 65 63 74 65 64 28 6d  61 74 63 68 57 25 2c 32  |lected(matchW%,2|
00008a70  37 29 20 8c 20 f2 63 6c  6f 73 65 5f 77 69 6e 64  |7) . .close_wind|
00008a80  6f 77 28 6d 61 74 63 68  57 25 29 3a f2 73 65 74  |ow(matchW%):.set|
00008a90  5f 63 61 72 65 74 28 6d  61 69 6e 57 25 2c 2d 31  |_caret(mainW%,-1|
00008aa0  29 0d 04 92 0e 20 20 c9  20 32 31 2c 32 32 3a 0d  |)....  . 21,22:.|
00008ab0  04 93 36 20 20 e7 20 28  62 25 20 80 20 25 31 31  |..6  . (b% . %11|
00008ac0  31 29 3d 34 20 8c 20 7a  25 3d 31 20 8b 20 e7 20  |1)=4 . z%=1 . . |
00008ad0  28 62 25 20 80 20 25 31  31 31 29 3d 31 20 8c 20  |(b% . %111)=1 . |
00008ae0  7a 25 3d 2d 31 0d 04 94  30 20 20 e7 20 69 63 25  |z%=-1...0  . ic%|
00008af0  3d 32 31 20 8c 20 4d 61  74 63 68 5f 74 61 67 25  |=21 . Match_tag%|
00008b00  2b 3d 7a 25 20 8b 20 4d  61 74 63 68 5f 74 61 67  |+=z% . Match_tag|
00008b10  25 2d 3d 7a 25 0d 04 95  29 20 20 e7 20 4d 61 74  |%-=z%...)  . Mat|
00008b20  63 68 5f 74 61 67 25 3e  66 69 65 6c 64 73 25 20  |ch_tag%>fields% |
00008b30  8c 20 4d 61 74 63 68 5f  74 61 67 25 3d 31 0d 04  |. Match_tag%=1..|
00008b40  96 29 20 20 e7 20 4d 61  74 63 68 5f 74 61 67 25  |.)  . Match_tag%|
00008b50  3c 31 20 8c 20 4d 61 74  63 68 5f 74 61 67 25 3d  |<1 . Match_tag%=|
00008b60  66 69 65 6c 64 73 25 0d  04 97 28 20 20 24 a4 74  |fields%...(  $.t|
00008b70  65 78 74 28 6d 61 74 63  68 57 25 2c 33 29 3d 54  |ext(matchW%,3)=T|
00008b80  61 67 24 28 4d 61 74 63  68 5f 74 61 67 25 29 0d  |ag$(Match_tag%).|
00008b90  04 98 1d 20 20 f2 72 65  64 72 61 77 5f 69 63 6f  |...  .redraw_ico|
00008ba0  6e 28 6d 61 74 63 68 57  25 2c 33 29 0d 04 99 34  |n(matchW%,3)...4|
00008bb0  20 20 f2 74 69 63 6b 5f  6f 6e 65 28 66 69 65 6c  |  .tick_one(fiel|
00008bc0  64 6d 65 6e 75 25 2c 30  2c 66 69 65 6c 64 73 25  |dmenu%,0,fields%|
00008bd0  2d 31 2c 4d 61 74 63 68  5f 74 61 67 25 2d 31 29  |-1,Match_tag%-1)|
00008be0  0d 04 9a 30 20 20 c9 20  32 36 3a f2 73 68 6f 77  |...0  . 26:.show|
00008bf0  5f 6d 65 6e 75 28 66 69  65 6c 64 6d 65 6e 75 25  |_menu(fieldmenu%|
00008c00  2c 6f 6c 64 78 25 2b 33  32 2c 6f 6c 64 79 25 29  |,oldx%+32,oldy%)|
00008c10  0d 04 9b 0b 20 20 c9 20  31 30 3a 0d 04 9c 22 20  |....  . 10:..." |
00008c20  20 6f 70 25 3d a4 73 65  6c 65 63 74 65 64 5f 65  | op%=.selected_e|
00008c30  73 67 28 6d 61 74 63 68  57 25 2c 31 29 0d 04 9d  |sg(matchW%,1)...|
00008c40  0e 20 20 c8 8e 20 6f 70  25 20 ca 0d 04 9e 13 20  |.  .. op% ..... |
00008c50  20 20 20 c9 20 35 3a 6f  70 24 3d 22 3d 22 0d 04  |   . 5:op$="="..|
00008c60  9f 13 20 20 20 20 c9 20  36 3a 6f 70 24 3d 22 7b  |..    . 6:op$="{|
00008c70  22 0d 04 a0 13 20 20 20  20 c9 20 37 3a 6f 70 24  |"....    . 7:op$|
00008c80  3d 22 3c 22 0d 04 a1 13  20 20 20 20 c9 20 38 3a  |="<"....    . 8:|
00008c90  6f 70 24 3d 22 3e 22 0d  04 a2 15 20 20 20 20 c9  |op$=">"....    .|
00008ca0  20 31 35 3a 6f 70 24 3d  22 3c 3e 22 0d 04 a3 15  | 15:op$="<>"....|
00008cb0  20 20 20 20 c9 20 31 38  3a 6f 70 24 3d 22 3e 3d  |    . 18:op$=">=|
00008cc0  22 0d 04 a4 15 20 20 20  20 c9 20 31 39 3a 6f 70  |"....    . 19:op|
00008cd0  24 3d 22 3c 3d 22 0d 04  a5 15 20 20 20 20 c9 20  |$="<="....    . |
00008ce0  32 30 3a 6f 70 24 3d 22  7d 7b 22 0d 04 a6 07 20  |20:op$="}{".... |
00008cf0  20 cb 0d 04 a7 34 20 20  6e 6f 74 25 3d a4 73 65  | ....4  not%=.se|
00008d00  6c 65 63 74 65 64 28 6d  61 74 63 68 57 25 2c 34  |lected(matchW%,4|
00008d10  29 3a f2 64 65 73 65 6c  65 63 74 28 6d 61 74 63  |):.deselect(matc|
00008d20  68 57 25 2c 34 29 0d 04  a8 36 20 20 61 6e 64 25  |hW%,4)...6  and%|
00008d30  3d a4 73 65 6c 65 63 74  65 64 28 6d 61 74 63 68  |=.selected(match|
00008d40  57 25 2c 31 32 29 3a f2  64 65 73 65 6c 65 63 74  |W%,12):.deselect|
00008d50  28 6d 61 74 63 68 57 25  2c 31 32 29 0d 04 a9 35  |(matchW%,12)...5|
00008d60  20 20 6f 72 25 3d a4 73  65 6c 65 63 74 65 64 28  |  or%=.selected(|
00008d70  6d 61 74 63 68 57 25 2c  31 33 29 3a f2 64 65 73  |matchW%,13):.des|
00008d80  65 6c 65 63 74 28 6d 61  74 63 68 57 25 2c 31 33  |elect(matchW%,13|
00008d90  29 0d 04 aa 1c 20 20 74  61 67 24 3d 24 a4 74 65  |)....  tag$=$.te|
00008da0  78 74 28 6d 61 74 63 68  57 25 2c 33 29 0d 04 ab  |xt(matchW%,3)...|
00008db0  21 20 20 63 6f 6e 74 65  6e 74 73 24 3d 24 a4 74  |!  contents$=$.t|
00008dc0  65 78 74 28 6d 61 74 63  68 57 25 2c 39 29 0d 04  |ext(matchW%,9)..|
00008dd0  ac 1d 20 20 6e 65 77 24  3d 74 61 67 24 2b 6f 70  |..  new$=tag$+op|
00008de0  24 2b 63 6f 6e 74 65 6e  74 73 24 0d 04 ad 24 20  |$+contents$...$ |
00008df0  20 e7 20 6e 6f 74 25 20  8c 20 6e 65 77 24 3d 22  | . not% . new$="|
00008e00  4e 4f 54 20 28 22 2b 6e  65 77 24 2b 22 29 22 0d  |NOT ("+new$+")".|
00008e10  04 ae 1c 20 20 e7 20 61  6e 64 25 20 8c 20 6e 65  |...  . and% . ne|
00008e20  77 24 2b 3d 22 20 41 4e  44 20 22 0d 04 af 1a 20  |w$+=" AND ".... |
00008e30  20 e7 20 6f 72 25 20 8c  20 6e 65 77 24 2b 3d 22  | . or% . new$+="|
00008e40  20 4f 52 20 22 0d 04 b0  46 20 20 24 a4 74 65 78  | OR "...F  $.tex|
00008e50  74 28 6d 61 74 63 68 57  25 2c 30 29 3d 24 a4 74  |t(matchW%,0)=$.t|
00008e60  65 78 74 28 6d 61 74 63  68 57 25 2c 30 29 2b 6e  |ext(matchW%,0)+n|
00008e70  65 77 24 3a f2 72 65 64  72 61 77 5f 69 63 6f 6e  |ew$:.redraw_icon|
00008e80  28 6d 61 74 63 68 57 25  2c 30 29 0d 04 b1 32 20  |(matchW%,0)...2 |
00008e90  20 24 a4 74 65 78 74 28  6d 61 74 63 68 57 25 2c  | $.text(matchW%,|
00008ea0  39 29 3d 22 22 3a f2 72  65 64 72 61 77 5f 69 63  |9)="":.redraw_ic|
00008eb0  6f 6e 28 6d 61 74 63 68  57 25 2c 39 29 0d 04 b2  |on(matchW%,9)...|
00008ec0  2c 20 20 c9 20 32 34 3a  72 65 70 6f 72 74 64 65  |,  . 24:reportde|
00008ed0  73 74 24 3d 22 57 69 6e  64 6f 77 22 3a f2 64 6f  |st$="Window":.do|
00008ee0  5f 69 74 28 22 22 2c b9  29 0d 04 b3 5e 20 20 e7  |_it("",.)...^  .|
00008ef0  20 28 62 25 20 80 20 25  31 31 31 29 3d 34 20 80  | (b% . %111)=4 .|
00008f00  20 ac 20 a4 73 65 6c 65  63 74 65 64 28 6d 61 74  | . .selected(mat|
00008f10  63 68 57 25 2c 32 37 29  20 8c 20 f2 63 6c 6f 73  |chW%,27) . .clos|
00008f20  65 5f 77 69 6e 64 6f 77  28 6d 61 74 63 68 57 25  |e_window(matchW%|
00008f30  29 3a f2 73 65 74 5f 63  61 72 65 74 28 6d 61 69  |):.set_caret(mai|
00008f40  6e 57 25 2c 2d 31 29 0d  04 b4 05 cb 0d 04 b5 05  |nW%,-1).........|
00008f50  e1 0d 04 b6 05 3a 0d 04  b7 14 dd 20 f2 69 63 6f  |.....:..... .ico|
00008f60  6e 62 61 72 5f 63 6c 69  63 6b 0d 04 b8 12 c8 8e  |nbar_click......|
00008f70  20 62 25 20 80 20 25 31  31 31 20 ca 0d 04 b9 0a  | b% . %111 .....|
00008f80  20 20 c9 20 32 3a 0d 04  ba 1e 20 20 e7 20 a4 73  |  . 2:....  . .s|
00008f90  65 6c 65 63 74 65 64 28  70 61 73 73 57 25 2c 31  |elected(passW%,1|
00008fa0  32 29 20 8c 0d 04 bb 1d  20 20 20 20 f2 63 6c 6f  |2) .....    .clo|
00008fb0  73 65 5f 77 69 6e 64 6f  77 28 73 61 76 65 57 25  |se_window(saveW%|
00008fc0  29 0d 04 bc 28 20 20 20  20 f2 73 68 6f 77 5f 6d  |)...(    .show_m|
00008fd0  65 6e 75 28 6d 65 6e 75  25 28 30 29 2c 78 25 2d  |enu(menu%(0),x%-|
00008fe0  36 34 2c 79 62 61 72 25  29 0d 04 bd 07 20 20 cd  |64,ybar%)....  .|
00008ff0  0d 04 be 0a 20 20 c9 20  34 3a 0d 04 bf 1b 20 20  |....  . 4:....  |
00009000  e7 20 24 64 62 61 73 65  25 3d 22 4e 6f 20 64 61  |. $dbase%="No da|
00009010  74 61 22 20 8c 0d 04 c0  1e 20 20 20 20 24 53 61  |ta" .....    $Sa|
00009020  76 65 4e 61 6d 65 25 3d  22 21 44 61 74 61 42 61  |veName%="!DataBa|
00009030  73 65 22 0d 04 c1 32 20  20 20 20 24 53 61 76 65  |se"...2    $Save|
00009040  53 70 72 69 74 65 25 3d  22 73 6e 65 77 5f 61 70  |Sprite%="snew_ap|
00009050  70 6c 3b 50 70 74 72 5f  68 61 6e 64 2c 31 32 2c  |pl;Pptr_hand,12,|
00009060  38 3b 42 33 22 0d 04 c2  1c 20 20 20 20 73 61 76  |8;B3"....    sav|
00009070  65 66 75 6e 63 24 3d 63  68 6f 69 63 65 24 28 31  |efunc$=choice$(1|
00009080  29 0d 04 c3 31 20 20 20  20 c8 99 20 22 57 69 6d  |)...1    .. "Wim|
00009090  70 5f 43 72 65 61 74 65  4d 65 6e 75 22 2c 2c 73  |p_CreateMenu",,s|
000090a0  61 76 65 57 25 2c 78 25  2d 35 30 2c 79 25 2b 33  |aveW%,x%-50,y%+3|
000090b0  30 30 0d 04 c4 17 20 20  20 20 cc 20 f2 73 68 6f  |00....    . .sho|
000090c0  77 5f 77 69 6e 64 6f 77  73 0d 04 c5 07 20 20 cd  |w_windows....  .|
000090d0  0d 04 c6 05 cb 0d 04 c7  05 e1 0d 04 c8 05 3a 0d  |..............:.|
000090e0  04 c9 11 dd 20 f2 6d 61  69 6e 5f 63 6c 69 63 6b  |.... .main_click|
000090f0  0d 04 ca 1e ea 20 50 25  2c 46 25 2c 48 24 2c 4c  |..... P%,F%,H$,L|
00009100  25 2c 54 25 2c 4e 24 2c  66 69 65 6c 64 24 0d 04  |%,T%,N$,field$..|
00009110  cb 62 e7 20 70 72 65 73  65 6e 74 25 3d 37 20 80  |.b. present%=7 .|
00009120  20 61 64 6a 75 73 74 25  3d a3 20 8c 20 e7 20 a4  | adjust%=. . . .|
00009130  76 61 6c 69 64 61 74 65  28 46 69 65 6c 64 6e 75  |validate(Fieldnu|
00009140  6d 62 65 72 25 2c 54 25  2c 4e 24 29 3d a3 20 8c  |mber%,T%,N$)=. .|
00009150  20 e1 20 8b 20 f2 75 70  64 61 74 65 5f 63 61 6c  | . . .update_cal|
00009160  63 73 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |cs(Fieldnumber%)|
00009170  0d 04 cc 38 e7 20 66 6c  61 73 68 25 20 8c 20 f2  |...8. flash% . .|
00009180  64 65 73 65 6c 65 63 74  28 6d 61 69 6e 57 25 2c  |deselect(mainW%,|
00009190  66 69 65 6c 64 25 28 66  6c 61 73 68 25 29 29 3a  |field%(flash%)):|
000091a0  66 6c 61 73 68 25 3d a3  0d 04 cd 11 c8 8e 20 70  |flash%=....... p|
000091b0  72 65 73 65 6e 74 25 20  ca 0d 04 ce 19 20 20 c9  |resent% .....  .|
000091c0  20 30 2c 33 3a f2 64 65  73 69 67 6e 5f 66 69 65  | 0,3:.design_fie|
000091d0  6c 64 0d 04 cf 0a 20 20  c9 20 31 3a 0d 04 d0 25  |ld....  . 1:...%|
000091e0  20 20 e7 20 a4 66 69 72  73 74 5f 66 69 65 6c 64  |  . .first_field|
000091f0  3e 30 20 8c 20 f2 64 65  66 61 75 6c 74 5f 6b 65  |>0 . .default_ke|
00009200  79 0d 04 d1 13 20 20 f2  64 65 73 69 67 6e 5f 66  |y....  .design_f|
00009210  69 65 6c 64 0d 04 d2 0c  20 20 c9 20 35 2c 37 3a  |ield....  . 5,7:|
00009220  0d 04 d3 11 20 20 e7 20  61 64 6a 75 73 74 25 20  |....  . adjust% |
00009230  8c 0d 04 d4 15 20 20 20  20 f2 64 65 73 69 67 6e  |.....    .design|
00009240  5f 66 69 65 6c 64 0d 04  d5 09 20 20 20 20 cc 0d  |_field....    ..|
00009250  04 d6 1c 20 20 20 20 f2  69 64 65 6e 74 69 66 79  |...    .identify|
00009260  5f 66 69 65 6c 64 28 69  63 25 29 0d 04 d7 26 20  |_field(ic%)...& |
00009270  20 20 20 e7 20 72 65 6c  61 74 69 6f 6e 73 25 3d  |   . relations%=|
00009280  b9 20 8c 20 f2 72 65 6c  61 74 69 6f 6e 73 28 a3  |. . .relations(.|
00009290  29 0d 04 d8 16 20 20 20  20 c8 8e 20 62 25 20 80  |)....    .. b% .|
000092a0  20 32 30 34 37 20 ca 0d  04 d9 0e 20 20 20 20 20  | 2047 .....     |
000092b0  20 c9 20 32 3a 0d 04 da  2c 20 20 20 20 20 20 e7  | . 2:...,      .|
000092c0  20 a4 73 65 6c 65 63 74  65 64 28 70 61 73 73 57  | .selected(passW|
000092d0  25 2c 31 31 29 20 84 20  4d 6f 64 69 66 79 25 20  |%,11) . Modify% |
000092e0  8c 0d 04 db 1e 20 20 20  20 20 20 20 20 f2 73 65  |.....        .se|
000092f0  74 5f 75 70 5f 66 69 65  6c 64 5f 6d 65 6e 75 0d  |t_up_field_menu.|
00009300  04 dc 2c 20 20 20 20 20  20 20 20 f2 73 68 6f 77  |..,        .show|
00009310  5f 6d 65 6e 75 28 6d 65  6e 75 25 28 31 29 2c 78  |_menu(menu%(1),x|
00009320  25 2d 36 34 2c 79 25 2d  32 30 29 0d 04 dd 0b 20  |%-64,y%-20).... |
00009330  20 20 20 20 20 cd 0d 04  de 0e 20 20 20 20 20 20  |     .....      |
00009340  c9 20 31 3a 0d 04 df 26  20 20 20 20 20 20 c8 8e  |. 1:...&      ..|
00009350  20 63 68 61 72 74 79 70  65 25 28 46 69 65 6c 64  | chartype%(Field|
00009360  6e 75 6d 62 65 72 25 29  20 ca 0d 04 e0 1d 20 20  |number%) .....  |
00009370  20 20 20 20 20 20 c9 20  34 31 2c 34 32 2c 34 33  |      . 41,42,43|
00009380  2c 34 34 2c 34 35 3a 0d  04 e1 1c 20 20 20 20 20  |,44,45:....     |
00009390  20 20 20 f2 69 6e 76 65  72 74 28 77 69 25 2c 69  |   .invert(wi%,i|
000093a0  63 25 29 0d 04 e2 28 20  20 20 20 20 20 20 20 63  |c%)...(        c|
000093b0  6f 6c 25 3d a4 67 65 74  5f 69 63 6f 6e 5f 63 6f  |ol%=.get_icon_co|
000093c0  6c 73 28 77 69 25 2c 69  63 25 29 0d 04 e3 34 20  |ls(wi%,ic%)...4 |
000093d0  20 20 20 20 20 20 20 63  6f 6c 25 3d 28 28 63 6f  |       col%=((co|
000093e0  6c 25 3e 3e 34 29 20 84  20 28 63 6f 6c 25 3c 3c  |l%>>4) . (col%<<|
000093f0  34 29 29 20 80 20 25 31  31 31 31 31 31 31 31 0d  |4)) . %11111111.|
00009400  04 e4 28 20 20 20 20 20  20 20 20 f2 73 65 74 5f  |..(        .set_|
00009410  69 63 6f 6e 5f 63 6f 6c  73 28 77 69 25 2c 69 63  |icon_cols(wi%,ic|
00009420  25 2c 63 6f 6c 25 29 0d  04 e5 25 20 20 20 20 20  |%,col%)...%     |
00009430  20 20 20 62 6f 78 6f 6e  25 3d 28 28 63 6f 6c 25  |   boxon%=((col%|
00009440  20 80 20 25 31 31 31 31  29 3c 32 29 0d 04 e6 25  | . %1111)<2)...%|
00009450  20 20 20 20 20 20 20 20  f2 75 70 64 61 74 65 5f  |        .update_|
00009460  73 65 6c 65 63 74 69 6f  6e 28 62 6f 78 6f 6e 25  |selection(boxon%|
00009470  29 0d 04 e7 0b 20 20 20  20 20 20 cb 0d 04 e8 0e  |)....      .....|
00009480  20 20 20 20 20 20 c9 20  34 3a 0d 04 e9 26 20 20  |      . 4:...&  |
00009490  20 20 20 20 c8 8e 20 63  68 61 72 74 79 70 65 25  |    .. chartype%|
000094a0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 20 ca  |(Fieldnumber%) .|
000094b0  0d 04 ea 39 20 20 20 20  20 20 20 20 c9 20 33 31  |...9        . 31|
000094c0  3a f2 66 69 6c 74 65 72  28 6d 61 69 6e 57 25 2c  |:.filter(mainW%,|
000094d0  66 69 65 6c 64 25 28 62  75 74 74 6f 6e 66 69 65  |field%(buttonfie|
000094e0  6c 64 25 28 32 32 29 29  29 0d 04 eb 1d 20 20 20  |ld%(22)))....   |
000094f0  20 20 20 20 20 c9 20 34  31 2c 34 32 2c 34 33 2c  |     . 41,42,43,|
00009500  34 34 2c 34 35 3a 0d 04  ec 26 20 20 20 20 20 20  |44,45:...&      |
00009510  20 20 e7 20 a6 28 2d 33  29 20 8c 20 f2 69 6e 76  |  . .(-3) . .inv|
00009520  65 72 74 28 77 69 25 2c  69 63 25 29 0d 04 ed 51  |ert(wi%,ic%)...Q|
00009530  20 20 20 20 20 20 20 20  e7 20 a4 73 65 6c 65 63  |        . .selec|
00009540  74 65 64 28 77 69 25 2c  69 63 25 29 20 8c 20 24  |ted(wi%,ic%) . $|
00009550  52 66 25 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |Rf%(Fieldnumber%|
00009560  29 3d 22 20 22 20 8b 20  24 52 66 25 28 46 69 65  |)=" " . $Rf%(Fie|
00009570  6c 64 6e 75 6d 62 65 72  25 29 3d 22 22 0d 04 ee  |ldnumber%)=""...|
00009580  1b 20 20 20 20 20 20 20  20 7f 3a f2 72 65 6c 61  |.        .:.rela|
00009590  74 69 6f 6e 73 28 b9 29  0d 04 ef 0b 20 20 20 20  |tions(.)....    |
000095a0  20 20 cb 0d 04 f0 10 20  20 20 20 20 20 c9 20 32  |  .....      . 2|
000095b0  35 36 3a 0d 04 f1 26 20  20 20 20 20 20 c8 8e 20  |56:...&      .. |
000095c0  63 68 61 72 74 79 70 65  25 28 46 69 65 6c 64 6e  |chartype%(Fieldn|
000095d0  75 6d 62 65 72 25 29 20  ca 0d 04 f2 4a 20 20 20  |umber%) ....J   |
000095e0  20 20 20 20 20 c9 20 30  2c 31 2c 32 2c 33 2c 34  |     . 0,1,2,3,4|
000095f0  2c 35 2c 36 2c 37 2c 38  2c 33 36 2c 33 39 2c 34  |,5,6,7,8,36,39,4|
00009600  36 2c 34 37 2c 34 38 2c  34 39 2c 35 30 2c 35 31  |6,47,48,49,50,51|
00009610  2c 35 32 2c 35 33 2c 35  34 2c 35 35 2c 35 36 2c  |,52,53,54,55,56,|
00009620  35 37 3a 0d 04 f3 1c 20  20 20 20 20 20 20 20 f2  |57:....        .|
00009630  69 6e 76 65 72 74 28 77  69 25 2c 69 63 25 29 0d  |invert(wi%,ic%).|
00009640  04 f4 31 20 20 20 20 20  20 20 20 f2 75 70 64 61  |..1        .upda|
00009650  74 65 5f 73 65 6c 65 63  74 69 6f 6e 28 a4 73 65  |te_selection(.se|
00009660  6c 65 63 74 65 64 28 77  69 25 2c 69 63 25 29 29  |lected(wi%,ic%))|
00009670  0d 04 f5 7d 20 20 20 20  20 20 20 20 c9 20 39 2c  |...}        . 9,|
00009680  31 30 2c 31 31 2c 31 32  2c 31 33 2c 31 34 2c 31  |10,11,12,13,14,1|
00009690  35 2c 31 36 2c 31 37 2c  31 38 2c 31 39 2c 32 30  |5,16,17,18,19,20|
000096a0  2c 32 31 2c 32 32 2c 32  33 2c 32 34 2c 32 35 2c  |,21,22,23,24,25,|
000096b0  32 36 2c 32 37 2c 32 38  2c 32 39 2c 33 30 3a f2  |26,27,28,29,30:.|
000096c0  6b 65 79 70 61 64 5f 63  6c 69 63 6b 28 77 69 25  |keypad_click(wi%|
000096d0  2c 63 68 61 72 74 79 70  65 25 28 46 69 65 6c 64  |,chartype%(Field|
000096e0  6e 75 6d 62 65 72 25 29  2d 39 2c 31 29 0d 04 f6  |number%)-9,1)...|
000096f0  0b 20 20 20 20 20 20 cb  0d 04 f7 11 20 20 20 20  |.      .....    |
00009700  20 20 c9 20 31 30 32 34  3a 0d 04 f8 13 20 20 20  |  . 1024:....   |
00009710  20 20 20 e7 20 a6 28 2d  33 29 20 8c 0d 04 f9 2e  |   . .(-3) .....|
00009720  20 20 20 20 20 20 20 20  c8 99 20 22 57 69 6d 70  |        .. "Wimp|
00009730  5f 47 65 74 43 61 72 65  74 50 6f 73 69 74 69 6f  |_GetCaretPositio|
00009740  6e 22 2c 2c 62 6c 6f 63  6b 25 0d 04 fa 24 20 20  |n",,block%...$  |
00009750  20 20 20 20 20 20 77 69  25 3d 21 62 6c 6f 63 6b  |      wi%=!block|
00009760  25 3a 69 63 25 3d 62 6c  6f 63 6b 25 21 34 0d 04  |%:ic%=block%!4..|
00009770  fb 14 20 20 20 20 20 20  20 20 c8 8e 20 77 69 25  |..        .. wi%|
00009780  20 ca 0d 04 fc 28 20 20  20 20 20 20 20 20 20 20  | ....(          |
00009790  c9 20 6d 61 74 63 68 57  25 3a e7 20 69 63 25 3c  |. matchW%:. ic%<|
000097a0  3e 30 20 8c 20 77 69 25  3d 30 0d 04 fd 2a 20 20  |>0 . wi%=0...*  |
000097b0  20 20 20 20 20 20 20 20  c9 20 6b 65 79 70 61 64  |        . keypad|
000097c0  57 25 3a e7 20 69 63 25  3c 3e 32 39 20 8c 20 77  |W%:. ic%<>29 . w|
000097d0  69 25 3d 30 0d 04 fe 28  20 20 20 20 20 20 20 20  |i%=0...(        |
000097e0  20 20 c9 20 6d 65 72 67  65 57 25 3a e7 20 69 63  |  . mergeW%:. ic|
000097f0  25 3c 3e 33 20 8c 20 77  69 25 3d 30 0d 04 ff 15  |%<>3 . wi%=0....|
00009800  20 20 20 20 20 20 20 20  20 20 7f 3a 77 69 25 3d  |          .:wi%=|
00009810  30 0d 05 00 0d 20 20 20  20 20 20 20 20 cb 0d 05  |0....        ...|
00009820  01 16 20 20 20 20 20 20  20 20 e7 20 77 69 25 3c  |..        . wi%<|
00009830  3e 30 20 8c 0d 05 02 31  20 20 20 20 20 20 20 20  |>0 ....1        |
00009840  20 20 24 a4 74 65 78 74  28 77 69 25 2c 69 63 25  |  $.text(wi%,ic%|
00009850  29 2b 3d 54 61 67 24 28  46 69 65 6c 64 6e 75 6d  |)+=Tag$(Fieldnum|
00009860  62 65 72 25 29 0d 05 03  21 20 20 20 20 20 20 20  |ber%)...!       |
00009870  20 20 20 f2 73 65 74 5f  63 61 72 65 74 28 77 69  |   .set_caret(wi|
00009880  25 2c 69 63 25 29 0d 05  04 23 20 20 20 20 20 20  |%,ic%)...#      |
00009890  20 20 20 20 f2 72 65 64  72 61 77 5f 69 63 6f 6e  |    .redraw_icon|
000098a0  28 77 69 25 2c 69 63 25  29 0d 05 05 0d 20 20 20  |(wi%,ic%)....   |
000098b0  20 20 20 20 20 cd 0d 05  06 0d 20 20 20 20 20 20  |     .....      |
000098c0  20 20 cc 0d 05 07 28 20  20 20 20 20 20 20 20 c8  |  ....(        .|
000098d0  8e 20 63 68 61 72 74 79  70 65 25 28 46 69 65 6c  |. chartype%(Fiel|
000098e0  64 6e 75 6d 62 65 72 25  29 20 ca 0d 05 08 1e 20  |dnumber%) ..... |
000098f0  20 20 20 20 20 20 20 20  20 c9 20 30 2c 31 2c 32  |         . 0,1,2|
00009900  2c 33 2c 34 2c 35 2c 38  3a 0d 05 09 20 20 20 20  |,3,4,5,8:...    |
00009910  20 20 20 20 20 20 20 e7  20 46 69 65 6c 64 6e 75  |       . Fieldnu|
00009920  6d 62 65 72 25 3e 30 20  8c 0d 05 0a 3f 20 20 20  |mber%>0 ....?   |
00009930  20 20 20 20 20 20 20 20  20 21 62 6c 6f 63 6b 25  |         !block%|
00009940  3d 6d 61 69 6e 57 25 3a  c8 99 20 22 57 69 6d 70  |=mainW%:.. "Wimp|
00009950  5f 47 65 74 57 69 6e 64  6f 77 53 74 61 74 65 22  |_GetWindowState"|
00009960  2c 2c 62 6c 6f 63 6b 25  0d 05 0b 60 20 20 20 20  |,,block%...`    |
00009970  20 20 20 20 20 20 20 20  e7 20 41 63 63 65 73 73  |        . Access|
00009980  25 20 8c 20 c8 99 20 22  57 69 6d 70 5f 53 65 74  |% . .. "Wimp_Set|
00009990  43 61 72 65 74 50 6f 73  69 74 69 6f 6e 22 2c 6d  |CaretPosition",m|
000099a0  61 69 6e 57 25 2c 69 63  25 2c 78 25 2d 62 6c 6f  |ainW%,ic%,x%-blo|
000099b0  63 6b 25 21 34 2b 62 6c  6f 63 6b 25 21 32 30 2c  |ck%!4+block%!20,|
000099c0  79 25 2c 2d 31 2c 2d 31  0d 05 0c 0f 20 20 20 20  |y%,-1,-1....    |
000099d0  20 20 20 20 20 20 cd 0d  05 0d 7b 20 20 20 20 20  |      ....{     |
000099e0  20 20 20 20 20 c9 20 33  35 3a e7 20 c0 6c 69 6e  |     . 35:. .lin|
000099f0  6b 24 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |k$(Fieldnumber%)|
00009a00  2c 31 29 3d 22 40 22 20  8c 20 c8 99 20 22 4f 53  |,1)="@" . .. "OS|
00009a10  5f 43 4c 49 22 2c 22 46  69 6c 65 72 5f 4f 70 65  |_CLI","Filer_Ope|
00009a20  6e 44 69 72 20 22 2b c1  6c 69 6e 6b 24 28 46 69  |nDir "+.link$(Fi|
00009a30  65 6c 64 6e 75 6d 62 65  72 25 29 2c 32 29 20 8b  |eldnumber%),2) .|
00009a40  20 f2 73 6f 66 74 65 72  72 6f 72 28 22 22 2c 39  | .softerror("",9|
00009a50  31 29 0d 05 0e 4e 20 20  20 20 20 20 20 20 20 20  |1)...N          |
00009a60  c9 20 33 36 2c 33 37 2c  33 38 3a f2 65 64 69 74  |. 36,37,38:.edit|
00009a70  5f 62 6c 6f 62 28 52 45  43 25 2c 46 69 65 6c 64  |_blob(REC%,Field|
00009a80  6e 75 6d 62 65 72 25 2c  63 68 61 72 74 79 70 65  |number%,chartype|
00009a90  25 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 29 29  |%(Fieldnumber%))|
00009aa0  0d 05 0f 7f 20 20 20 20  20 20 20 20 20 20 c9 20  |....          . |
00009ab0  39 2c 31 30 2c 31 31 2c  31 32 2c 31 33 2c 31 34  |9,10,11,12,13,14|
00009ac0  2c 31 35 2c 31 36 2c 31  37 2c 31 38 2c 31 39 2c  |,15,16,17,18,19,|
00009ad0  32 30 2c 32 31 2c 32 32  2c 32 33 2c 32 34 2c 32  |20,21,22,23,24,2|
00009ae0  35 2c 32 36 2c 32 37 2c  32 38 2c 32 39 2c 33 30  |5,26,27,28,29,30|
00009af0  3a f2 6b 65 79 70 61 64  5f 63 6c 69 63 6b 28 77  |:.keypad_click(w|
00009b00  69 25 2c 63 68 61 72 74  79 70 65 25 28 46 69 65  |i%,chartype%(Fie|
00009b10  6c 64 6e 75 6d 62 65 72  25 29 2d 39 2c 34 29 0d  |ldnumber%)-9,4).|
00009b20  05 10 19 20 20 20 20 20  20 20 20 20 20 c9 20 33  |...          . 3|
00009b30  32 3a f2 6d 61 74 63 68  0d 05 11 1b 20 20 20 20  |2:.match....    |
00009b40  20 20 20 20 20 20 c9 20  33 33 3a f2 65 78 69 74  |      . 33:.exit|
00009b50  28 30 29 0d 05 12 1a 20  20 20 20 20 20 20 20 20  |(0)....         |
00009b60  20 c9 20 33 34 3a 71 75  69 74 25 3d b9 0d 05 13  | . 34:quit%=....|
00009b70  0d 20 20 20 20 20 20 20  20 cb 0d 05 14 0b 20 20  |.        .....  |
00009b80  20 20 20 20 cd 0d 05 15  09 20 20 20 20 cb 0d 05  |    .....    ...|
00009b90  16 07 20 20 cd 0d 05 17  05 cb 0d 05 18 05 e1 0d  |..  ............|
00009ba0  05 19 05 3a 0d 05 1a 18  dd 20 f2 73 65 74 5f 75  |...:..... .set_u|
00009bb0  70 5f 66 69 65 6c 64 5f  6d 65 6e 75 0d 05 1b 08  |p_field_menu....|
00009bc0  ea 20 49 25 0d 05 1c 31  f2 74 69 63 6b 5f 6f 6e  |. I%...1.tick_on|
00009bd0  65 28 6d 65 6e 75 25 28  35 29 2c 30 2c 4c 61 73  |e(menu%(5),0,Las|
00009be0  74 54 61 62 6c 65 25 2c  4c 61 73 74 54 61 62 6c  |tTable%,LastTabl|
00009bf0  65 25 2b 31 29 0d 05 1d  16 e7 20 46 69 65 6c 64  |e%+1)..... Field|
00009c00  6e 75 6d 62 65 72 25 3e  30 20 8c 0d 05 1e 18 20  |number%>0 ..... |
00009c10  20 f2 6c 69 74 28 6d 65  6e 75 25 28 31 29 2c 31  | .lit(menu%(1),1|
00009c20  2c b9 29 0d 05 1f 1d 20  20 24 41 6e 61 6c 79 73  |,.)....  $Analys|
00009c30  65 46 75 6e 63 25 3d 22  41 6e 61 6c 79 73 65 22  |eFunc%="Analyse"|
00009c40  0d 05 20 2d 20 20 24 46  69 65 6c 64 70 6f 73 25  |.. -  $Fieldpos%|
00009c50  3d 22 46 69 65 6c 64 3a  20 22 2b 54 61 67 24 28  |="Field: "+Tag$(|
00009c60  46 69 65 6c 64 6e 75 6d  62 65 72 25 29 0d 05 21  |Fieldnumber%)..!|
00009c70  1c 20 20 24 4c 69 6e 6b  54 69 74 6c 65 25 3d 46  |.  $LinkTitle%=F|
00009c80  69 65 6c 64 6e 61 6d 65  24 0d 05 22 27 20 20 24  |ieldname$.."'  $|
00009c90  43 61 6c 63 46 6f 72 6d  25 3d 54 61 67 24 28 46  |CalcForm%=Tag$(F|
00009ca0  69 65 6c 64 6e 75 6d 62  65 72 25 29 2b 22 3d 22  |ieldnumber%)+"="|
00009cb0  0d 05 23 10 20 20 e3 20  49 25 3d 30 20 b8 20 39  |..#.  . I%=0 . 9|
00009cc0  0d 05 24 1c 20 20 20 20  f2 6c 69 74 28 6d 65 6e  |..$.    .lit(men|
00009cd0  75 25 28 31 30 29 2c 49  25 2c a3 29 0d 05 25 0a  |u%(10),I%,.)..%.|
00009ce0  20 20 ed 20 49 25 0d 05  26 20 20 20 56 25 3d 63  |  . I%..&   V%=c|
00009cf0  68 61 72 74 79 70 65 25  28 46 69 65 6c 64 6e 75  |hartype%(Fieldnu|
00009d00  6d 62 65 72 25 29 0d 05  27 0d 20 20 c8 8e 20 56  |mber%)..'.  .. V|
00009d10  25 20 ca 0d 05 28 12 20  20 20 20 c9 20 35 2c 35  |% ...(.    . 5,5|
00009d20  30 2c 35 31 3a 0d 05 29  26 20 20 20 20 69 73 61  |0,51:..)&    isa|
00009d30  64 61 74 65 25 3d b9 3a  f2 6c 69 74 28 6d 65 6e  |date%=.:.lit(men|
00009d40  75 25 28 31 30 29 2c 31  2c b9 29 0d 05 2a 26 20  |u%(10),1,.)..*& |
00009d50  20 20 20 24 41 6e 61 6c  79 73 65 46 75 6e 63 25  |   $AnalyseFunc%|
00009d60  3d 22 41 6e 61 6c 79 73  65 20 6d 6f 6e 74 68 73  |="Analyse months|
00009d70  22 0d 05 2b 14 20 20 20  20 7f 3a 69 73 61 64 61  |"..+.    .:isada|
00009d80  74 65 25 3d a3 0d 05 2c  07 20 20 cb 0d 05 2d 24  |te%=...,.  ...-$|
00009d90  20 20 e7 20 a4 69 73 5f  61 5f 6b 65 79 28 46 69  |  . .is_a_key(Fi|
00009da0  65 6c 64 6e 75 6d 62 65  72 25 29 3e 3d 30 20 8c  |eldnumber%)>=0 .|
00009db0  0d 05 2e 1b 20 20 20 20  f2 6c 69 74 28 6d 65 6e  |....    .lit(men|
00009dc0  75 25 28 31 30 29 2c 31  2c b9 29 0d 05 2f 5f 20  |u%(10),1,.)../_ |
00009dd0  20 20 20 e7 20 69 73 61  64 61 74 65 25 3d a3 20  |   . isadate%=. |
00009de0  84 20 ac 20 a4 73 65 6c  65 63 74 65 64 28 6d 61  |. . .selected(ma|
00009df0  69 6e 57 25 2c 66 69 65  6c 64 25 28 46 69 65 6c  |inW%,field%(Fiel|
00009e00  64 6e 75 6d 62 65 72 25  29 29 20 8c 20 24 41 6e  |dnumber%)) . $An|
00009e10  61 6c 79 73 65 46 75 6e  63 25 3d 22 41 6e 61 6c  |alyseFunc%="Anal|
00009e20  79 73 65 20 69 6e 64 65  78 22 0d 05 30 07 20 20  |yse index"..0.  |
00009e30  cd 0d 05 31 0d 20 20 c8  8e 20 56 25 20 ca 0d 05  |...1.  .. V% ...|
00009e40  32 16 20 20 20 20 c9 20  30 2c 31 2c 32 2c 33 2c  |2.    . 0,1,2,3,|
00009e50  34 2c 35 3a 0d 05 33 21  20 20 20 20 f2 6c 69 74  |4,5:..3!    .lit|
00009e60  28 6d 65 6e 75 25 28 31  30 29 2c 30 2c 41 63 63  |(menu%(10),0,Acc|
00009e70  65 73 73 25 29 0d 05 34  21 20 20 20 20 f2 6c 69  |ess%)..4!    .li|
00009e80  74 28 6d 65 6e 75 25 28  31 30 29 2c 32 2c 41 63  |t(menu%(10),2,Ac|
00009e90  63 65 73 73 25 29 0d 05  35 21 20 20 20 20 f2 6c  |cess%)..5!    .l|
00009ea0  69 74 28 6d 65 6e 75 25  28 31 30 29 2c 33 2c 41  |it(menu%(10),3,A|
00009eb0  63 63 65 73 73 25 29 0d  05 36 21 20 20 20 20 f2  |ccess%)..6!    .|
00009ec0  6c 69 74 28 6d 65 6e 75  25 28 31 30 29 2c 35 2c  |lit(menu%(10),5,|
00009ed0  41 63 63 65 73 73 25 29  0d 05 37 21 20 20 20 20  |Access%)..7!    |
00009ee0  f2 6c 69 74 28 6d 65 6e  75 25 28 31 30 29 2c 39  |.lit(menu%(10),9|
00009ef0  2c 41 63 63 65 73 73 25  29 0d 05 38 34 20 20 20  |,Access%)..84   |
00009f00  20 4b 65 79 66 6c 64 30  25 3d 46 69 65 6c 64 6e  | Keyfld0%=Fieldn|
00009f10  75 6d 62 65 72 25 3a 4b  65 79 66 6c 64 31 25 3d  |umber%:Keyfld1%=|
00009f20  30 3a 24 46 32 64 6b 65  79 25 3d 22 22 0d 05 39  |0:$F2dkey%=""..9|
00009f30  23 20 20 20 20 24 46 31  64 6b 65 79 25 3d 54 61  |#    $F1dkey%=Ta|
00009f40  67 24 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |g$(Fieldnumber%)|
00009f50  0d 05 3a 28 20 20 20 20  6b 65 79 6c 69 6d 69 74  |..:(    keylimit|
00009f60  25 3d 54 65 78 74 4c 65  6e 67 74 68 25 3a 24 4b  |%=TextLength%:$K|
00009f70  65 79 4e 6f 25 3d 22 22  0d 05 3b 32 20 20 20 20  |eyNo%=""..;2    |
00009f80  57 44 25 28 29 3d 30 3a  57 44 25 28 30 29 3d 6b  |WD%()=0:WD%(0)=k|
00009f90  65 79 6c 69 6d 69 74 25  3a 6b 65 79 6c 65 6e 25  |eylimit%:keylen%|
00009fa0  3d 6b 65 79 6c 69 6d 69  74 25 0d 05 3c 12 20 20  |=keylimit%..<.  |
00009fb0  20 20 e3 20 4a 25 3d 30  20 b8 20 33 0d 05 3d 1f  |  . J%=0 . 3..=.|
00009fc0  20 20 20 20 20 20 24 57  6b 65 79 25 28 4a 25 29  |      $Wkey%(J%)|
00009fd0  3d c3 28 57 44 25 28 4a  25 29 29 0d 05 3e 0c 20  |=.(WD%(J%))..>. |
00009fe0  20 20 20 ed 20 4a 25 0d  05 3f 2a 20 20 20 20 24  |   . J%..?*    $|
00009ff0  43 68 61 6e 67 65 54 69  74 6c 65 25 3d 22 46 69  |ChangeTitle%="Fi|
0000a000  65 6c 64 3a 20 22 2b 46  69 65 6c 64 6e 61 6d 65  |eld: "+Fieldname|
0000a010  24 0d 05 40 1d 20 20 20  20 24 a4 74 65 78 74 28  |$..@.    $.text(|
0000a020  63 68 61 6e 67 65 57 25  2c 31 29 3d 22 22 0d 05  |changeW%,1)=""..|
0000a030  41 2b 20 20 20 20 e7 20  ac 20 63 6f 6d 6d 6f 6e  |A+    . . common|
0000a040  25 20 8c 20 24 a4 74 65  78 74 28 63 68 61 6e 67  |% . $.text(chang|
0000a050  65 57 25 2c 33 29 3d 22  22 0d 05 42 14 20 20 20  |eW%,3)=""..B.   |
0000a060  20 f2 6c 69 6e 6b 5f 73  74 61 74 75 73 0d 05 43  | .link_status..C|
0000a070  0c 20 20 20 20 c9 20 36  3a 0d 05 44 21 20 20 20  |.    . 6:..D!   |
0000a080  20 f2 6c 69 74 28 6d 65  6e 75 25 28 31 30 29 2c  | .lit(menu%(10),|
0000a090  34 2c 4d 6f 64 69 66 79  25 29 0d 05 45 21 20 20  |4,Modify%)..E!  |
0000a0a0  20 20 f2 6c 69 74 28 6d  65 6e 75 25 28 31 30 29  |  .lit(menu%(10)|
0000a0b0  2c 33 2c 41 63 63 65 73  73 25 29 0d 05 46 24 20  |,3,Access%)..F$ |
0000a0c0  20 20 20 f2 63 61 6c 63  5f 6c 69 6e 6b 28 22 43  |   .calc_link("C|
0000a0d0  61 6c 63 75 6c 61 74 69  6f 6e 73 22 2c 36 29 0d  |alculations",6).|
0000a0e0  05 47 14 20 20 20 20 f2  6c 69 6e 6b 5f 73 74 61  |.G.    .link_sta|
0000a0f0  74 75 73 0d 05 48 0c 20  20 20 20 c9 20 37 3a 0d  |tus..H.    . 7:.|
0000a100  05 49 21 20 20 20 20 f2  6c 69 74 28 6d 65 6e 75  |.I!    .lit(menu|
0000a110  25 28 31 30 29 2c 34 2c  4d 6f 64 69 66 79 25 29  |%(10),4,Modify%)|
0000a120  0d 05 4a 21 20 20 20 20  f2 6c 69 74 28 6d 65 6e  |..J!    .lit(men|
0000a130  75 25 28 31 30 29 2c 33  2c 41 63 63 65 73 73 25  |u%(10),3,Access%|
0000a140  29 0d 05 4b 26 20 20 20  20 f2 63 61 6c 63 5f 6c  |)..K&    .calc_l|
0000a150  69 6e 6b 28 22 43 6f 6d  62 69 6e 65 20 66 69 65  |ink("Combine fie|
0000a160  6c 64 73 22 2c 37 29 0d  05 4c 14 20 20 20 20 f2  |lds",7)..L.    .|
0000a170  6c 69 6e 6b 5f 73 74 61  74 75 73 0d 05 4d 2e 20  |link_status..M. |
0000a180  20 20 20 c9 20 34 36 2c  34 37 2c 34 38 2c 34 39  |   . 46,47,48,49|
0000a190  2c 35 30 2c 35 31 2c 35  32 2c 35 33 2c 35 34 2c  |,50,51,52,53,54,|
0000a1a0  35 35 2c 35 36 2c 35 37  3a 0d 05 4e 11 20 20 20  |55,56,57:..N.   |
0000a1b0  20 e7 20 56 25 3d 34 37  20 8c 0d 05 4f 23 20 20  | . V%=47 ...O#  |
0000a1c0  20 20 20 20 f2 6c 69 74  28 6d 65 6e 75 25 28 31  |    .lit(menu%(1|
0000a1d0  30 29 2c 34 2c 4d 6f 64  69 66 79 25 29 0d 05 50  |0),4,Modify%)..P|
0000a1e0  29 20 20 20 20 20 20 f2  63 61 6c 63 5f 6c 69 6e  |)      .calc_lin|
0000a1f0  6b 28 22 53 65 74 20 62  61 73 65 20 76 61 6c 75  |k("Set base valu|
0000a200  65 22 2c 34 37 29 0d 05  51 09 20 20 20 20 cd 0d  |e",47)..Q.    ..|
0000a210  05 52 21 20 20 20 20 f2  6c 69 74 28 6d 65 6e 75  |.R!    .lit(menu|
0000a220  25 28 31 30 29 2c 30 2c  41 63 63 65 73 73 25 29  |%(10),0,Access%)|
0000a230  0d 05 53 34 20 20 20 20  4b 65 79 66 6c 64 30 25  |..S4    Keyfld0%|
0000a240  3d 46 69 65 6c 64 6e 75  6d 62 65 72 25 3a 4b 65  |=Fieldnumber%:Ke|
0000a250  79 66 6c 64 31 25 3d 30  3a 24 46 32 64 6b 65 79  |yfld1%=0:$F2dkey|
0000a260  25 3d 22 22 0d 05 54 74  20 20 20 20 e7 20 46 69  |%=""..Tt    . Fi|
0000a270  65 6c 64 6e 61 6d 65 24  3c 3e 54 61 67 24 28 46  |eldname$<>Tag$(F|
0000a280  69 65 6c 64 6e 75 6d 62  65 72 25 29 20 8c 20 24  |ieldnumber%) . $|
0000a290  46 31 64 6b 65 79 25 3d  c0 46 69 65 6c 64 6e 61  |F1dkey%=.Fieldna|
0000a2a0  6d 65 24 2c 38 29 2b 22  20 28 22 2b 54 61 67 24  |me$,8)+" ("+Tag$|
0000a2b0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 2b 22  |(Fieldnumber%)+"|
0000a2c0  29 22 20 8b 20 24 46 31  64 6b 65 79 25 3d 46 69  |)" . $F1dkey%=Fi|
0000a2d0  65 6c 64 6e 61 6d 65 24  0d 05 55 28 20 20 20 20  |eldname$..U(    |
0000a2e0  6b 65 79 6c 69 6d 69 74  25 3d 54 65 78 74 4c 65  |keylimit%=TextLe|
0000a2f0  6e 67 74 68 25 3a 24 4b  65 79 4e 6f 25 3d 22 22  |ngth%:$KeyNo%=""|
0000a300  0d 05 56 32 20 20 20 20  57 44 25 28 29 3d 30 3a  |..V2    WD%()=0:|
0000a310  57 44 25 28 30 29 3d 6b  65 79 6c 69 6d 69 74 25  |WD%(0)=keylimit%|
0000a320  3a 6b 65 79 6c 65 6e 25  3d 6b 65 79 6c 69 6d 69  |:keylen%=keylimi|
0000a330  74 25 0d 05 57 12 20 20  20 20 e3 20 4a 25 3d 30  |t%..W.    . J%=0|
0000a340  20 b8 20 33 0d 05 58 1f  20 20 20 20 20 20 24 57  | . 3..X.      $W|
0000a350  6b 65 79 25 28 4a 25 29  3d c3 28 57 44 25 28 4a  |key%(J%)=.(WD%(J|
0000a360  25 29 29 0d 05 59 0c 20  20 20 20 ed 20 4a 25 0d  |%))..Y.    . J%.|
0000a370  05 5a 10 20 20 20 20 c9  20 33 36 2c 33 39 3a 0d  |.Z.    . 36,39:.|
0000a380  05 5b 44 20 20 20 20 e7  20 a4 62 6c 6f 62 5f 70  |.[D    . .blob_p|
0000a390  61 74 68 28 a3 2c 24 64  61 74 61 62 61 73 65 25  |ath(.,$database%|
0000a3a0  2c 52 45 43 25 2c 46 69  65 6c 64 6e 75 6d 62 65  |,REC%,Fieldnumbe|
0000a3b0  72 25 2c 56 25 2c 6f 62  6a 65 63 74 24 29 3e 3d  |r%,V%,object$)>=|
0000a3c0  30 20 8c 0d 05 5c 23 20  20 20 20 20 20 f2 6c 69  |0 ...\#      .li|
0000a3d0  74 28 6d 65 6e 75 25 28  31 30 29 2c 36 2c 41 63  |t(menu%(10),6,Ac|
0000a3e0  63 65 73 73 25 29 0d 05  5d 1d 20 20 20 20 20 20  |cess%)..].      |
0000a3f0  f2 6c 69 74 28 6d 65 6e  75 25 28 31 30 29 2c 37  |.lit(menu%(10),7|
0000a400  2c b9 29 0d 05 5e 1d 20  20 20 20 20 20 f2 6c 69  |,.)..^.      .li|
0000a410  74 28 6d 65 6e 75 25 28  31 30 29 2c 38 2c b9 29  |t(menu%(10),8,.)|
0000a420  0d 05 5f 1f 20 20 20 20  20 20 24 53 61 76 65 4e  |.._.      $SaveN|
0000a430  61 6d 65 25 3d 22 54 65  78 74 46 69 6c 65 22 0d  |ame%="TextFile".|
0000a440  05 60 34 20 20 20 20 20  20 24 53 61 76 65 53 70  |.`4      $SaveSp|
0000a450  72 69 74 65 25 3d 22 73  66 69 6c 65 5f 66 66 66  |rite%="sfile_fff|
0000a460  3b 50 70 74 72 5f 68 61  6e 64 2c 31 32 2c 38 3b  |;Pptr_hand,12,8;|
0000a470  42 33 22 0d 05 61 1f 20  20 20 20 20 20 73 61 76  |B3"..a.      sav|
0000a480  65 66 75 6e 63 24 3d 22  53 61 76 65 20 74 65 78  |efunc$="Save tex|
0000a490  74 22 0d 05 62 09 20 20  20 20 cd 0d 05 63 10 20  |t"..b.    ...c. |
0000a4a0  20 20 20 c9 20 33 37 2c  34 30 3a 0d 05 64 44 20  |   . 37,40:..dD |
0000a4b0  20 20 20 e7 20 a4 62 6c  6f 62 5f 70 61 74 68 28  |   . .blob_path(|
0000a4c0  a3 2c 24 64 61 74 61 62  61 73 65 25 2c 52 45 43  |.,$database%,REC|
0000a4d0  25 2c 46 69 65 6c 64 6e  75 6d 62 65 72 25 2c 56  |%,Fieldnumber%,V|
0000a4e0  25 2c 6f 62 6a 65 63 74  24 29 3e 3d 30 20 8c 0d  |%,object$)>=0 ..|
0000a4f0  05 65 23 20 20 20 20 20  20 f2 6c 69 74 28 6d 65  |.e#      .lit(me|
0000a500  6e 75 25 28 31 30 29 2c  36 2c 41 63 63 65 73 73  |nu%(10),6,Access|
0000a510  25 29 0d 05 66 1d 20 20  20 20 20 20 f2 6c 69 74  |%)..f.      .lit|
0000a520  28 6d 65 6e 75 25 28 31  30 29 2c 37 2c b9 29 0d  |(menu%(10),7,.).|
0000a530  05 67 1d 20 20 20 20 20  20 f2 6c 69 74 28 6d 65  |.g.      .lit(me|
0000a540  6e 75 25 28 31 30 29 2c  38 2c b9 29 0d 05 68 1d  |nu%(10),8,.)..h.|
0000a550  20 20 20 20 20 20 24 53  61 76 65 4e 61 6d 65 25  |      $SaveName%|
0000a560  3d 22 53 70 72 69 74 65  22 0d 05 69 34 20 20 20  |="Sprite"..i4   |
0000a570  20 20 20 24 53 61 76 65  53 70 72 69 74 65 25 3d  |   $SaveSprite%=|
0000a580  22 73 66 69 6c 65 5f 66  66 39 3b 50 70 74 72 5f  |"sfile_ff9;Pptr_|
0000a590  68 61 6e 64 2c 31 32 2c  38 3b 42 33 22 0d 05 6a  |hand,12,8;B3"..j|
0000a5a0  21 20 20 20 20 20 20 73  61 76 65 66 75 6e 63 24  |!      savefunc$|
0000a5b0  3d 22 53 61 76 65 20 73  70 72 69 74 65 22 0d 05  |="Save sprite"..|
0000a5c0  6b 09 20 20 20 20 cd 0d  05 6c 0d 20 20 20 20 c9  |k.    ...l.    .|
0000a5d0  20 33 38 3a 0d 05 6d 44  20 20 20 20 e7 20 a4 62  | 38:..mD    . .b|
0000a5e0  6c 6f 62 5f 70 61 74 68  28 a3 2c 24 64 61 74 61  |lob_path(.,$data|
0000a5f0  62 61 73 65 25 2c 52 45  43 25 2c 46 69 65 6c 64  |base%,REC%,Field|
0000a600  6e 75 6d 62 65 72 25 2c  56 25 2c 6f 62 6a 65 63  |number%,V%,objec|
0000a610  74 24 29 3e 3d 30 20 8c  0d 05 6e 23 20 20 20 20  |t$)>=0 ...n#    |
0000a620  20 20 f2 6c 69 74 28 6d  65 6e 75 25 28 31 30 29  |  .lit(menu%(10)|
0000a630  2c 36 2c 41 63 63 65 73  73 25 29 0d 05 6f 1d 20  |,6,Access%)..o. |
0000a640  20 20 20 20 20 f2 6c 69  74 28 6d 65 6e 75 25 28  |     .lit(menu%(|
0000a650  31 30 29 2c 37 2c b9 29  0d 05 70 1d 20 20 20 20  |10),7,.)..p.    |
0000a660  20 20 f2 6c 69 74 28 6d  65 6e 75 25 28 31 30 29  |  .lit(menu%(10)|
0000a670  2c 38 2c b9 29 0d 05 71  1f 20 20 20 20 20 20 24  |,8,.)..q.      $|
0000a680  53 61 76 65 4e 61 6d 65  25 3d 22 44 72 61 77 46  |SaveName%="DrawF|
0000a690  69 6c 65 22 0d 05 72 34  20 20 20 20 20 20 24 53  |ile"..r4      $S|
0000a6a0  61 76 65 53 70 72 69 74  65 25 3d 22 73 66 69 6c  |aveSprite%="sfil|
0000a6b0  65 5f 61 66 66 3b 50 70  74 72 5f 68 61 6e 64 2c  |e_aff;Pptr_hand,|
0000a6c0  31 32 2c 38 3b 42 33 22  0d 05 73 1f 20 20 20 20  |12,8;B3"..s.    |
0000a6d0  20 20 73 61 76 65 66 75  6e 63 24 3d 22 53 61 76  |  savefunc$="Sav|
0000a6e0  65 20 64 72 61 77 22 0d  05 74 09 20 20 20 20 cd  |e draw"..t.    .|
0000a6f0  0d 05 75 07 20 20 cb 0d  05 76 31 20 20 cc 20 f2  |..u.  ...v1  . .|
0000a700  6c 69 74 28 6d 65 6e 75  25 28 31 29 2c 31 2c a3  |lit(menu%(1),1,.|
0000a710  29 3a 24 46 69 65 6c 64  70 6f 73 25 3d 22 46 69  |):$Fieldpos%="Fi|
0000a720  65 6c 64 3a 20 27 27 22  0d 05 77 05 cd 0d 05 78  |eld: ''"..w....x|
0000a730  05 e1 0d 05 79 05 3a 0d  05 7a 1d dd 20 f2 75 70  |....y.:..z.. .up|
0000a740  64 61 74 65 5f 73 65 6c  65 63 74 69 6f 6e 28 61  |date_selection(a|
0000a750  64 64 25 29 0d 05 7b 13  ea 20 50 25 2c 53 50 25  |dd%)..{.. P%,SP%|
0000a760  2c 46 25 2c 53 46 25 0d  05 7c 22 46 25 3d 46 69  |,F%,SF%..|"F%=Fi|
0000a770  65 6c 64 6e 75 6d 62 65  72 25 3a 53 46 25 3d 28  |eldnumber%:SF%=(|
0000a780  46 25 20 84 20 31 32 38  29 0d 05 7d 2d 66 69 65  |F% . 128)..}-fie|
0000a790  6c 64 24 3d c3 7e 28 46  25 29 3a e7 20 46 25 3c  |ld$=.~(F%):. F%<|
0000a7a0  31 36 20 8c 20 66 69 65  6c 64 24 3d 22 30 22 2b  |16 . field$="0"+|
0000a7b0  66 69 65 6c 64 24 0d 05  7e 32 73 66 69 65 6c 64  |field$..~2sfield|
0000a7c0  24 3d c3 7e 28 53 46 25  29 3a e7 20 53 46 25 3c  |$=.~(SF%):. SF%<|
0000a7d0  31 36 20 8c 20 73 66 69  65 6c 64 24 3d 22 30 22  |16 . sfield$="0"|
0000a7e0  2b 73 66 69 65 6c 64 24  0d 05 7f 0c e7 20 61 64  |+sfield$..... ad|
0000a7f0  64 25 20 8c 0d 05 80 3b  20 20 e7 20 a6 28 2d 31  |d% ....;  . .(-1|
0000a800  29 20 8c 20 70 72 69 6e  74 6f 72 64 65 72 24 2b  |) . printorder$+|
0000a810  3d 73 66 69 65 6c 64 24  20 8b 20 70 72 69 6e 74  |=sfield$ . print|
0000a820  6f 72 64 65 72 24 2b 3d  66 69 65 6c 64 24 20 0d  |order$+=field$ .|
0000a830  05 81 2a 20 20 f2 65 6e  61 62 6c 65 5f 72 6f 77  |..*  .enable_row|
0000a840  28 63 61 6c 63 72 6f 77  25 3f 46 69 65 6c 64 6e  |(calcrow%?Fieldn|
0000a850  75 6d 62 65 72 25 2c b9  29 0d 05 82 18 20 20 f2  |umber%,.)....  .|
0000a860  6c 69 74 28 6d 65 6e 75  25 28 36 29 2c 37 2c b9  |lit(menu%(6),7,.|
0000a870  29 0d 05 83 18 20 20 f2  6c 69 74 28 6d 65 6e 75  |)....  .lit(menu|
0000a880  25 28 36 29 2c 38 2c b9  29 0d 05 84 07 20 20 cc  |%(6),8,.)....  .|
0000a890  0d 05 85 07 20 20 f5 0d  05 86 24 20 20 20 20 50  |....  ....$    P|
0000a8a0  25 3d a7 70 72 69 6e 74  6f 72 64 65 72 24 2c 66  |%=.printorder$,f|
0000a8b0  69 65 6c 64 24 2c 50 25  2b 31 29 0d 05 87 1d 20  |ield$,P%+1).... |
0000a8c0  20 fd 20 28 28 50 25 2d  31 29 20 83 20 32 29 3d  | . ((P%-1) . 2)=|
0000a8d0  30 20 84 20 50 25 3d 30  0d 05 88 0e 20 20 e7 20  |0 . P%=0....  . |
0000a8e0  50 25 3e 30 20 8c 0d 05  89 39 20 20 20 20 70 72  |P%>0 ....9    pr|
0000a8f0  69 6e 74 6f 72 64 65 72  24 3d c0 70 72 69 6e 74  |intorder$=.print|
0000a900  6f 72 64 65 72 24 2c 50  25 2d 31 29 2b c1 70 72  |order$,P%-1)+.pr|
0000a910  69 6e 74 6f 72 64 65 72  24 2c 50 25 2b 32 29 0d  |intorder$,P%+2).|
0000a920  05 8a 2c 20 20 20 20 f2  65 6e 61 62 6c 65 5f 72  |..,    .enable_r|
0000a930  6f 77 28 63 61 6c 63 72  6f 77 25 3f 46 69 65 6c  |ow(calcrow%?Fiel|
0000a940  64 6e 75 6d 62 65 72 25  2c a3 29 0d 05 8b 09 20  |dnumber%,.).... |
0000a950  20 20 20 cc 0d 05 8c 09  20 20 20 20 f5 0d 05 8d  |   .....    ....|
0000a960  29 20 20 20 20 20 20 53  50 25 3d a7 70 72 69 6e  |)      SP%=.prin|
0000a970  74 6f 72 64 65 72 24 2c  73 66 69 65 6c 64 24 2c  |torder$,sfield$,|
0000a980  53 50 25 2b 31 29 0d 05  8e 21 20 20 20 20 fd 20  |SP%+1)...!    . |
0000a990  28 28 53 50 25 2d 31 29  20 83 20 32 29 3d 30 20  |((SP%-1) . 2)=0 |
0000a9a0  84 20 53 50 25 3d 30 0d  05 8f 11 20 20 20 20 e7  |. SP%=0....    .|
0000a9b0  20 53 50 25 3e 30 20 8c  0d 05 90 3d 20 20 20 20  | SP%>0 ....=    |
0000a9c0  20 20 70 72 69 6e 74 6f  72 64 65 72 24 3d c0 70  |  printorder$=.p|
0000a9d0  72 69 6e 74 6f 72 64 65  72 24 2c 53 50 25 2d 31  |rintorder$,SP%-1|
0000a9e0  29 2b c1 70 72 69 6e 74  6f 72 64 65 72 24 2c 53  |)+.printorder$,S|
0000a9f0  50 25 2b 32 29 0d 05 91  2e 20 20 20 20 20 20 f2  |P%+2)....      .|
0000aa00  65 6e 61 62 6c 65 5f 72  6f 77 28 63 61 6c 63 72  |enable_row(calcr|
0000aa10  6f 77 25 3f 46 69 65 6c  64 6e 75 6d 62 65 72 25  |ow%?Fieldnumber%|
0000aa20  2c a3 29 0d 05 92 0c 20  20 20 20 cd 20 20 20 0d  |,.)....    .   .|
0000aa30  05 93 07 20 20 cd 0d 05  94 18 20 20 e7 20 70 72  |...  .....  . pr|
0000aa40  69 6e 74 6f 72 64 65 72  24 3d 22 22 20 8c 0d 05  |intorder$="" ...|
0000aa50  95 1a 20 20 20 20 f2 6c  69 74 28 6d 65 6e 75 25  |..    .lit(menu%|
0000aa60  28 36 29 2c 37 2c a3 29  0d 05 96 1a 20 20 20 20  |(6),7,.)....    |
0000aa70  f2 6c 69 74 28 6d 65 6e  75 25 28 36 29 2c 38 2c  |.lit(menu%(6),8,|
0000aa80  a3 29 0d 05 97 07 20 20  cd 0d 05 98 05 cd 0d 05  |.)....  ........|
0000aa90  99 05 e1 0d 05 9a 05 3a  0d 05 9b 12 dd 20 f2 70  |.......:..... .p|
0000aaa0  72 69 6e 74 5f 63 6c 69  63 6b 0d 05 9c 14 c8 8e  |rint_click......|
0000aab0  20 28 62 25 20 80 20 25  31 31 31 29 20 ca 0d 05  | (b% . %111) ...|
0000aac0  9d 45 20 20 c9 20 32 3a  e7 20 a4 73 65 6c 65 63  |.E  . 2:. .selec|
0000aad0  74 65 64 28 70 72 69 6e  74 57 25 2c 32 36 29 20  |ted(printW%,26) |
0000aae0  8c 20 f2 73 68 6f 77 5f  6d 65 6e 75 28 6c 61 62  |. .show_menu(lab|
0000aaf0  65 6c 57 25 2c 78 25 2d  35 30 30 2c 79 25 2b 32  |elW%,x%-500,y%+2|
0000ab00  30 30 29 0d 05 9e 0c 20  20 c9 20 31 2c 34 3a 0d  |00)....  . 1,4:.|
0000ab10  05 9f 0e 20 20 c8 8e 20  69 63 25 20 ca 0d 05 a0  |...  .. ic% ....|
0000ab20  13 20 20 20 20 c9 20 32  33 2c 32 34 2c 32 35 3a  |.    . 23,24,25:|
0000ab30  0d 05 a1 36 20 20 20 20  f2 69 63 6f 6e 5f 62 69  |...6    .icon_bi|
0000ab40  74 28 32 32 2c 70 72 69  6e 74 57 25 2c 31 35 2c  |t(22,printW%,15,|
0000ab50  a4 73 65 6c 65 63 74 65  64 28 70 72 69 6e 74 57  |.selected(printW|
0000ab60  25 2c 32 35 29 29 0d 05  a2 36 20 20 20 20 f2 69  |%,25))...6    .i|
0000ab70  63 6f 6e 5f 62 69 74 28  32 32 2c 70 72 69 6e 74  |con_bit(22,print|
0000ab80  57 25 2c 34 35 2c a4 73  65 6c 65 63 74 65 64 28  |W%,45,.selected(|
0000ab90  70 72 69 6e 74 57 25 2c  32 35 29 29 0d 05 a3 0d  |printW%,25))....|
0000aba0  20 20 20 20 c9 20 32 36  3a 0d 05 a4 36 20 20 20  |    . 26:...6   |
0000abb0  20 f2 69 63 6f 6e 5f 62  69 74 28 32 32 2c 70 72  | .icon_bit(22,pr|
0000abc0  69 6e 74 57 25 2c 31 35  2c a4 73 65 6c 65 63 74  |intW%,15,.select|
0000abd0  65 64 28 70 72 69 6e 74  57 25 2c 32 35 29 29 0d  |ed(printW%,25)).|
0000abe0  05 a5 36 20 20 20 20 f2  69 63 6f 6e 5f 62 69 74  |..6    .icon_bit|
0000abf0  28 32 32 2c 70 72 69 6e  74 57 25 2c 34 35 2c a4  |(22,printW%,45,.|
0000ac00  73 65 6c 65 63 74 65 64  28 70 72 69 6e 74 57 25  |selected(printW%|
0000ac10  2c 32 35 29 29 0d 05 a6  29 20 20 20 20 f2 73 68  |,25))...)    .sh|
0000ac20  6f 77 5f 6d 65 6e 75 28  6c 61 62 65 6c 57 25 2c  |ow_menu(labelW%,|
0000ac30  78 25 2d 35 30 30 2c 79  25 2b 32 30 30 29 0d 05  |x%-500,y%+200)..|
0000ac40  a7 3d 20 20 20 20 c9 20  32 38 3a f2 64 72 61 67  |.=    . 28:.drag|
0000ac50  5f 6f 70 74 69 6f 6e 73  28 22 3c 50 62 61 73 65  |_options("<Pbase|
0000ac60  24 44 69 72 3e 2e 52 65  73 6f 75 72 63 65 73 2e  |$Dir>.Resources.|
0000ac70  50 72 69 6e 74 4f 70 74  73 22 29 0d 05 a8 0d 20  |PrintOpts").... |
0000ac80  20 20 20 c9 20 32 30 3a  0d 05 a9 1e 20 20 20 20  |   . 20:....    |
0000ac90  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 70 72  |.close_window(pr|
0000aca0  69 6e 74 57 25 29 0d 05  aa 36 20 20 20 20 e7 20  |intW%)...6    . |
0000acb0  28 62 25 20 80 20 25 31  31 31 29 3d 31 20 8c 20  |(b% . %111)=1 . |
0000acc0  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 6d 61 74  |.open_window(mat|
0000acd0  63 68 57 25 29 3a f2 6d  61 74 63 68 0d 05 ab 07  |chW%):.match....|
0000ace0  20 20 cb 0d 05 ac 05 cb  0d 05 ad 05 e1 0d 05 ae  |  ..............|
0000acf0  05 3a 0d 05 af 1f dd 20  f2 6b 65 79 70 61 64 5f  |.:..... .keypad_|
0000ad00  63 6c 69 63 6b 28 77 69  25 2c 69 63 25 2c 62 25  |click(wi%,ic%,b%|
0000ad10  29 0d 05 b0 1f ea 20 68  61 6e 64 6c 65 25 2c 69  |)..... handle%,i|
0000ad20  63 6f 6e 25 2c 54 25 2c  4e 24 2c 64 61 74 65 24  |con%,T%,N$,date$|
0000ad30  0d 05 b1 1b f2 63 6c 6f  73 65 5f 77 69 6e 64 6f  |.....close_windo|
0000ad40  77 28 72 65 6c 61 74 65  57 25 29 0d 05 b2 38 e7  |w(relateW%)...8.|
0000ad50  20 66 6c 61 73 68 25 20  8c 20 f2 64 65 73 65 6c  | flash% . .desel|
0000ad60  65 63 74 28 6d 61 69 6e  57 25 2c 66 69 65 6c 64  |ect(mainW%,field|
0000ad70  25 28 66 6c 61 73 68 25  29 29 3a 66 6c 61 73 68  |%(flash%)):flash|
0000ad80  25 3d a3 0d 05 b3 53 e7  20 69 63 25 3c 3e 31 32  |%=....S. ic%<>12|
0000ad90  20 8c 20 e7 20 a4 76 61  6c 69 64 61 74 65 28 46  | . . .validate(F|
0000ada0  69 65 6c 64 6e 75 6d 62  65 72 25 2c 54 25 2c 4e  |ieldnumber%,T%,N|
0000adb0  24 29 3d a3 20 8c 20 e1  20 8b 20 f2 75 70 64 61  |$)=. . . . .upda|
0000adc0  74 65 5f 63 61 6c 63 73  28 46 69 65 6c 64 6e 75  |te_calcs(Fieldnu|
0000add0  6d 62 65 72 25 29 0d 05  b4 14 c8 8e 20 28 62 25  |mber%)...... (b%|
0000ade0  20 80 20 25 31 31 31 29  20 ca 0d 05 b5 0c 20 20  | . %111) .....  |
0000adf0  c9 20 31 2c 34 3a 0d 05  b6 24 20 20 e7 20 28 62  |. 1,4:...$  . (b|
0000ae00  25 20 80 20 25 31 31 31  29 3d 34 20 8c 20 7a 25  |% . %111)=4 . z%|
0000ae10  3d 31 20 8b 20 7a 25 3d  2d 31 0d 05 b7 0e 20 20  |=1 . z%=-1....  |
0000ae20  c8 8e 20 69 63 25 20 ca  0d 05 b8 2c 20 20 20 20  |.. ic% ....,    |
0000ae30  c9 20 30 3a f2 73 63 61  6e 28 7a 25 2c bb 28 24  |. 0:.scan(z%,.($|
0000ae40  a4 74 65 78 74 28 6b 65  79 70 61 64 57 25 2c 32  |.text(keypadW%,2|
0000ae50  33 29 29 29 0d 05 b9 13  20 20 20 20 c9 20 31 3a  |3)))....    . 1:|
0000ae60  73 74 6f 70 25 3d b9 0d  05 ba 25 20 20 20 20 c9  |stop%=....%    .|
0000ae70  20 32 3a 61 64 64 72 3d  a4 6d 6f 76 65 74 6f 28  | 2:addr=.moveto(|
0000ae80  6b 65 79 25 2c 74 6f 70  2c 7a 25 29 0d 05 bb 26  |key%,top,z%)...&|
0000ae90  20 20 20 20 c9 20 33 3a  61 64 64 72 3d a4 6d 6f  |    . 3:addr=.mo|
0000aea0  76 65 74 6f 28 6b 65 79  25 2c 74 6f 70 2c 2d 7a  |veto(key%,top,-z|
0000aeb0  25 29 0d 05 bc 26 20 20  20 20 c9 20 34 3a 61 64  |%)...&    . 4:ad|
0000aec0  64 72 3d a4 6d 6f 76 65  74 6f 28 6b 65 79 25 2c  |dr=.moveto(key%,|
0000aed0  61 64 64 72 2c 7a 25 29  0d 05 bd 27 20 20 20 20  |addr,z%)...'    |
0000aee0  c9 20 35 3a 61 64 64 72  3d a4 6d 6f 76 65 74 6f  |. 5:addr=.moveto|
0000aef0  28 6b 65 79 25 2c 61 64  64 72 2c 2d 7a 25 29 0d  |(key%,addr,-z%).|
0000af00  05 be 28 20 20 20 20 c9  20 36 3a 61 64 64 72 3d  |..(    . 6:addr=|
0000af10  a4 66 61 73 74 5f 77 69  6e 64 28 74 6f 70 2c 61  |.fast_wind(top,a|
0000af20  64 64 72 2c 7a 25 29 0d  05 bf 29 20 20 20 20 c9  |ddr,z%)...)    .|
0000af30  20 37 3a 61 64 64 72 3d  a4 66 61 73 74 5f 77 69  | 7:addr=.fast_wi|
0000af40  6e 64 28 74 6f 70 2c 61  64 64 72 2c 2d 7a 25 29  |nd(top,addr,-z%)|
0000af50  0d 05 c0 1b 20 20 20 20  c9 20 38 3a f2 6b 65 79  |....    . 8:.key|
0000af60  5f 73 65 6c 65 63 74 28  7a 25 29 0d 05 c1 1c 20  |_select(z%).... |
0000af70  20 20 20 c9 20 39 3a f2  6b 65 79 5f 73 65 6c 65  |   . 9:.key_sele|
0000af80  63 74 28 2d 7a 25 29 0d  05 c2 19 20 20 20 20 c9  |ct(-z%)....    .|
0000af90  20 31 30 3a f2 73 75 62  66 69 6c 65 28 7a 25 29  | 10:.subfile(z%)|
0000afa0  0d 05 c3 1a 20 20 20 20  c9 20 31 31 3a f2 73 75  |....    . 11:.su|
0000afb0  62 66 69 6c 65 28 2d 7a  25 29 0d 05 c4 2d 20 20  |bfile(-z%)...-  |
0000afc0  20 20 c9 20 31 32 3a f2  72 6f 74 61 74 65 3a 61  |  . 12:.rotate:a|
0000afd0  64 64 72 3d a4 6d 6f 76  65 74 6f 28 6b 65 79 25  |ddr=.moveto(key%|
0000afe0  2c 74 6f 70 2c 31 29 0d  05 c5 22 20 20 20 20 c9  |,top,1)..."    .|
0000aff0  20 31 33 3a f2 61 6c 6c  6f 77 5f 73 65 61 72 63  | 13:.allow_searc|
0000b000  68 28 77 69 25 2c 7a 25  29 0d 05 c6 0d 20 20 20  |h(wi%,z%)....   |
0000b010  20 c9 20 31 34 3a 0d 05  c7 19 20 20 20 20 f2 64  | . 14:....    .d|
0000b020  69 73 70 6c 61 79 28 6b  65 79 25 2c 2d 31 29 0d  |isplay(key%,-1).|
0000b030  05 c8 23 20 20 20 20 c9  20 31 35 3a 61 64 64 72  |..#    . 15:addr|
0000b040  3d a4 73 68 69 66 74 28  7a 25 2c 6b 65 79 25 2c  |=.shift(z%,key%,|
0000b050  30 29 0d 05 c9 11 20 20  20 20 e7 20 a6 28 2d 33  |0)....    . .(-3|
0000b060  29 20 8c 0d 05 ca 2a 20  20 20 20 20 20 61 64 64  |) ....*      add|
0000b070  72 3d a4 66 69 6e 64 28  22 23 22 2b c3 28 52 45  |r=.find("#"+.(RE|
0000b080  43 25 29 2c 6b 65 79 25  2c 30 2c b9 29 0d 05 cb  |C%),key%,0,.)...|
0000b090  1f 20 20 20 20 20 20 cc  20 f2 64 69 73 70 6c 61  |.      . .displa|
0000b0a0  79 28 6b 65 79 25 2c 61  64 64 72 29 0d 05 cc 09  |y(key%,addr)....|
0000b0b0  20 20 20 20 cd 0d 05 cd  24 20 20 20 20 c9 20 31  |    ....$    . 1|
0000b0c0  36 3a 61 64 64 72 3d a4  73 68 69 66 74 28 2d 7a  |6:addr=.shift(-z|
0000b0d0  25 2c 6b 65 79 25 2c 30  29 0d 05 ce 11 20 20 20  |%,key%,0)....   |
0000b0e0  20 e7 20 a6 28 2d 33 29  20 8c 0d 05 cf 2a 20 20  | . .(-3) ....*  |
0000b0f0  20 20 20 20 61 64 64 72  3d a4 66 69 6e 64 28 22  |    addr=.find("|
0000b100  23 22 2b c3 28 52 45 43  25 29 2c 6b 65 79 25 2c  |#"+.(REC%),key%,|
0000b110  30 2c b9 29 0d 05 d0 1f  20 20 20 20 20 20 cc 20  |0,.)....      . |
0000b120  f2 64 69 73 70 6c 61 79  28 6b 65 79 25 2c 61 64  |.display(key%,ad|
0000b130  64 72 29 0d 05 d1 09 20  20 20 20 cd 0d 05 d2 36  |dr)....    ....6|
0000b140  20 20 20 20 c9 20 31 37  3a 61 64 64 72 3d a4 73  |    . 17:addr=.s|
0000b150  68 69 66 74 28 30 2c 6b  65 79 25 2c 31 29 3a f2  |hift(0,key%,1):.|
0000b160  64 69 73 70 6c 61 79 28  6b 65 79 25 2c 61 64 64  |display(key%,add|
0000b170  72 29 0d 05 d3 16 20 20  20 20 c9 20 31 38 3a f2  |r)....    . 18:.|
0000b180  76 61 6c 5f 68 65 6c 70  0d 05 d4 36 20 20 20 20  |val_help...6    |
0000b190  c9 20 31 39 3a f2 63 68  65 63 6b 5f 63 68 61 6e  |. 19:.check_chan|
0000b1a0  67 65 3a f2 73 61 76 65  5f 6b 65 79 73 3a f2 73  |ge:.save_keys:.s|
0000b1b0  61 76 65 5f 61 6c 6c 5f  74 61 62 6c 65 73 0d 05  |ave_all_tables..|
0000b1c0  d5 13 20 20 20 20 c9 20  32 30 3a f2 73 74 6f 72  |..    . 20:.stor|
0000b1d0  65 0d 05 d6 16 20 20 20  20 c9 20 32 31 3a f2 72  |e....    . 21:.r|
0000b1e0  65 74 72 69 65 76 65 0d  05 d7 21 20 20 20 20 c9  |etrieve...!    .|
0000b1f0  20 32 32 3a f2 66 69 6c  74 65 72 28 6b 65 79 70  | 22:.filter(keyp|
0000b200  61 64 57 25 2c 32 32 29  0d 05 d8 0d 20 20 20 20  |adW%,22)....    |
0000b210  c9 20 32 38 3a 0d 05 d9  1e 20 20 20 20 53 24 3d  |. 28:....    S$=|
0000b220  24 a4 74 65 78 74 28 6b  65 79 70 61 64 57 25 2c  |$.text(keypadW%,|
0000b230  32 37 29 0d 05 da 23 20  20 20 20 c8 8e 20 63 68  |27)...#    .. ch|
0000b240  61 72 74 79 70 65 25 28  4b 46 25 28 6b 65 79 25  |artype%(KF%(key%|
0000b250  2c 30 29 29 20 ca 0d 05  db 14 20 20 20 20 20 20  |,0)) .....      |
0000b260  c9 20 35 2c 35 30 2c 35  31 3a 0d 05 dc 3f 20 20  |. 5,50,51:...?  |
0000b270  20 20 20 20 e7 20 a4 63  68 65 63 6b 5f 64 61 74  |    . .check_dat|
0000b280  65 28 53 24 2c 31 2c 64  61 74 65 24 29 3d b9 20  |e(S$,1,date$)=. |
0000b290  8c 20 53 24 3d a4 72 65  76 65 72 73 65 5f 64 61  |. S$=.reverse_da|
0000b2a0  74 65 28 64 61 74 65 24  29 0d 05 dd 09 20 20 20  |te(date$)....   |
0000b2b0  20 cb 0d 05 de 36 20 20  20 20 e7 20 53 24 3c 3e  | ....6    . S$<>|
0000b2c0  22 22 20 8c 20 61 64 64  72 3d a4 66 69 6e 64 28  |"" . addr=.find(|
0000b2d0  c0 53 24 2c 4b 4c 25 28  6b 65 79 25 29 29 2c 6b  |.S$,KL%(key%)),k|
0000b2e0  65 79 25 2c 31 2c b9 29  0d 05 df 10 20 20 20 20  |ey%,1,.)....    |
0000b2f0  e7 20 7a 25 3d 31 20 8c  0d 05 e0 21 20 20 20 20  |. z%=1 ....!    |
0000b300  20 20 e7 20 a4 73 65 6c  65 63 74 65 64 28 70 61  |  . .selected(pa|
0000b310  73 73 57 25 2c 39 29 20  8c 0d 05 e1 3d 20 20 20  |ssW%,9) ....=   |
0000b320  20 20 20 20 20 21 62 6c  6f 63 6b 25 3d 6b 65 79  |     !block%=key|
0000b330  70 61 64 57 25 3a c8 99  20 22 57 69 6d 70 5f 47  |padW%:.. "Wimp_G|
0000b340  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
0000b350  62 6c 6f 63 6b 25 0d 05  e2 39 20 20 20 20 20 20  |block%...9      |
0000b360  20 20 62 6c 6f 63 6b 25  21 31 32 3d 62 6c 6f 63  |  block%!12=bloc|
0000b370  6b 25 21 34 2b 36 36 30  3a 62 6c 6f 63 6b 25 21  |k%!4+660:block%!|
0000b380  31 36 3d 62 6c 6f 63 6b  25 21 38 2b 33 32 38 0d  |16=block%!8+328.|
0000b390  05 e3 23 20 20 20 20 20  20 20 20 62 6c 6f 63 6b  |..#        block|
0000b3a0  25 21 32 30 3d 30 3a 62  6c 6f 63 6b 25 21 32 34  |%!20=0:block%!24|
0000b3b0  3d 30 0d 05 e4 28 20 20  20 20 20 20 20 20 c8 99  |=0...(        ..|
0000b3c0  20 22 57 69 6d 70 5f 4f  70 65 6e 57 69 6e 64 6f  | "Wimp_OpenWindo|
0000b3d0  77 22 2c 2c 62 6c 6f 63  6b 25 0d 05 e5 25 20 20  |w",,block%...%  |
0000b3e0  20 20 20 20 20 20 cc 20  f2 63 6c 6f 73 65 5f 77  |      . .close_w|
0000b3f0  69 6e 64 6f 77 28 6b 65  79 70 61 64 57 25 29 0d  |indow(keypadW%).|
0000b400  05 e6 0b 20 20 20 20 20  20 cd 0d 05 e7 09 20 20  |...      .....  |
0000b410  20 20 cd 0d 05 e8 0d 20  20 20 20 c9 20 33 30 3a  |  .....    . 30:|
0000b420  0d 05 e9 23 20 20 20 20  e7 20 24 a4 74 65 78 74  |...#    . $.text|
0000b430  28 6b 65 79 70 61 64 57  25 2c 32 39 29 3c 3e 22  |(keypadW%,29)<>"|
0000b440  22 20 8c 0d 05 ea 44 20  20 20 20 20 20 46 69 6c  |" ....D      Fil|
0000b450  74 65 72 24 3d a4 70 61  72 73 65 28 24 a4 74 65  |ter$=.parse($.te|
0000b460  78 74 28 6b 65 79 70 61  64 57 25 2c 32 39 29 2c  |xt(keypadW%,29),|
0000b470  a4 73 65 6c 65 63 74 65  64 28 6b 65 79 70 61 64  |.selected(keypad|
0000b480  57 25 2c 33 32 29 29 0d  05 eb 13 20 20 20 20 20  |W%,32))....     |
0000b490  20 66 69 6c 74 65 72 25  3d b9 0d 05 ec 23 20 20  | filter%=....#  |
0000b4a0  20 20 20 20 61 64 64 72  3d a4 6d 6f 76 65 74 6f  |    addr=.moveto|
0000b4b0  28 6b 65 79 25 2c 74 6f  70 2c 7a 25 29 0d 05 ed  |(key%,top,z%)...|
0000b4c0  15 20 20 20 20 20 20 cc  20 66 69 6c 74 65 72 25  |.      . filter%|
0000b4d0  3d a3 0d 05 ee 09 20 20  20 20 cd 0d 05 ef 21 20  |=.....    ....! |
0000b4e0  20 20 20 c9 20 33 32 3a  f2 63 6f 6d 6d 6f 6e 63  |   . 32:.commonc|
0000b4f0  61 73 65 28 77 69 25 2c  69 63 25 29 0d 05 f0 48  |ase(wi%,ic%)...H|
0000b500  20 20 20 20 c9 20 33 37  3a c8 99 20 22 4f 53 5f  |    . 37:.. "OS_|
0000b510  42 79 74 65 22 2c 32 30  32 2c 30 2c 32 33 39 3a  |Byte",202,0,239:|
0000b520  f2 73 68 6f 77 5f 6d 65  6e 75 28 73 70 65 63 6d  |.show_menu(specm|
0000b530  65 6e 75 25 2c 6f 6c 64  78 25 2b 33 32 2c 6f 6c  |enu%,oldx%+32,ol|
0000b540  64 79 25 29 0d 05 f1 24  20 20 20 20 c9 20 33 38  |dy%)...$    . 38|
0000b550  3a f2 6f 70 65 6e 5f 77  69 6e 64 6f 77 28 73 70  |:.open_window(sp|
0000b560  65 63 69 61 6c 57 25 29  0d 05 f2 07 20 20 cb 0d  |ecialW%)....  ..|
0000b570  05 f3 05 cb 0d 05 f4 05  e1 0d 05 f5 05 3a 0d 05  |.............:..|
0000b580  f6 12 dd 20 f2 73 63 61  6e 28 7a 25 2c 73 25 29  |... .scan(z%,s%)|
0000b590  0d 05 f7 0b 73 74 6f 70  25 3d a3 0d 05 f8 05 f5  |....stop%=......|
0000b5a0  0d 05 f9 20 20 20 61 64  64 72 3d a4 6d 6f 76 65  |...   addr=.move|
0000b5b0  74 6f 28 6b 65 79 25 2c  61 64 64 72 2c 7a 25 29  |to(key%,addr,z%)|
0000b5c0  0d 05 fa 0e 20 20 4b 25  3d a6 28 73 25 29 0d 05  |....  K%=.(s%)..|
0000b5d0  fb 0b 20 20 f2 70 6f 6c  6c 0d 05 fc 0b fd 20 73  |..  .poll..... s|
0000b5e0  74 6f 70 25 0d 05 fd 05  e1 0d 05 fe 05 3a 0d 05  |top%.........:..|
0000b5f0  ff 0c dd 20 f2 73 74 6f  72 65 0d 06 00 0d ea 20  |... .store..... |
0000b600  77 69 25 2c 69 63 25 0d  06 01 26 c8 99 20 22 57  |wi%,ic%...&.. "W|
0000b610  69 6d 70 5f 47 65 74 43  61 72 65 74 50 6f 73 69  |imp_GetCaretPosi|
0000b620  74 69 6f 6e 22 2c 2c 62  6c 6f 63 6b 25 0d 06 02  |tion",,block%...|
0000b630  1c 77 69 25 3d 21 62 6c  6f 63 6b 25 3a 69 63 25  |.wi%=!block%:ic%|
0000b640  3d 62 6c 6f 63 6b 25 21  34 0d 06 03 2e e7 20 77  |=block%!4..... w|
0000b650  69 25 3d 6d 61 69 6e 57  25 20 8c 20 73 63 72 61  |i%=mainW% . scra|
0000b660  74 63 68 70 61 64 24 3d  24 a4 74 65 78 74 28 77  |tchpad$=$.text(w|
0000b670  69 25 2c 69 63 25 29 0d  06 04 05 e1 0d 06 05 05  |i%,ic%).........|
0000b680  3a 0d 06 06 0f dd 20 f2  72 65 74 72 69 65 76 65  |:..... .retrieve|
0000b690  0d 06 07 14 ea 20 77 69  25 2c 69 63 25 2c 66 69  |..... wi%,ic%,fi|
0000b6a0  65 6c 64 25 0d 06 08 26  c8 99 20 22 57 69 6d 70  |eld%...&.. "Wimp|
0000b6b0  5f 47 65 74 43 61 72 65  74 50 6f 73 69 74 69 6f  |_GetCaretPositio|
0000b6c0  6e 22 2c 2c 62 6c 6f 63  6b 25 0d 06 09 1c 77 69  |n",,block%....wi|
0000b6d0  25 3d 21 62 6c 6f 63 6b  25 3a 69 63 25 3d 62 6c  |%=!block%:ic%=bl|
0000b6e0  6f 63 6b 25 21 34 0d 06  0a 24 e7 20 73 63 72 61  |ock%!4...$. scra|
0000b6f0  74 63 68 70 61 64 24 3c  3e 22 22 20 80 20 77 69  |tchpad$<>"" . wi|
0000b700  25 3d 6d 61 69 6e 57 25  20 8c 0d 06 0b 1c 20 20  |%=mainW% .....  |
0000b710  66 69 65 6c 64 25 3d a4  67 65 74 5f 66 69 65 6c  |field%=.get_fiel|
0000b720  64 28 69 63 25 29 0d 06  0c 30 20 20 24 a4 74 65  |d(ic%)...0  $.te|
0000b730  78 74 28 77 69 25 2c 69  63 25 29 3d c0 73 63 72  |xt(wi%,ic%)=.scr|
0000b740  61 74 63 68 70 61 64 24  2c 6c 65 6e 25 28 66 69  |atchpad$,len%(fi|
0000b750  65 6c 64 25 29 29 0d 06  0d 1b 20 20 f2 72 65 64  |eld%))....  .red|
0000b760  72 61 77 5f 69 63 6f 6e  28 77 69 25 2c 69 63 25  |raw_icon(wi%,ic%|
0000b770  29 0d 06 0e 05 cd 0d 06  0f 05 e1 0d 06 10 05 3a  |)..............:|
0000b780  0d 06 11 2e f4 20 23 23  23 20 42 69 6e 61 72 79  |..... ### Binary|
0000b790  20 4c 61 72 67 65 20 4f  62 6a 65 63 74 73 20 28  | Large Objects (|
0000b7a0  42 2e 4c 2e 4f 2e 42 2e  73 29 20 23 23 23 0d 06  |B.L.O.B.s) ###..|
0000b7b0  12 05 3a 0d 06 13 2a dd  20 a4 62 6c 6f 62 5f 70  |..:...*. .blob_p|
0000b7c0  61 74 68 28 63 72 65 61  74 65 25 2c 66 24 2c 52  |ath(create%,f$,R|
0000b7d0  25 2c 46 25 2c 56 25 2c  f8 20 62 24 29 0d 06 14  |%,F%,V%,. b$)...|
0000b7e0  24 ea 20 4f 24 2c 6d 61  69 6e 24 2c 6c 65 76 65  |$. O$,main$,leve|
0000b7f0  6c 31 24 2c 6c 65 76 65  6c 32 24 2c 64 25 2c 4c  |l1$,level2$,d%,L|
0000b800  25 0d 06 15 0b c8 8e 20  56 25 20 ca 0d 06 16 18  |%...... V% .....|
0000b810  20 20 c9 20 33 36 2c 33  39 3a 4f 24 3d 22 2e 4d  |  . 36,39:O$=".M|
0000b820  65 6d 6f 22 0d 06 17 1a  20 20 c9 20 33 37 2c 34  |emo"....  . 37,4|
0000b830  30 3a 4f 24 3d 22 2e 53  70 72 69 74 65 22 0d 06  |0:O$=".Sprite"..|
0000b840  18 15 20 20 c9 20 33 38  3a 4f 24 3d 22 2e 44 72  |..  . 38:O$=".Dr|
0000b850  61 77 22 0d 06 19 05 cb  0d 06 1a 15 6d 61 69 6e  |aw".........main|
0000b860  24 3d 66 24 2b 4f 24 2b  c3 28 46 25 29 0d 06 1b  |$=f$+O$+.(F%)...|
0000b870  22 6c 65 76 65 6c 31 24  3d 6d 61 69 6e 24 2b 22  |"level1$=main$+"|
0000b880  2e 22 2b c3 28 52 25 20  81 20 34 39 30 30 29 0d  |."+.(R% . 4900).|
0000b890  06 1c 22 6c 65 76 65 6c  32 24 3d 6c 65 76 65 6c  |.."level2$=level|
0000b8a0  31 24 2b 22 2e 22 2b c3  28 52 25 20 81 20 37 30  |1$+"."+.(R% . 70|
0000b8b0  29 0d 06 1d 1d 62 24 3d  6c 65 76 65 6c 32 24 2b  |)....b$=level2$+|
0000b8c0  22 2e 22 2b c3 28 52 25  20 83 20 37 30 29 0d 06  |"."+.(R% . 70)..|
0000b8d0  1e 20 c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 35  |. .. "OS_File",5|
0000b8e0  2c 62 24 20 b8 20 64 25  2c 2c 2c 2c 4c 25 0d 06  |,b$ . d%,,,,L%..|
0000b8f0  1f 18 e7 20 64 25 3d 30  20 80 20 63 72 65 61 74  |... d%=0 . creat|
0000b900  65 25 3d b9 20 8c 0d 06  20 1a 20 20 c8 99 20 22  |e%=. ... .  .. "|
0000b910  4f 53 5f 46 69 6c 65 22  2c 38 2c 6d 61 69 6e 24  |OS_File",8,main$|
0000b920  0d 06 21 1c 20 20 c8 99  20 22 4f 53 5f 46 69 6c  |..!.  .. "OS_Fil|
0000b930  65 22 2c 38 2c 6c 65 76  65 6c 31 24 0d 06 22 1c  |e",8,level1$..".|
0000b940  20 20 c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 38  |  .. "OS_File",8|
0000b950  2c 6c 65 76 65 6c 32 24  0d 06 23 05 cd 0d 06 24  |,level2$..#....$|
0000b960  14 e7 20 64 25 3d 31 20  8c 3d 4c 25 20 8b 3d 2d  |.. d%=1 .=L% .=-|
0000b970  31 0d 06 25 05 3a 0d 06  26 1d dd 20 a4 6c 6f 61  |1..%.:..&.. .loa|
0000b980  64 5f 62 6c 6f 62 28 66  24 2c 52 25 2c 46 25 2c  |d_blob(f$,R%,F%,|
0000b990  56 25 29 0d 06 27 0b ea  20 4c 25 2c 62 24 0d 06  |V%)..'.. L%,b$..|
0000b9a0  28 23 4c 25 3d a4 62 6c  6f 62 5f 70 61 74 68 28  |(#L%=.blob_path(|
0000b9b0  a3 2c 66 24 2c 52 25 2c  46 25 2c 56 25 2c 62 24  |.,f$,R%,F%,V%,b$|
0000b9c0  29 0d 06 29 0d e7 20 4c  25 3e 3d 30 20 8c 0d 06  |)..).. L%>=0 ...|
0000b9d0  2a 33 20 20 f2 65 78 74  65 6e 64 5f 6e 61 6d 65  |*3  .extend_name|
0000b9e0  64 5f 73 6c 69 64 69 6e  67 5f 62 6c 6f 63 6b 28  |d_sliding_block(|
0000b9f0  74 65 6d 70 61 6e 63 68  6f 72 25 2c 4c 25 2b 31  |tempanchor%,L%+1|
0000ba00  29 0d 06 2b 26 20 20 c8  99 20 22 4f 53 5f 46 69  |)..+&  .. "OS_Fi|
0000ba10  6c 65 22 2c 32 35 35 2c  62 24 2c 21 74 65 6d 70  |le",255,b$,!temp|
0000ba20  61 6e 63 68 6f 72 25 0d  06 2c 05 cd 0d 06 2d 07  |anchor%..,....-.|
0000ba30  3d 4c 25 0d 06 2e 05 3a  0d 06 2f 19 dd 20 f2 62  |=L%....:../.. .b|
0000ba40  6c 6f 62 5f 74 6f 5f 66  69 6c 65 28 46 2c 4c 25  |lob_to_file(F,L%|
0000ba50  29 0d 06 30 2d e7 20 4c  25 3e 30 20 8c 20 c8 99  |)..0-. L%>0 . ..|
0000ba60  20 22 4f 53 5f 47 42 50  42 22 2c 32 2c 46 2c 21  | "OS_GBPB",2,F,!|
0000ba70  74 65 6d 70 61 6e 63 68  6f 72 25 2c 4c 25 0d 06  |tempanchor%,L%..|
0000ba80  31 05 e1 0d 06 32 05 3a  0d 06 33 32 dd 20 f2 63  |1....2.:..32. .c|
0000ba90  6f 70 79 5f 62 6c 6f 62  28 73 6f 75 72 63 65 24  |opy_blob(source$|
0000baa0  2c 64 65 73 74 24 2c 52  53 25 2c 52 44 25 2c 46  |,dest$,RS%,RD%,F|
0000bab0  53 25 2c 46 44 25 2c 56  25 29 0d 06 34 13 ea 20  |S%,FD%,V%)..4.. |
0000bac0  4c 25 2c 5a 25 2c 62 73  24 2c 62 64 24 0d 06 35  |L%,Z%,bs$,bd$..5|
0000bad0  2b 4c 25 3d a4 62 6c 6f  62 5f 70 61 74 68 28 a3  |+L%=.blob_path(.|
0000bae0  2c 73 6f 75 72 63 65 24  2c 52 53 25 2c 46 53 25  |,source$,RS%,FS%|
0000baf0  2c 56 25 2c 62 73 24 29  0d 06 36 0c e7 20 4c 25  |,V%,bs$)..6.. L%|
0000bb00  3e 30 20 8c 0d 06 37 2b  20 20 5a 25 3d a4 62 6c  |>0 ...7+  Z%=.bl|
0000bb10  6f 62 5f 70 61 74 68 28  b9 2c 64 65 73 74 24 2c  |ob_path(.,dest$,|
0000bb20  52 44 25 2c 46 44 25 2c  56 25 2c 62 64 24 29 0d  |RD%,FD%,V%,bd$).|
0000bb30  06 38 2f 20 20 c8 99 20  22 4f 53 5f 43 4c 49 22  |.8/  .. "OS_CLI"|
0000bb40  2c 22 43 6f 70 79 20 22  2b 62 73 24 2b 22 20 22  |,"Copy "+bs$+" "|
0000bb50  2b 62 64 24 2b 22 20 7e  43 7e 56 7e 51 22 0d 06  |+bd$+" ~C~V~Q"..|
0000bb60  39 05 cd 0d 06 3a 05 e1  0d 06 3b 05 3a 0d 06 3c  |9....:....;.:..<|
0000bb70  21 dd 20 f2 64 65 6c 65  74 65 5f 62 6c 6f 62 28  |!. .delete_blob(|
0000bb80  46 25 2c 46 24 2c 77 69  25 2c 69 63 25 29 0d 06  |F%,F$,wi%,ic%)..|
0000bb90  3d 0b ea 20 66 6c 61 67  25 0d 06 3e 12 e7 20 64  |=.. flag%..>.. d|
0000bba0  65 6c 77 61 72 6e 25 3d  a3 20 8c 0d 06 3f 26 20  |elwarn%=. ...?& |
0000bbb0  20 c8 99 20 22 4f 53 5f  43 4c 49 22 2c 22 44 65  | .. "OS_CLI","De|
0000bbc0  6c 65 74 65 20 22 2b 46  24 3a 66 6c 61 67 25 3d  |lete "+F$:flag%=|
0000bbd0  b9 0d 06 40 34 20 20 cc  20 e7 20 a4 63 6f 6e 66  |...@4  . . .conf|
0000bbe0  69 72 6d 28 22 44 65 6c  65 74 65 20 6f 62 6a 65  |irm("Delete obje|
0000bbf0  63 74 3f 20 41 72 65 20  79 6f 75 20 73 75 72 65  |ct? Are you sure|
0000bc00  3f 22 29 20 8c 0d 06 41  28 20 20 20 20 c8 99 20  |?") ...A(    .. |
0000bc10  22 4f 53 5f 43 4c 49 22  2c 22 44 65 6c 65 74 65  |"OS_CLI","Delete|
0000bc20  20 22 2b 46 24 3a 66 6c  61 67 25 3d b9 0d 06 42  | "+F$:flag%=...B|
0000bc30  07 20 20 cd 0d 06 43 05  cd 0d 06 44 0d e7 20 66  |.  ...C....D.. f|
0000bc40  6c 61 67 25 20 8c 0d 06  45 18 20 20 c8 8e 20 63  |lag% ...E.  .. c|
0000bc50  68 61 72 74 79 70 65 25  28 46 25 29 20 ca 0d 06  |hartype%(F%) ...|
0000bc60  46 29 20 20 20 20 c9 20  33 36 3a 24 a4 76 61 6c  |F)    . 36:$.val|
0000bc70  28 77 69 25 2c 69 63 25  29 3d 22 5a 30 3b 53 73  |(wi%,ic%)="Z0;Ss|
0000bc80  6d 21 65 64 69 74 22 0d  06 47 2a 20 20 20 20 c9  |m!edit"..G*    .|
0000bc90  20 33 37 3a 24 a4 76 61  6c 28 77 69 25 2c 69 63  | 37:$.val(wi%,ic|
0000bca0  25 29 3d 22 5a 30 3b 53  73 6d 21 70 61 69 6e 74  |%)="Z0;Ssm!paint|
0000bcb0  22 0d 06 48 29 20 20 20  20 c9 20 33 38 3a 24 a4  |"..H)    . 38:$.|
0000bcc0  76 61 6c 28 77 69 25 2c  69 63 25 29 3d 22 5a 30  |val(wi%,ic%)="Z0|
0000bcd0  3b 53 73 6d 21 64 72 61  77 22 0d 06 49 1f 20 20  |;Ssm!draw"..I.  |
0000bce0  20 20 c9 20 33 39 3a 24  a4 74 65 78 74 28 77 69  |  . 39:$.text(wi|
0000bcf0  25 2c 69 63 25 29 3d 22  22 0d 06 4a 07 20 20 cb  |%,ic%)=""..J.  .|
0000bd00  0d 06 4b 1b 20 20 f2 72  65 64 72 61 77 5f 69 63  |..K.  .redraw_ic|
0000bd10  6f 6e 28 77 69 25 2c 69  63 25 29 0d 06 4c 05 cd  |on(wi%,ic%)..L..|
0000bd20  0d 06 4d 05 e1 0d 06 4e  05 3a 0d 06 4f 20 dd 20  |..M....N.:..O . |
0000bd30  f2 73 65 74 5f 62 6c 6f  62 5f 73 70 72 69 74 65  |.set_blob_sprite|
0000bd40  28 52 25 2c 46 25 2c 56  25 29 0d 06 50 13 ea 20  |(R%,F%,V%)..P.. |
0000bd50  4c 25 2c 62 24 2c 73 70  72 69 74 65 24 0d 06 51  |L%,b$,sprite$..Q|
0000bd60  3e e7 20 52 25 3d 52 41  25 20 8c 20 4c 25 3d 2d  |>. R%=RA% . L%=-|
0000bd70  31 20 8b 20 4c 25 3d a4  62 6c 6f 62 5f 70 61 74  |1 . L%=.blob_pat|
0000bd80  68 28 a3 2c 24 64 61 74  61 62 61 73 65 25 2c 52  |h(.,$database%,R|
0000bd90  25 2c 46 25 2c 56 25 2c  62 24 29 0d 06 52 0b c8  |%,F%,V%,b$)..R..|
0000bda0  8e 20 56 25 20 ca 0d 06  53 3c 20 20 c9 20 33 36  |. V% ...S<  . 36|
0000bdb0  3a e7 20 4c 25 3e 3d 30  20 8c 20 73 70 72 69 74  |:. L%>=0 . sprit|
0000bdc0  65 24 3d 22 73 6d 61 6c  6c 5f 66 66 66 22 20 8b  |e$="small_fff" .|
0000bdd0  20 73 70 72 69 74 65 24  3d 22 73 6d 21 65 64 69  | sprite$="sm!edi|
0000bde0  74 22 0d 06 54 3d 20 20  c9 20 33 37 3a e7 20 4c  |t"..T=  . 37:. L|
0000bdf0  25 3e 3d 30 20 8c 20 73  70 72 69 74 65 24 3d 22  |%>=0 . sprite$="|
0000be00  73 6d 61 6c 6c 5f 66 66  39 22 20 8b 20 73 70 72  |small_ff9" . spr|
0000be10  69 74 65 24 3d 22 73 6d  21 70 61 69 6e 74 22 0d  |ite$="sm!paint".|
0000be20  06 55 3c 20 20 c9 20 33  38 3a e7 20 4c 25 3e 3d  |.U<  . 38:. L%>=|
0000be30  30 20 8c 20 73 70 72 69  74 65 24 3d 22 73 6d 61  |0 . sprite$="sma|
0000be40  6c 6c 5f 61 66 66 22 20  8b 20 73 70 72 69 74 65  |ll_aff" . sprite|
0000be50  24 3d 22 73 6d 21 64 72  61 77 22 0d 06 56 05 cb  |$="sm!draw"..V..|
0000be60  0d 06 57 38 24 a4 76 61  6c 28 6d 61 69 6e 57 25  |..W8$.val(mainW%|
0000be70  2c 66 69 65 6c 64 25 28  46 25 29 29 3d 22 5a 30  |,field%(F%))="Z0|
0000be80  3b 50 70 74 72 5f 65 78  74 2c 38 2c 34 3b 53 22  |;Pptr_ext,8,4;S"|
0000be90  2b 73 70 72 69 74 65 24  0d 06 58 23 f2 72 65 64  |+sprite$..X#.red|
0000bea0  72 61 77 5f 69 63 6f 6e  28 6d 61 69 6e 57 25 2c  |raw_icon(mainW%,|
0000beb0  66 69 65 6c 64 25 28 46  25 29 29 0d 06 59 05 e1  |field%(F%))..Y..|
0000bec0  0d 06 5a 05 3a 0d 06 5b  1a dd 20 f2 65 64 69 74  |..Z.:..[.. .edit|
0000bed0  5f 62 6c 6f 62 28 52 25  2c 46 25 2c 56 25 29 0d  |_blob(R%,F%,V%).|
0000bee0  06 5c 18 ea 20 77 69 25  2c 69 63 25 2c 62 24 2c  |.\.. wi%,ic%,b$,|
0000bef0  4f 24 2c 76 61 6c 24 0d  06 5d 32 e7 20 52 25 3d  |O$,val$..]2. R%=|
0000bf00  52 41 25 20 8c 20 f2 63  68 65 63 6b 5f 63 68 61  |RA% . .check_cha|
0000bf10  6e 67 65 3a e7 20 52 45  43 25 3c 3e 52 41 25 20  |nge:. REC%<>RA% |
0000bf20  8c 20 52 25 3d 52 45 43  25 0d 06 5e 1d 77 69 25  |. R%=REC%..^.wi%|
0000bf30  3d 6d 61 69 6e 57 25 3a  69 63 25 3d 66 69 65 6c  |=mainW%:ic%=fiel|
0000bf40  64 25 28 46 25 29 0d 06  5f 0b c8 8e 20 56 25 20  |d%(F%).._... V% |
0000bf50  ca 0d 06 60 35 20 20 c9  20 33 36 3a 4f 24 3d 22  |...`5  . 36:O$="|
0000bf60  4d 65 6d 6f 22 3a 76 61  6c 24 3d 22 5a 30 3b 53  |Memo":val$="Z0;S|
0000bf70  73 6d 61 6c 6c 5f 66 66  66 22 3a 66 74 79 70 65  |small_fff":ftype|
0000bf80  25 3d 26 66 66 66 0d 06  61 37 20 20 c9 20 33 37  |%=&fff..a7  . 37|
0000bf90  3a 4f 24 3d 22 53 70 72  69 74 65 22 3a 76 61 6c  |:O$="Sprite":val|
0000bfa0  24 3d 22 5a 30 3b 53 73  6d 61 6c 6c 5f 66 66 39  |$="Z0;Ssmall_ff9|
0000bfb0  22 3a 66 74 79 70 65 25  3d 26 66 66 39 0d 06 62  |":ftype%=&ff9..b|
0000bfc0  35 20 20 c9 20 33 38 3a  4f 24 3d 22 44 72 61 77  |5  . 38:O$="Draw|
0000bfd0  22 3a 76 61 6c 24 3d 22  5a 30 3b 53 73 6d 61 6c  |":val$="Z0;Ssmal|
0000bfe0  6c 5f 61 66 66 22 3a 66  74 79 70 65 25 3d 26 61  |l_aff":ftype%=&a|
0000bff0  66 66 0d 06 63 05 cb 0d  06 64 2e e7 20 a4 62 6c  |ff..c....d.. .bl|
0000c000  6f 62 5f 70 61 74 68 28  b9 2c 24 64 61 74 61 62  |ob_path(.,$datab|
0000c010  61 73 65 25 2c 52 25 2c  46 25 2c 56 25 2c 62 24  |ase%,R%,F%,V%,b$|
0000c020  29 3c 30 20 8c 0d 06 65  19 20 20 24 a4 76 61 6c  |)<0 ...e.  $.val|
0000c030  28 77 69 25 2c 69 63 25  29 3d 76 61 6c 24 0d 06  |(wi%,ic%)=val$..|
0000c040  66 49 20 20 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |fI  .. "OS_CLI",|
0000c050  22 43 6f 70 79 20 3c 50  42 61 73 65 24 44 69 72  |"Copy <PBase$Dir|
0000c060  3e 2e 52 65 73 6f 75 72  63 65 73 2e 4f 62 6a 65  |>.Resources.Obje|
0000c070  63 74 73 2e 22 2b 4f 24  2b 22 20 22 2b 62 24 2b  |cts."+O$+" "+b$+|
0000c080  22 20 7e 43 7e 56 22 0d  06 67 1b 20 20 f2 72 65  |" ~C~V"..g.  .re|
0000c090  64 72 61 77 5f 69 63 6f  6e 28 77 69 25 2c 69 63  |draw_icon(wi%,ic|
0000c0a0  25 29 0d 06 68 05 cd 0d  06 69 34 62 6c 6f 63 6b  |%)..h....i4block|
0000c0b0  25 21 30 3d 32 35 36 3a  62 6c 6f 63 6b 25 21 31  |%!0=256:block%!1|
0000c0c0  32 3d 30 3a 62 6c 6f 63  6b 25 21 31 36 3d 35 3a  |2=0:block%!16=5:|
0000c0d0  62 6c 6f 63 6b 25 21 32  30 3d 30 0d 06 6a 33 62  |block%!20=0..j3b|
0000c0e0  6c 6f 63 6b 25 21 32 34  3d 30 3a 62 6c 6f 63 6b  |lock%!24=0:block|
0000c0f0  25 21 32 38 3d 30 3a 62  6c 6f 63 6b 25 21 33 32  |%!28=0:block%!32|
0000c100  3d 30 3a 62 6c 6f 63 6b  25 21 33 36 3d 30 0d 06  |=0:block%!36=0..|
0000c110  6b 29 62 6c 6f 63 6b 25  21 34 30 3d 66 74 79 70  |k)block%!40=ftyp|
0000c120  65 25 3a 24 28 62 6c 6f  63 6b 25 2b 34 34 29 3d  |e%:$(block%+44)=|
0000c130  62 24 2b bd 28 30 29 0d  06 6c 25 c8 99 20 22 57  |b$+.(0)..l%.. "W|
0000c140  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
0000c150  2c 31 38 2c 62 6c 6f 63  6b 25 2c 30 0d 06 6d 05  |,18,block%,0..m.|
0000c160  e1 0d 06 6e 05 3a 0d 06  6f 2a dd 20 f2 74 72 61  |...n.:..o*. .tra|
0000c170  6e 73 66 65 72 5f 62 6c  6f 62 28 77 69 25 2c 69  |nsfer_blob(wi%,i|
0000c180  63 25 2c 52 25 2c 66 69  6c 65 24 2c 66 74 25 29  |c%,R%,file$,ft%)|
0000c190  0d 06 70 14 ea 20 46 25  2c 56 25 2c 4c 25 2c 57  |..p.. F%,V%,L%,W|
0000c1a0  25 2c 62 24 0d 06 71 15  e7 20 77 69 25 3c 3e 6d  |%,b$..q.. wi%<>m|
0000c1b0  61 69 6e 57 25 20 8c 20  e1 0d 06 72 32 e7 20 52  |ainW% . ...r2. R|
0000c1c0  25 3d 52 41 25 20 8c 20  f2 63 68 65 63 6b 5f 63  |%=RA% . .check_c|
0000c1d0  68 61 6e 67 65 3a e7 20  52 45 43 25 3c 3e 52 41  |hange:. REC%<>RA|
0000c1e0  25 20 8c 20 52 25 3d 52  45 43 25 0d 06 73 23 46  |% . R%=REC%..s#F|
0000c1f0  25 3d 28 69 63 25 2b 31  29 20 81 20 32 3a 56 25  |%=(ic%+1) . 2:V%|
0000c200  3d 63 68 61 72 74 79 70  65 25 28 46 25 29 0d 06  |=chartype%(F%)..|
0000c210  74 0b c8 8e 20 56 25 20  ca 0d 06 75 3b 20 20 c9  |t... V% ...u;  .|
0000c220  20 33 35 3a e7 20 66 74  25 3d 2d 31 20 8c 20 6c  | 35:. ft%=-1 . l|
0000c230  69 6e 6b 24 28 46 25 29  3d 22 40 22 2b 66 69 6c  |ink$(F%)="@"+fil|
0000c240  65 24 3a 6c 69 6e 6b 24  28 30 29 3d 22 4c 4f 41  |e$:link$(0)="LOA|
0000c250  44 45 44 22 0d 06 76 0b  20 20 c9 20 33 36 3a 0d  |DED"..v.  . 36:.|
0000c260  06 77 3f 20 20 e7 20 66  74 25 3d 26 66 66 66 20  |.w?  . ft%=&fff |
0000c270  8c 20 f2 69 6e 73 74 61  6c 6c 5f 62 6c 6f 62 3a  |. .install_blob:|
0000c280  24 a4 76 61 6c 28 77 69  25 2c 69 63 25 29 3d 22  |$.val(wi%,ic%)="|
0000c290  5a 30 3b 53 73 6d 61 6c  6c 5f 66 66 66 22 0d 06  |Z0;Ssmall_fff"..|
0000c2a0  78 0b 20 20 c9 20 33 37  3a 0d 06 79 3f 20 20 e7  |x.  . 37:..y?  .|
0000c2b0  20 66 74 25 3d 26 66 66  39 20 8c 20 f2 69 6e 73  | ft%=&ff9 . .ins|
0000c2c0  74 61 6c 6c 5f 62 6c 6f  62 3a 24 a4 76 61 6c 28  |tall_blob:$.val(|
0000c2d0  77 69 25 2c 69 63 25 29  3d 22 5a 30 3b 53 73 6d  |wi%,ic%)="Z0;Ssm|
0000c2e0  61 6c 6c 5f 66 66 39 22  0d 06 7a 0b 20 20 c9 20  |all_ff9"..z.  . |
0000c2f0  33 38 3a 0d 06 7b 3f 20  20 e7 20 66 74 25 3d 26  |38:..{?  . ft%=&|
0000c300  61 66 66 20 8c 20 f2 69  6e 73 74 61 6c 6c 5f 62  |aff . .install_b|
0000c310  6c 6f 62 3a 24 a4 76 61  6c 28 77 69 25 2c 69 63  |lob:$.val(wi%,ic|
0000c320  25 29 3d 22 5a 30 3b 53  73 6d 61 6c 6c 5f 61 66  |%)="Z0;Ssmall_af|
0000c330  66 22 0d 06 7c 0b 20 20  c9 20 33 39 3a 0d 06 7d  |f"..|.  . 39:..}|
0000c340  35 20 20 e7 20 66 74 25  3d 26 66 66 66 20 8c 20  |5  . ft%=&fff . |
0000c350  f2 69 6e 73 74 61 6c 6c  5f 62 6c 6f 62 3a f2 73  |.install_blob:.s|
0000c360  68 6f 77 5f 74 65 78 74  5f 62 6c 6f 63 6b 28 46  |how_text_block(F|
0000c370  25 29 0d 06 7e 0b 20 20  c9 20 34 30 3a 0d 06 7f  |%)..~.  . 40:...|
0000c380  32 20 20 e7 20 66 74 25  3d 26 66 66 39 20 8c 20  |2  . ft%=&ff9 . |
0000c390  f2 69 6e 73 74 61 6c 6c  5f 62 6c 6f 62 3a f2 73  |.install_blob:.s|
0000c3a0  68 6f 77 5f 70 69 63 74  75 72 65 28 46 25 29 0d  |how_picture(F%).|
0000c3b0  06 80 05 cb 0d 06 81 19  f2 72 65 64 72 61 77 5f  |.........redraw_|
0000c3c0  69 63 6f 6e 28 77 69 25  2c 69 63 25 29 0d 06 82  |icon(wi%,ic%)...|
0000c3d0  05 e1 0d 06 83 05 3a 0d  06 84 13 dd 20 f2 69 6e  |......:..... .in|
0000c3e0  73 74 61 6c 6c 5f 62 6c  6f 62 0d 06 85 2b 4c 25  |stall_blob...+L%|
0000c3f0  3d a4 62 6c 6f 62 5f 70  61 74 68 28 b9 2c 24 64  |=.blob_path(.,$d|
0000c400  61 74 61 62 61 73 65 25  2c 52 25 2c 46 25 2c 56  |atabase%,R%,F%,V|
0000c410  25 2c 62 24 29 0d 06 86  1c c8 99 20 22 4f 53 5f  |%,b$)...... "OS_|
0000c420  43 4c 49 22 2c 22 52 65  6d 6f 76 65 20 22 2b 62  |CLI","Remove "+b|
0000c430  24 0d 06 87 2c c8 99 20  22 4f 53 5f 43 4c 49 22  |$...,.. "OS_CLI"|
0000c440  2c 22 43 6f 70 79 20 22  2b 66 69 6c 65 24 2b 22  |,"Copy "+file$+"|
0000c450  20 22 2b 62 24 2b 22 20  7e 43 7e 56 22 0d 06 88  | "+b$+" ~C~V"...|
0000c460  05 e1 0d 06 89 05 3a 0d  06 8a 1a dd 20 f2 73 68  |......:..... .sh|
0000c470  6f 77 5f 74 65 78 74 5f  62 6c 6f 63 6b 28 46 25  |ow_text_block(F%|
0000c480  29 0d 06 8b 16 ea 20 46  2c 62 24 2c 49 25 2c 4c  |)..... F,b$,I%,L|
0000c490  25 2c 62 61 73 65 25 0d  06 8c 0e e7 20 46 25 3d  |%,base%..... F%=|
0000c4a0  30 20 8c 20 e1 0d 06 8d  11 62 61 73 65 25 3d 52  |0 . .....base%=R|
0000c4b0  66 25 28 46 25 29 0d 06  8e 2d 4c 25 3d a4 62 6c  |f%(F%)...-L%=.bl|
0000c4c0  6f 62 5f 70 61 74 68 28  a3 2c 24 64 61 74 61 62  |ob_path(.,$datab|
0000c4d0  61 73 65 25 2c 52 45 43  25 2c 46 25 2c 33 39 2c  |ase%,REC%,F%,39,|
0000c4e0  62 24 29 0d 06 8f 0c e7  20 4c 25 3e 30 20 8c 0d  |b$)..... L%>0 ..|
0000c4f0  06 90 21 20 20 e7 20 4c  25 3e 6c 65 6e 25 28 46  |..!  . L%>len%(F|
0000c500  25 29 20 8c 20 4c 25 3d  6c 65 6e 25 28 46 25 29  |%) . L%=len%(F%)|
0000c510  0d 06 91 3b 20 20 f4 20  23 23 23 20 4c 6f 61 64  |...;  . ### Load|
0000c520  20 6f 6e 6c 79 20 61 73  20 6d 75 63 68 20 6f 66  | only as much of|
0000c530  20 66 69 6c 65 20 61 73  20 77 65 20 63 61 6e 20  | file as we can |
0000c540  64 69 73 70 6c 61 79 20  23 23 23 0d 06 92 3e 20  |display ###...> |
0000c550  20 46 3d 8e 28 62 24 29  3a e7 20 46 3e 30 20 8c  | F=.(b$):. F>0 .|
0000c560  20 c8 99 20 22 4f 53 5f  47 42 50 42 22 2c 34 2c  | .. "OS_GBPB",4,|
0000c570  46 2c 62 61 73 65 25 2c  4c 25 3a f2 63 6c 6f 73  |F,base%,L%:.clos|
0000c580  65 5f 66 69 6c 65 28 46  29 0d 06 93 4a 20 20 f4  |e_file(F)...J  .|
0000c590  20 23 23 23 20 52 65 70  6c 61 63 65 20 61 6e 79  | ### Replace any|
0000c5a0  20 63 68 61 72 61 63 74  65 72 73 3c 33 32 20 62  | characters<32 b|
0000c5b0  79 20 73 70 61 63 65 73  20 2d 20 62 75 74 20 4f  |y spaces - but O|
0000c5c0  4e 4c 59 20 66 6f 72 20  64 69 73 70 6c 61 79 20  |NLY for display |
0000c5d0  23 23 23 0d 06 94 13 20  20 e3 20 49 25 3d 30 20  |###....  . I%=0 |
0000c5e0  b8 20 4c 25 2d 31 0d 06  95 23 20 20 20 20 e7 20  |. L%-1...#    . |
0000c5f0  62 61 73 65 25 3f 49 25  3c 33 32 20 8c 20 62 61  |base%?I%<32 . ba|
0000c600  73 65 25 3f 49 25 3d 33  32 0d 06 96 0a 20 20 ed  |se%?I%=32....  .|
0000c610  20 49 25 0d 06 97 11 20  20 62 61 73 65 25 3f 4c  | I%....  base%?L|
0000c620  25 3d 31 30 0d 06 98 11  20 20 cc 20 24 62 61 73  |%=10....  . $bas|
0000c630  65 25 3d 22 22 0d 06 99  05 cd 0d 06 9a 05 e1 0d  |e%=""...........|
0000c640  06 9b 05 3a 0d 06 9c 17  dd 20 f2 73 68 6f 77 5f  |...:..... .show_|
0000c650  70 69 63 74 75 72 65 28  46 25 29 0d 06 9d 23 ea  |picture(F%)...#.|
0000c660  20 46 2c 66 24 2c 49 25  2c 6d 61 78 25 2c 6c 65  | F,f$,I%,max%,le|
0000c670  6e 25 2c 78 25 2c 79 25  2c 77 25 2c 68 25 0d 06  |n%,x%,y%,w%,h%..|
0000c680  9e 0e e7 20 46 25 3d 30  20 8c 20 e1 0d 06 9f 2f  |... F%=0 . ..../|
0000c690  6c 65 6e 25 3d a4 62 6c  6f 62 5f 70 61 74 68 28  |len%=.blob_path(|
0000c6a0  a3 2c 24 64 61 74 61 62  61 73 65 25 2c 52 45 43  |.,$database%,REC|
0000c6b0  25 2c 46 25 2c 34 30 2c  66 24 29 0d 06 a0 45 21  |%,F%,40,f$)...E!|
0000c6c0  62 6c 6f 63 6b 25 3d 6d  61 69 6e 57 25 3a 62 6c  |block%=mainW%:bl|
0000c6d0  6f 63 6b 25 21 34 3d 66  69 65 6c 64 25 28 46 25  |ock%!4=field%(F%|
0000c6e0  29 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 49 63  |):.. "Wimp_GetIc|
0000c6f0  6f 6e 53 74 61 74 65 22  2c 2c 62 6c 6f 63 6b 25  |onState",,block%|
0000c700  0d 06 a1 3c 78 25 3d 62  6c 6f 63 6b 25 21 38 3a  |...<x%=block%!8:|
0000c710  79 25 3d 62 6c 6f 63 6b  25 21 31 32 3a 77 25 3d  |y%=block%!12:w%=|
0000c720  62 6c 6f 63 6b 25 21 31  36 2d 78 25 3a 68 25 3d  |block%!16-x%:h%=|
0000c730  62 6c 6f 63 6b 25 21 32  30 2d 79 25 0d 06 a2 20  |block%!20-y%... |
0000c740  c8 99 20 22 57 69 6d 70  5f 44 65 6c 65 74 65 49  |.. "Wimp_DeleteI|
0000c750  63 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 0d 06 a3 0f  |con",,block%....|
0000c760  e7 20 6c 65 6e 25 3e 3d  30 20 8c 0d 06 a4 40 20  |. len%>=0 ....@ |
0000c770  20 f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  | .extend_named_s|
0000c780  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 52 66 25  |liding_block(Rf%|
0000c790  28 46 25 29 2c 6c 65 6e  25 2b 34 29 3a 62 61 73  |(F%),len%+4):bas|
0000c7a0  65 25 3d 21 52 66 25 28  46 25 29 0d 06 a5 2f 20  |e%=!Rf%(F%).../ |
0000c7b0  20 21 62 61 73 65 25 3d  6c 65 6e 25 2b 34 3a c8  | !base%=len%+4:.|
0000c7c0  99 20 22 4f 53 5f 46 69  6c 65 22 2c 32 35 35 2c  |. "OS_File",255,|
0000c7d0  66 24 2c 62 61 73 65 25  2b 34 0d 06 a6 4f 20 20  |f$,base%+4...O  |
0000c7e0  66 69 65 6c 64 25 28 46  25 29 3d a4 63 72 65 61  |field%(F%)=.crea|
0000c7f0  74 65 5f 69 63 6f 6e 28  6d 61 69 6e 57 25 2c 78  |te_icon(mainW%,x|
0000c800  25 2c 79 25 2c 77 25 2c  68 25 2c 26 30 37 30 30  |%,y%,w%,h%,&0700|
0000c810  41 35 33 45 2c 22 22 2c  62 61 73 65 25 2b 31 36  |A53E,"",base%+16|
0000c820  2c 62 61 73 65 25 2c 30  29 0d 06 a7 07 20 20 cc  |,base%,0)....  .|
0000c830  0d 06 a8 4b 20 20 66 69  65 6c 64 25 28 46 25 29  |...K  field%(F%)|
0000c840  3d a4 63 72 65 61 74 65  5f 69 63 6f 6e 28 6d 61  |=.create_icon(ma|
0000c850  69 6e 57 25 2c 78 25 2c  79 25 2c 77 25 2c 68 25  |inW%,x%,y%,w%,h%|
0000c860  2c 26 30 37 30 30 41 35  33 45 2c 22 22 2c 70 61  |,&0700A53E,"",pa|
0000c870  69 6e 74 25 2c 31 2c 33  38 34 29 0d 06 a9 05 cd  |int%,1,384).....|
0000c880  0d 06 aa 05 e1 0d 06 ab  05 3a 0d 06 ac 16 dd 20  |.........:..... |
0000c890  f2 66 69 6c 74 65 72 28  77 69 25 2c 69 63 25 29  |.filter(wi%,ic%)|
0000c8a0  0d 06 ad 10 ea 20 68 25  2c 6f 78 25 2c 6f 79 25  |..... h%,ox%,oy%|
0000c8b0  0d 06 ae 0c c8 8e 20 77  69 25 20 ca 0d 06 af 23  |...... wi% ....#|
0000c8c0  20 20 c9 20 6b 65 79 70  61 64 57 25 3a 68 25 3d  |  . keypadW%:h%=|
0000c8d0  35 33 30 3a 6f 78 25 3d  30 3a 6f 79 25 3d 30 0d  |530:ox%=0:oy%=0.|
0000c8e0  06 b0 24 20 20 c9 20 6d  61 69 6e 57 25 3a 68 25  |..$  . mainW%:h%|
0000c8f0  3d 32 30 30 3a 6f 78 25  3d 30 3a 6f 79 25 3d 2d  |=200:ox%=0:oy%=-|
0000c900  33 33 30 0d 06 b1 05 cb  0d 06 b2 1a e7 20 a4 73  |330.......... .s|
0000c910  65 6c 65 63 74 65 64 28  77 69 25 2c 69 63 25 29  |elected(wi%,ic%)|
0000c920  20 8c 0d 06 b3 37 20 20  21 62 6c 6f 63 6b 25 3d  | ....7  !block%=|
0000c930  6b 65 79 70 61 64 57 25  3a c8 99 20 22 57 69 6d  |keypadW%:.. "Wim|
0000c940  70 5f 47 65 74 57 69 6e  64 6f 77 53 74 61 74 65  |p_GetWindowState|
0000c950  22 2c 2c 62 6c 6f 63 6b  25 0d 06 b4 32 20 20 62  |",,block%...2  b|
0000c960  6c 6f 63 6b 25 21 31 32  3d 62 6c 6f 63 6b 25 21  |lock%!12=block%!|
0000c970  34 2b 36 36 30 3a 62 6c  6f 63 6b 25 21 38 3d 62  |4+660:block%!8=b|
0000c980  6c 6f 63 6b 25 21 31 36  2d 68 25 0d 06 b5 21 20  |lock%!16-h%...! |
0000c990  20 62 6c 6f 63 6b 25 21  32 30 3d 6f 78 25 3a 62  | block%!20=ox%:b|
0000c9a0  6c 6f 63 6b 25 21 32 34  3d 6f 79 25 0d 06 b6 22  |lock%!24=oy%..."|
0000c9b0  20 20 c8 99 20 22 57 69  6d 70 5f 4f 70 65 6e 57  |  .. "Wimp_OpenW|
0000c9c0  69 6e 64 6f 77 22 2c 2c  62 6c 6f 63 6b 25 0d 06  |indow",,block%..|
0000c9d0  b7 2a 20 20 e7 20 ac 20  63 6f 6d 6d 6f 6e 25 20  |.*  . . common% |
0000c9e0  8c 20 24 a4 74 65 78 74  28 6b 65 79 70 61 64 57  |. $.text(keypadW|
0000c9f0  25 2c 32 39 29 3d 22 22  0d 06 b8 1d 20 20 f2 73  |%,29)=""....  .s|
0000ca00  65 74 5f 63 61 72 65 74  28 6b 65 79 70 61 64 57  |et_caret(keypadW|
0000ca10  25 2c 32 39 29 0d 06 b9  21 20 20 e7 20 24 a4 74  |%,29)...!  . $.t|
0000ca20  65 78 74 28 6b 65 79 70  61 64 57 25 2c 32 39 29  |ext(keypadW%,29)|
0000ca30  3c 3e 22 22 20 8c 0d 06  ba 42 20 20 20 20 46 69  |<>"" ....B    Fi|
0000ca40  6c 74 65 72 24 3d a4 70  61 72 73 65 28 24 a4 74  |lter$=.parse($.t|
0000ca50  65 78 74 28 6b 65 79 70  61 64 57 25 2c 32 39 29  |ext(keypadW%,29)|
0000ca60  2c a4 73 65 6c 65 63 74  65 64 28 6b 65 79 70 61  |,.selected(keypa|
0000ca70  64 57 25 2c 33 32 29 29  0d 06 bb 11 20 20 20 20  |dW%,32))....    |
0000ca80  66 69 6c 74 65 72 25 3d  b9 0d 06 bc 21 20 20 20  |filter%=....!   |
0000ca90  20 61 64 64 72 3d a4 6d  6f 76 65 74 6f 28 6b 65  | addr=.moveto(ke|
0000caa0  79 25 2c 74 6f 70 2c 7a  25 29 0d 06 bd 13 20 20  |y%,top,z%)....  |
0000cab0  20 20 cc 20 66 69 6c 74  65 72 25 3d a3 0d 06 be  |  . filter%=....|
0000cac0  07 20 20 cd 0d 06 bf 07  20 20 cc 0d 06 c0 16 20  |.  .....  ..... |
0000cad0  20 e7 20 77 69 25 3d 6b  65 79 70 61 64 57 25 20  | . wi%=keypadW% |
0000cae0  8c 0d 06 c1 39 20 20 20  20 21 62 6c 6f 63 6b 25  |....9    !block%|
0000caf0  3d 6b 65 79 70 61 64 57  25 3a c8 99 20 22 57 69  |=keypadW%:.. "Wi|
0000cb00  6d 70 5f 47 65 74 57 69  6e 64 6f 77 53 74 61 74  |mp_GetWindowStat|
0000cb10  65 22 2c 2c 62 6c 6f 63  6b 25 0d 06 c2 35 20 20  |e",,block%...5  |
0000cb20  20 20 62 6c 6f 63 6b 25  21 31 32 3d 62 6c 6f 63  |  block%!12=bloc|
0000cb30  6b 25 21 34 2b 36 36 30  3a 62 6c 6f 63 6b 25 21  |k%!4+660:block%!|
0000cb40  38 3d 62 6c 6f 63 6b 25  21 31 36 2d 33 33 30 0d  |8=block%!16-330.|
0000cb50  06 c3 1f 20 20 20 20 62  6c 6f 63 6b 25 21 32 30  |...    block%!20|
0000cb60  3d 30 3a 62 6c 6f 63 6b  25 21 32 34 3d 30 0d 06  |=0:block%!24=0..|
0000cb70  c4 24 20 20 20 20 c8 99  20 22 57 69 6d 70 5f 4f  |.$    .. "Wimp_O|
0000cb80  70 65 6e 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |penWindow",,bloc|
0000cb90  6b 25 0d 06 c5 21 20 20  20 20 cc 20 f2 63 6c 6f  |k%...!    . .clo|
0000cba0  73 65 5f 77 69 6e 64 6f  77 28 6b 65 79 70 61 64  |se_window(keypad|
0000cbb0  57 25 29 0d 06 c6 07 20  20 cd 0d 06 c7 0f 20 20  |W%)....  .....  |
0000cbc0  66 69 6c 74 65 72 25 3d  a3 0d 06 c8 05 cd 0d 06  |filter%=........|
0000cbd0  c9 05 e1 0d 06 ca 05 3a  0d 06 cb 1a dd 20 a4 66  |.......:..... .f|
0000cbe0  61 73 74 5f 77 69 6e 64  28 54 25 2c 50 25 2c 44  |ast_wind(T%,P%,D|
0000cbf0  25 29 0d 06 cc 08 ea 20  49 25 0d 06 cd 20 66 61  |%)..... I%... fa|
0000cc00  73 74 25 3d bb 28 24 a4  74 65 78 74 28 6b 65 79  |st%=.($.text(key|
0000cc10  70 61 64 57 25 2c 32 33  29 29 0d 06 ce 11 44 25  |padW%,23))....D%|
0000cc20  3d 28 44 25 2b 31 29 20  81 20 32 0d 06 cf 18 c8  |=(D%+1) . 2.....|
0000cc30  95 20 50 25 3c 3e 54 25  20 80 20 49 25 3c 66 61  |. P%<>T% . I%<fa|
0000cc40  73 74 25 0d 06 d0 4b 20  20 e7 20 66 69 6c 74 65  |st%...K  . filte|
0000cc50  72 25 20 8c 20 50 25 3d  a4 6e 65 78 74 5f 6d 61  |r% . P%=.next_ma|
0000cc60  74 63 68 28 50 25 2c 44  25 2c 46 69 6c 74 65 72  |tch(P%,D%,Filter|
0000cc70  24 29 20 8b 20 50 25 3d  a4 6e 65 69 67 68 62 6f  |$) . P%=.neighbo|
0000cc80  75 72 28 6b 65 79 25 2c  50 25 2c 44 25 29 0d 06  |ur(key%,P%,D%)..|
0000cc90  d1 0b 20 20 49 25 2b 3d  31 0d 06 d2 05 ce 0d 06  |..  I%+=1.......|
0000cca0  d3 39 e7 20 50 25 3d 54  25 20 80 20 ac 20 66 69  |.9. P%=T% . . fi|
0000ccb0  6c 74 65 72 25 20 8c 20  ef 20 37 3a 50 25 3d a4  |lter% . . 7:P%=.|
0000ccc0  6e 65 69 67 68 62 6f 75  72 28 6b 65 79 25 2c 50  |neighbour(key%,P|
0000ccd0  25 2c 31 2d 44 25 29 0d  06 d4 15 f2 64 69 73 70  |%,1-D%).....disp|
0000cce0  6c 61 79 28 6b 65 79 25  2c 50 25 29 0d 06 d5 07  |lay(key%,P%)....|
0000ccf0  3d 50 25 0d 06 d6 05 3a  0d 06 d7 14 dd 20 f2 73  |=P%....:..... .s|
0000cd00  75 62 66 69 6c 65 28 64  69 72 25 29 0d 06 d8 0f  |ubfile(dir%)....|
0000cd10  66 69 6c 65 25 2b 3d 64  69 72 25 0d 06 d9 17 e7  |file%+=dir%.....|
0000cd20  20 66 69 6c 65 25 3d 36  20 8c 20 66 69 6c 65 25  | file%=6 . file%|
0000cd30  3d 30 0d 06 da 18 e7 20  66 69 6c 65 25 3d 2d 31  |=0..... file%=-1|
0000cd40  20 8c 20 66 69 6c 65 25  3d 35 0d 06 db 13 74 6f  | . file%=5....to|
0000cd50  70 3d 38 2a 66 69 6c 65  25 2b 4c 48 25 0d 06 dc  |p=8*file%+LH%...|
0000cd60  1c 61 64 64 72 3d a4 6d  6f 76 65 74 6f 28 6b 65  |.addr=.moveto(ke|
0000cd70  79 25 2c 74 6f 70 2c 31  29 0d 06 dd 05 e1 0d 06  |y%,top,1).......|
0000cd80  de 05 3a 0d 06 df 1b dd  20 f2 61 6c 6c 6f 77 5f  |..:..... .allow_|
0000cd90  73 65 61 72 63 68 28 77  69 25 2c 65 25 29 0d 06  |search(wi%,e%)..|
0000cda0  e0 10 ea 20 77 25 2c 6f  78 25 2c 6f 79 25 0d 06  |... w%,ox%,oy%..|
0000cdb0  e1 0b c8 8e 20 65 25 20  ca 0d 06 e2 35 20 20 c9  |.... e% ....5  .|
0000cdc0  20 31 3a f2 73 65 6c 65  63 74 28 6b 65 79 70 61  | 1:.select(keypa|
0000cdd0  64 57 25 2c 32 34 29 3a  f2 64 65 73 65 6c 65 63  |dW%,24):.deselec|
0000cde0  74 28 6b 65 79 70 61 64  57 25 2c 32 35 29 0d 06  |t(keypadW%,25)..|
0000cdf0  e3 36 20 20 c9 20 2d 31  3a f2 73 65 6c 65 63 74  |.6  . -1:.select|
0000ce00  28 6b 65 79 70 61 64 57  25 2c 32 35 29 3a f2 64  |(keypadW%,25):.d|
0000ce10  65 73 65 6c 65 63 74 28  6b 65 79 70 61 64 57 25  |eselect(keypadW%|
0000ce20  2c 32 34 29 0d 06 e4 05  cb 0d 06 e5 1a f2 64 65  |,24)..........de|
0000ce30  73 65 6c 65 63 74 28 6b  65 79 70 61 64 57 25 2c  |select(keypadW%,|
0000ce40  32 32 29 0d 06 e6 45 e7  20 62 75 74 74 6f 6e 66  |22)...E. buttonf|
0000ce50  69 65 6c 64 25 28 32 32  29 3e 30 20 8c 20 f2 64  |ield%(22)>0 . .d|
0000ce60  65 73 65 6c 65 63 74 28  6d 61 69 6e 57 25 2c 66  |eselect(mainW%,f|
0000ce70  69 65 6c 64 25 28 62 75  74 74 6f 6e 66 69 65 6c  |ield%(buttonfiel|
0000ce80  64 25 28 32 32 29 29 29  0d 06 e7 0d 66 69 6c 74  |d%(22)))....filt|
0000ce90  65 72 25 3d a3 0d 06 e8  31 24 a4 74 65 78 74 28  |er%=....1$.text(|
0000cea0  6b 65 79 70 61 64 57 25  2c 32 37 29 3d 22 22 3a  |keypadW%,27)="":|
0000ceb0  24 a4 74 65 78 74 28 6b  65 79 70 61 64 57 25 2c  |$.text(keypadW%,|
0000cec0  33 36 29 3d 22 22 0d 06  e9 24 24 a4 74 65 78 74  |36)=""...$$.text|
0000ced0  28 6b 65 79 70 61 64 57  25 2c 33 33 29 3d 49 6e  |(keypadW%,33)=In|
0000cee0  64 65 78 24 28 6b 65 79  25 29 0d 06 ea 0c c8 8e  |dex$(key%)......|
0000cef0  20 77 69 25 20 ca 0d 06  eb 24 20 20 c9 20 6b 65  | wi% ....$  . ke|
0000cf00  79 70 61 64 57 25 3a 77  25 3d 31 30 30 30 3a 6f  |ypadW%:w%=1000:o|
0000cf10  78 25 3d 30 3a 6f 79 25  3d 30 0d 06 ec 23 20 20  |x%=0:oy%=0...#  |
0000cf20  c9 20 6d 61 69 6e 57 25  3a 77 25 3d 33 34 30 3a  |. mainW%:w%=340:|
0000cf30  6f 78 25 3d 36 36 30 3a  6f 79 25 3d 30 0d 06 ed  |ox%=660:oy%=0...|
0000cf40  05 cb 0d 06 ee 35 21 62  6c 6f 63 6b 25 3d 6b 65  |.....5!block%=ke|
0000cf50  79 70 61 64 57 25 3a c8  99 20 22 57 69 6d 70 5f  |ypadW%:.. "Wimp_|
0000cf60  47 65 74 57 69 6e 64 6f  77 53 74 61 74 65 22 2c  |GetWindowState",|
0000cf70  2c 62 6c 6f 63 6b 25 0d  06 ef 30 62 6c 6f 63 6b  |,block%...0block|
0000cf80  25 21 31 32 3d 62 6c 6f  63 6b 25 21 34 2b 77 25  |%!12=block%!4+w%|
0000cf90  3a 62 6c 6f 63 6b 25 21  38 3d 62 6c 6f 63 6b 25  |:block%!8=block%|
0000cfa0  21 31 36 2d 33 32 38 0d  06 f0 1f 62 6c 6f 63 6b  |!16-328....block|
0000cfb0  25 21 32 30 3d 6f 78 25  3a 62 6c 6f 63 6b 25 21  |%!20=ox%:block%!|
0000cfc0  32 34 3d 6f 79 25 0d 06  f1 20 c8 99 20 22 57 69  |24=oy%... .. "Wi|
0000cfd0  6d 70 5f 4f 70 65 6e 57  69 6e 64 6f 77 22 2c 2c  |mp_OpenWindow",,|
0000cfe0  62 6c 6f 63 6b 25 0d 06  f2 1b f2 73 65 74 5f 63  |block%.....set_c|
0000cff0  61 72 65 74 28 6b 65 79  70 61 64 57 25 2c 32 37  |aret(keypadW%,27|
0000d000  29 0d 06 f3 05 e1 0d 06  f4 05 3a 0d 06 f5 0f dd  |).........:.....|
0000d010  20 f2 76 61 6c 5f 68 65  6c 70 0d 06 f6 0b ea 20  | .val_help..... |
0000d020  6e 61 6d 65 24 0d 06 f7  16 e7 20 46 69 65 6c 64  |name$..... Field|
0000d030  6e 75 6d 62 65 72 25 3e  30 20 8c 0d 06 f8 21 20  |number%>0 ....! |
0000d040  20 6e 61 6d 65 24 3d c0  6c 69 6e 6b 24 28 46 69  | name$=.link$(Fi|
0000d050  65 6c 64 6e 75 6d 62 65  72 25 29 29 0d 06 f9 34  |eldnumber%))...4|
0000d060  20 20 e7 20 97 28 6e 61  6d 65 24 29 3c 35 38 20  |  . .(name$)<58 |
0000d070  80 20 97 28 6e 61 6d 65  24 29 3c 3e 2d 31 20 8c  |. .(name$)<>-1 .|
0000d080  20 6e 61 6d 65 24 3d c1  6e 61 6d 65 24 2c 32 29  | name$=.name$,2)|
0000d090  0d 06 fa 27 20 20 54 61  62 6c 65 6e 75 6d 62 65  |...'  Tablenumbe|
0000d0a0  72 25 3d a4 74 61 62 6c  65 5f 6e 75 6d 62 65 72  |r%=.table_number|
0000d0b0  28 6e 61 6d 65 24 29 0d  06 fb 34 20 20 e7 20 54  |(name$)...4  . T|
0000d0c0  61 62 6c 65 6e 75 6d 62  65 72 25 3c 3e 2d 31 20  |ablenumber%<>-1 |
0000d0d0  8c 20 f2 73 68 6f 77 5f  74 61 62 6c 65 28 54 61  |. .show_table(Ta|
0000d0e0  62 6c 65 6e 75 6d 62 65  72 25 29 0d 06 fc 05 cd  |blenumber%).....|
0000d0f0  0d 06 fd 05 e1 0d 06 fe  05 3a 0d 06 ff 11 dd 20  |.........:..... |
0000d100  f2 76 61 6c 5f 6f 6e 5f  6f 66 66 0d 07 00 08 ea  |.val_on_off.....|
0000d110  20 49 25 0d 07 01 19 76  61 6c 69 64 61 74 65 25  | I%....validate%|
0000d120  3d ac 20 76 61 6c 69 64  61 74 65 25 0d 07 02 1f  |=. validate%....|
0000d130  f2 74 69 63 6b 28 6d 65  6e 75 25 28 32 29 2c 33  |.tick(menu%(2),3|
0000d140  2c 76 61 6c 69 64 61 74  65 25 29 0d 07 03 12 c8  |,validate%).....|
0000d150  8e 20 76 61 6c 69 64 61  74 65 25 20 ca 0d 07 04  |. validate% ....|
0000d160  0a 20 20 c9 20 b9 3a 0d  07 05 18 20 20 e3 20 49  |.  . .:....  . I|
0000d170  25 3d 31 20 b8 20 76 73  74 72 69 6e 67 73 25 0d  |%=1 . vstrings%.|
0000d180  07 06 20 20 20 20 20 24  76 61 6c 69 64 25 28 49  |..     $valid%(I|
0000d190  25 29 3d 24 72 76 61 6c  69 64 25 28 49 25 29 0d  |%)=$rvalid%(I%).|
0000d1a0  07 07 0a 20 20 ed 20 49  25 0d 07 08 0a 20 20 c9  |...  . I%....  .|
0000d1b0  20 a3 3a 0d 07 09 18 20  20 e3 20 49 25 3d 31 20  | .:....  . I%=1 |
0000d1c0  b8 20 76 73 74 72 69 6e  67 73 25 0d 07 0a 24 20  |. vstrings%...$ |
0000d1d0  20 20 20 24 76 61 6c 69  64 25 28 49 25 29 3d 22  |   $valid%(I%)="|
0000d1e0  50 70 74 72 5f 77 72 69  74 65 2c 34 2c 34 22 0d  |Pptr_write,4,4".|
0000d1f0  07 0b 0a 20 20 ed 20 49  25 0d 07 0c 05 cb 0d 07  |...  . I%.......|
0000d200  0d 05 e1 0d 07 0e 05 3a  0d 07 0f 1d dd 20 f2 73  |.......:..... .s|
0000d210  61 76 65 5f 63 6c 69 63  6b 28 77 69 25 2c 69 63  |ave_click(wi%,ic|
0000d220  25 2c 62 25 29 0d 07 10  0b ea 20 70 24 2c 48 24  |%,b%)..... p$,H$|
0000d230  0d 07 11 15 62 75 74 74  25 3d 28 62 25 20 80 20  |....butt%=(b% . |
0000d240  25 31 31 31 29 0d 07 12  0c c8 8e 20 77 69 25 20  |%111)...... wi% |
0000d250  ca 0d 07 13 0f 20 20 c9  20 73 61 76 65 57 25 3a  |.....  . saveW%:|
0000d260  0d 07 14 1a 20 20 46 69  6c 65 6e 61 6d 65 24 3d  |....  Filename$=|
0000d270  24 53 61 76 65 4e 61 6d  65 25 0d 07 15 14 20 20  |$SaveName%....  |
0000d280  c8 8e 20 73 61 76 65 66  75 6e 63 24 20 ca 0d 07  |.. savefunc$ ...|
0000d290  16 19 20 20 20 20 c9 20  22 4e 65 77 20 64 61 74  |..    . "New dat|
0000d2a0  61 62 61 73 65 22 3a 0d  07 17 0f 20 20 20 20 54  |abase":....    T|
0000d2b0  79 70 65 25 3d 30 0d 07  18 64 20 20 20 20 e7 20  |ype%=0...d    . |
0000d2c0  c0 46 69 6c 65 6e 61 6d  65 24 2c 31 29 3c 3e 22  |.Filename$,1)<>"|
0000d2d0  21 22 20 8c 20 46 69 6c  65 6e 61 6d 65 24 3d 22  |!" . Filename$="|
0000d2e0  21 22 2b 46 69 6c 65 6e  61 6d 65 24 3a 46 69 6c  |!"+Filename$:Fil|
0000d2f0  65 6e 61 6d 65 24 3d c0  46 69 6c 65 6e 61 6d 65  |ename$=.Filename|
0000d300  24 2c 31 30 29 3a 24 53  61 76 65 4e 61 6d 65 25  |$,10):$SaveName%|
0000d310  3d 46 69 6c 65 6e 61 6d  65 24 0d 07 19 18 20 20  |=Filename$....  |
0000d320  20 20 c9 20 22 4c 6f 67  20 63 68 61 6e 67 65 73  |  . "Log changes|
0000d330  22 3a 0d 07 1a 1e 20 20  20 20 54 79 70 65 25 3d  |":....    Type%=|
0000d340  26 66 66 66 3a 73 74 61  72 74 6c 6f 67 25 3d b9  |&fff:startlog%=.|
0000d350  0d 07 1b 19 20 20 20 20  c9 20 22 53 61 76 65 20  |....    . "Save |
0000d360  61 73 20 74 65 78 74 22  3a 0d 07 1c 12 20 20 20  |as text":....   |
0000d370  20 54 79 70 65 25 3d 26  66 66 66 0d 07 1d 37 20  | Type%=&fff...7 |
0000d380  20 20 20 53 74 61 72 74  25 3d 21 74 65 78 74 61  |   Start%=!texta|
0000d390  6e 63 68 6f 72 25 3a 45  6e 64 25 3d 53 74 61 72  |nchor%:End%=Star|
0000d3a0  74 25 2b 43 6f 75 6e 74  25 2a 4c 65 6e 4c 69 6e  |t%+Count%*LenLin|
0000d3b0  65 25 0d 07 1e 16 20 20  20 20 24 53 74 61 72 74  |e%....    $Start|
0000d3c0  25 3d 70 69 74 63 68 24  0d 07 1f 16 20 20 20 20  |%=pitch$....    |
0000d3d0  c9 20 22 53 61 76 65 20  6c 69 73 74 22 3a 0d 07  |. "Save list":..|
0000d3e0  20 20 20 20 20 20 54 79  70 65 25 3d 26 66 66 66  |      Type%=&fff|
0000d3f0  3a 73 61 76 65 74 6f 66  69 6c 65 25 3d b9 0d 07  |:savetofile%=...|
0000d400  21 16 20 20 20 20 c9 20  22 53 61 76 65 20 74 65  |!.    . "Save te|
0000d410  78 74 22 3a 0d 07 22 13  20 20 20 20 54 79 70 65  |xt":..".    Type|
0000d420  25 3d 26 66 66 66 3a 0d  07 23 3d 20 20 20 20 6c  |%=&fff:..#=    l|
0000d430  65 6e 25 3d a4 62 6c 6f  62 5f 70 61 74 68 28 b9  |en%=.blob_path(.|
0000d440  2c 24 64 61 74 61 62 61  73 65 25 2c 52 45 43 25  |,$database%,REC%|
0000d450  2c 46 69 65 6c 64 6e 75  6d 62 65 72 25 2c 33 36  |,Fieldnumber%,36|
0000d460  2c 66 24 29 0d 07 24 37  20 20 20 20 f2 65 78 74  |,f$)..$7    .ext|
0000d470  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
0000d480  67 5f 62 6c 6f 63 6b 28  73 61 76 65 61 6e 63 68  |g_block(saveanch|
0000d490  6f 72 25 2c 6c 65 6e 25  2b 31 29 0d 07 25 28 20  |or%,len%+1)..%( |
0000d4a0  20 20 20 c8 99 20 22 4f  53 5f 46 69 6c 65 22 2c  |   .. "OS_File",|
0000d4b0  32 35 35 2c 66 24 2c 21  73 61 76 65 61 6e 63 68  |255,f$,!saveanch|
0000d4c0  6f 72 25 0d 07 26 2c 20  20 20 20 53 74 61 72 74  |or%..&,    Start|
0000d4d0  25 3d 21 73 61 76 65 61  6e 63 68 6f 72 25 3a 45  |%=!saveanchor%:E|
0000d4e0  6e 64 25 3d 53 74 61 72  74 25 2b 6c 65 6e 25 0d  |nd%=Start%+len%.|
0000d4f0  07 27 18 20 20 20 20 c9  20 22 53 61 76 65 20 73  |.'.    . "Save s|
0000d500  70 72 69 74 65 22 3a 0d  07 28 12 20 20 20 20 54  |prite":..(.    T|
0000d510  79 70 65 25 3d 26 66 66  39 0d 07 29 3d 20 20 20  |ype%=&ff9..)=   |
0000d520  20 6c 65 6e 25 3d a4 62  6c 6f 62 5f 70 61 74 68  | len%=.blob_path|
0000d530  28 b9 2c 24 64 61 74 61  62 61 73 65 25 2c 52 45  |(.,$database%,RE|
0000d540  43 25 2c 46 69 65 6c 64  6e 75 6d 62 65 72 25 2c  |C%,Fieldnumber%,|
0000d550  33 37 2c 66 24 29 0d 07  2a 37 20 20 20 20 f2 65  |37,f$)..*7    .e|
0000d560  78 74 65 6e 64 5f 6e 61  6d 65 64 5f 73 6c 69 64  |xtend_named_slid|
0000d570  69 6e 67 5f 62 6c 6f 63  6b 28 73 61 76 65 61 6e  |ing_block(savean|
0000d580  63 68 6f 72 25 2c 6c 65  6e 25 2b 31 29 0d 07 2b  |chor%,len%+1)..+|
0000d590  28 20 20 20 20 c8 99 20  22 4f 53 5f 46 69 6c 65  |(    .. "OS_File|
0000d5a0  22 2c 32 35 35 2c 66 24  2c 21 73 61 76 65 61 6e  |",255,f$,!savean|
0000d5b0  63 68 6f 72 25 0d 07 2c  2c 20 20 20 20 53 74 61  |chor%..,,    Sta|
0000d5c0  72 74 25 3d 21 73 61 76  65 61 6e 63 68 6f 72 25  |rt%=!saveanchor%|
0000d5d0  3a 45 6e 64 25 3d 53 74  61 72 74 25 2b 6c 65 6e  |:End%=Start%+len|
0000d5e0  25 0d 07 2d 16 20 20 20  20 c9 20 22 53 61 76 65  |%..-.    . "Save|
0000d5f0  20 64 72 61 77 22 3a 0d  07 2e 12 20 20 20 20 54  | draw":....    T|
0000d600  79 70 65 25 3d 26 61 66  66 0d 07 2f 3d 20 20 20  |ype%=&aff../=   |
0000d610  20 6c 65 6e 25 3d a4 62  6c 6f 62 5f 70 61 74 68  | len%=.blob_path|
0000d620  28 b9 2c 24 64 61 74 61  62 61 73 65 25 2c 52 45  |(.,$database%,RE|
0000d630  43 25 2c 46 69 65 6c 64  6e 75 6d 62 65 72 25 2c  |C%,Fieldnumber%,|
0000d640  33 38 2c 66 24 29 0d 07  30 37 20 20 20 20 f2 65  |38,f$)..07    .e|
0000d650  78 74 65 6e 64 5f 6e 61  6d 65 64 5f 73 6c 69 64  |xtend_named_slid|
0000d660  69 6e 67 5f 62 6c 6f 63  6b 28 73 61 76 65 61 6e  |ing_block(savean|
0000d670  63 68 6f 72 25 2c 6c 65  6e 25 2b 31 29 0d 07 31  |chor%,len%+1)..1|
0000d680  28 20 20 20 20 c8 99 20  22 4f 53 5f 46 69 6c 65  |(    .. "OS_File|
0000d690  22 2c 32 35 35 2c 66 24  2c 21 73 61 76 65 61 6e  |",255,f$,!savean|
0000d6a0  63 68 6f 72 25 0d 07 32  2c 20 20 20 20 53 74 61  |chor%..2,    Sta|
0000d6b0  72 74 25 3d 21 73 61 76  65 61 6e 63 68 6f 72 25  |rt%=!saveanchor%|
0000d6c0  3a 45 6e 64 25 3d 53 74  61 72 74 25 2b 6c 65 6e  |:End%=Start%+len|
0000d6d0  25 0d 07 33 19 20 20 20  20 c9 20 22 53 61 76 65  |%..3.    . "Save|
0000d6e0  20 6f 70 74 69 6f 6e 73  22 3a 0d 07 34 12 20 20  | options":..4.  |
0000d6f0  20 20 54 79 70 65 25 3d  26 37 66 35 0d 07 35 17  |  Type%=&7f5..5.|
0000d700  20 20 20 20 c9 20 22 53  61 76 65 20 71 75 65 72  |    . "Save quer|
0000d710  79 22 3a 0d 07 36 43 20  20 20 20 53 74 61 72 74  |y":..6C    Start|
0000d720  25 3d a4 74 65 78 74 28  6d 61 74 63 68 57 25 2c  |%=.text(matchW%,|
0000d730  30 29 3a 45 6e 64 25 3d  53 74 61 72 74 25 2b a9  |0):End%=Start%+.|
0000d740  28 24 53 74 61 72 74 25  29 2b 31 3a 54 79 70 65  |($Start%)+1:Type|
0000d750  25 3d 26 37 66 34 0d 07  37 1b 20 20 20 20 c9 20  |%=&7f4..7.    . |
0000d760  22 53 61 76 65 20 73 65  6c 65 63 74 69 6f 6e 22  |"Save selection"|
0000d770  3a 0d 07 38 31 20 20 20  20 50 25 3d 73 61 76 65  |:..81    P%=save|
0000d780  62 75 66 66 25 3a 24 50  25 3d 70 72 69 6e 74 6f  |buff%:$P%=printo|
0000d790  72 64 65 72 24 3a 50 25  2b 3d a9 28 24 50 25 29  |rder$:P%+=.($P%)|
0000d7a0  2b 31 0d 07 39 1b 20 20  20 20 e3 20 54 25 3d 30  |+1..9.    . T%=0|
0000d7b0  20 b8 20 4c 61 73 74 54  61 62 6c 65 25 0d 07 3a  | . LastTable%..:|
0000d7c0  27 20 20 20 20 20 24 50  25 3d 70 72 69 6e 74 72  |'     $P%=printr|
0000d7d0  65 6c 24 28 54 25 29 3a  50 25 2b 3d a9 28 24 50  |el$(T%):P%+=.($P|
0000d7e0  25 29 2b 31 0d 07 3b 0c  20 20 20 20 ed 20 54 25  |%)+1..;.    . T%|
0000d7f0  0d 07 3c 3e 20 20 20 20  53 74 61 72 74 25 3d 73  |..<>    Start%=s|
0000d800  61 76 65 62 75 66 66 25  3a 45 6e 64 25 3d 53 74  |avebuff%:End%=St|
0000d810  61 72 74 25 2b 50 25 2d  73 61 76 65 62 75 66 66  |art%+P%-savebuff|
0000d820  25 2b 31 3a 54 79 70 65  25 3d 26 37 46 33 0d 07  |%+1:Type%=&7F3..|
0000d830  3d 17 20 20 20 20 c9 20  22 53 61 76 65 20 74 61  |=.    . "Save ta|
0000d840  62 6c 65 22 3a 0d 07 3e  47 20 20 20 20 24 54 61  |ble":..>G    $Ta|
0000d850  62 54 69 74 6c 65 25 3d  a4 74 61 62 6c 65 5f 69  |bTitle%=.table_i|
0000d860  6e 66 6f 28 54 25 2c 52  6f 77 73 25 2c 54 61 62  |nfo(T%,Rows%,Tab|
0000d870  46 69 65 6c 64 73 25 2c  52 65 63 25 2c 74 61 62  |Fields%,Rec%,tab|
0000d880  66 69 65 6c 64 6c 65 6e  25 28 29 29 0d 07 3f 44  |fieldlen%())..?D|
0000d890  20 20 20 20 53 74 61 72  74 25 3d 21 74 61 62 61  |    Start%=!taba|
0000d8a0  6e 63 68 6f 72 25 28 54  25 29 3a 45 6e 64 25 3d  |nchor%(T%):End%=|
0000d8b0  53 74 61 72 74 25 2b 31  36 30 2b 52 6f 77 73 25  |Start%+160+Rows%|
0000d8c0  2a 52 65 63 25 3a 54 79  70 65 25 3d 26 37 66 31  |*Rec%:Type%=&7f1|
0000d8d0  0d 07 40 1b 20 20 20 20  c9 20 22 53 61 76 65 20  |..@.    . "Save |
0000d8e0  66 6f 72 6d 20 66 69 6c  65 22 3a 0d 07 41 12 20  |form file":..A. |
0000d8f0  20 20 20 54 79 70 65 25  3d 26 37 66 32 0d 07 42  |   Type%=&7f2..B|
0000d900  1a 20 20 20 20 f2 6c 69  74 28 6d 65 6e 75 25 28  |.    .lit(menu%(|
0000d910  39 29 2c 33 2c b9 29 0d  07 43 1a 20 20 20 20 f2  |9),3,.)..C.    .|
0000d920  6c 69 74 28 6d 65 6e 75  25 28 39 29 2c 34 2c b9  |lit(menu%(9),4,.|
0000d930  29 0d 07 44 33 20 20 20  20 e7 20 61 64 6a 75 73  |)..D3    . adjus|
0000d940  74 25 3d a3 20 80 20 a4  66 69 72 73 74 5f 66 69  |t%=. . .first_fi|
0000d950  65 6c 64 3e 30 20 8c 20  f2 64 65 66 61 75 6c 74  |eld>0 . .default|
0000d960  5f 6b 65 79 0d 07 45 07  20 20 cb 0d 07 46 12 20  |_key..E.  ...F. |
0000d970  20 c9 20 73 61 76 65 73  75 62 57 25 3a 0d 07 47  | . savesubW%:..G|
0000d980  14 20 20 c8 8e 20 73 61  76 65 66 75 6e 63 24 20  |.  .. savefunc$ |
0000d990  ca 0d 07 48 1a 20 20 20  20 c9 20 22 45 78 70 6f  |...H.    . "Expo|
0000d9a0  72 74 20 73 75 62 73 65  74 22 3a 0d 07 49 23 20  |rt subset":..I# |
0000d9b0  20 20 20 46 69 6c 65 6e  61 6d 65 24 3d 24 53 75  |   Filename$=$Su|
0000d9c0  62 4e 61 6d 65 25 3a 54  79 70 65 25 3d 30 0d 07  |bName%:Type%=0..|
0000d9d0  4a 17 20 20 20 20 c9 20  22 45 78 70 6f 72 74 20  |J.    . "Export |
0000d9e0  43 53 56 22 3a 0d 07 4b  26 20 20 20 20 46 69 6c  |CSV":..K&    Fil|
0000d9f0  65 6e 61 6d 65 24 3d 24  53 75 62 4e 61 6d 65 25  |ename$=$SubName%|
0000da00  3a 54 79 70 65 25 3d 26  64 66 65 0d 07 4c 07 20  |:Type%=&dfe..L. |
0000da10  20 cb 0d 07 4d 05 cb 0d  07 4e 0c c8 8e 20 69 63  | ...M....N... ic|
0000da20  25 20 ca 0d 07 4f 0a 20  20 c9 20 31 3a 0d 07 50  |% ...O.  . 1:..P|
0000da30  32 20 20 e7 20 28 62 25  20 80 20 25 31 31 31 31  |2  . (b% . %1111|
0000da40  30 30 30 30 29 3e 30 20  8c 20 f2 69 6e 69 74 5f  |0000)>0 . .init_|
0000da50  64 72 61 67 28 77 69 25  2c 69 63 25 2c 35 29 0d  |drag(wi%,ic%,5).|
0000da60  07 51 0a 20 20 c9 20 32  3a 0d 07 52 1b 20 20 e7  |.Q.  . 2:..R.  .|
0000da70  20 a7 46 69 6c 65 6e 61  6d 65 24 2c 22 2e 22 29  | .Filename$,".")|
0000da80  3e 30 20 8c 0d 07 53 37  20 20 20 20 e7 20 62 75  |>0 ...S7    . bu|
0000da90  74 74 25 3c 3e 32 20 8c  20 f2 73 61 76 65 28 46  |tt%<>2 . .save(F|
0000daa0  69 6c 65 6e 61 6d 65 24  2c 54 79 70 65 25 2c 53  |ilename$,Type%,S|
0000dab0  74 61 72 74 25 2c 45 6e  64 25 29 0d 07 54 2c 20  |tart%,End%)..T, |
0000dac0  20 20 20 e7 20 62 75 74  74 25 3d 34 20 8c 20 c8  |   . butt%=4 . .|
0000dad0  99 20 22 57 69 6d 70 5f  43 72 65 61 74 65 4d 65  |. "Wimp_CreateMe|
0000dae0  6e 75 22 2c 2c 2d 31 0d  07 55 1b 20 20 20 20 cc  |nu",,-1..U.    .|
0000daf0  20 f2 73 6f 66 74 65 72  72 6f 72 28 22 22 2c 33  | .softerror("",3|
0000db00  33 29 0d 07 56 07 20 20  cd 0d 07 57 42 20 20 c9  |3)..V.  ...WB  .|
0000db10  20 31 32 3a e7 20 62 75  74 74 25 3d 32 20 84 20  | 12:. butt%=2 . |
0000db20  62 75 74 74 25 3d 34 20  8c 20 f2 73 68 6f 77 5f  |butt%=4 . .show_|
0000db30  6d 65 6e 75 28 6d 65 6e  75 25 28 31 35 29 2c 78  |menu(menu%(15),x|
0000db40  25 2d 36 34 2c 79 25 2d  32 30 29 0d 07 58 42 20  |%-64,y%-20)..XB |
0000db50  20 c9 20 31 33 3a e7 20  62 75 74 74 25 3d 32 20  | . 13:. butt%=2 |
0000db60  84 20 62 75 74 74 25 3d  34 20 8c 20 f2 73 68 6f  |. butt%=4 . .sho|
0000db70  77 5f 6d 65 6e 75 28 6d  65 6e 75 25 28 32 30 29  |w_menu(menu%(20)|
0000db80  2c 78 25 2d 36 34 2c 79  25 2d 32 30 29 0d 07 59  |,x%-64,y%-20)..Y|
0000db90  1e 20 20 c9 20 35 3a f2  63 6f 6d 6d 6f 6e 63 61  |.  . 5:.commonca|
0000dba0  73 65 28 77 69 25 2c 69  63 25 29 0d 07 5a 05 cb  |se(wi%,ic%)..Z..|
0000dbb0  0d 07 5b 05 e1 0d 07 5c  05 3a 0d 07 5d 10 dd 20  |..[....\.:..].. |
0000dbc0  f2 6b 65 79 5f 63 6c 69  63 6b 0d 07 5e 08 ea 20  |.key_click..^.. |
0000dbd0  4a 25 0d 07 5f 12 c8 8e  20 62 25 20 80 20 25 31  |J%.._... b% . %1|
0000dbe0  31 31 20 ca 0d 07 60 0e  20 20 c9 20 34 3a 7a 25  |11 ...`.  . 4:z%|
0000dbf0  3d 31 0d 07 61 0f 20 20  c9 20 31 3a 7a 25 3d 2d  |=1..a.  . 1:z%=-|
0000dc00  31 0d 07 62 05 cb 0d 07  63 0c c8 8e 20 69 63 25  |1..b....c... ic%|
0000dc10  20 ca 0d 07 64 29 20 20  c9 20 31 36 3a f2 6b 63  | ...d)  . 16:.kc|
0000dc20  79 63 6c 65 28 4b 65 79  66 6c 64 30 25 2c 46 31  |ycle(Keyfld0%,F1|
0000dc30  64 6b 65 79 25 2c 30 2c  7a 25 29 0d 07 65 2a 20  |dkey%,0,z%)..e* |
0000dc40  20 c9 20 31 37 3a f2 6b  63 79 63 6c 65 28 4b 65  | . 17:.kcycle(Ke|
0000dc50  79 66 6c 64 30 25 2c 46  31 64 6b 65 79 25 2c 30  |yfld0%,F1dkey%,0|
0000dc60  2c 2d 7a 25 29 0d 07 66  29 20 20 c9 20 31 38 3a  |,-z%)..f)  . 18:|
0000dc70  f2 6b 63 79 63 6c 65 28  4b 65 79 66 6c 64 31 25  |.kcycle(Keyfld1%|
0000dc80  2c 46 32 64 6b 65 79 25  2c 31 2c 7a 25 29 0d 07  |,F2dkey%,1,z%)..|
0000dc90  67 2a 20 20 c9 20 31 39  3a f2 6b 63 79 63 6c 65  |g*  . 19:.kcycle|
0000dca0  28 4b 65 79 66 6c 64 31  25 2c 46 32 64 6b 65 79  |(Keyfld1%,F2dkey|
0000dcb0  25 2c 31 2c 2d 7a 25 29  0d 07 68 0b 20 20 c9 20  |%,1,-z%)..h.  . |
0000dcc0  32 31 3a 0d 07 69 32 20  20 f2 74 69 63 6b 5f 6f  |21:..i2  .tick_o|
0000dcd0  6e 65 28 66 69 65 6c 64  6d 65 6e 75 25 2c 30 2c  |ne(fieldmenu%,0,|
0000dce0  66 69 65 6c 64 73 25 2d  31 2c 4b 65 79 66 6c 64  |fields%-1,Keyfld|
0000dcf0  30 25 2d 31 29 0d 07 6a  3e 20 20 f2 73 68 6f 77  |0%-1)..j>  .show|
0000dd00  5f 6d 65 6e 75 28 66 69  65 6c 64 6d 65 6e 75 25  |_menu(fieldmenu%|
0000dd10  2c 6f 6c 64 78 25 2b 33  32 2c 6f 6c 64 79 25 29  |,oldx%+32,oldy%)|
0000dd20  3a 66 69 65 6c 64 66 75  6e 63 24 3d 22 66 69 72  |:fieldfunc$="fir|
0000dd30  73 74 22 0d 07 6b 0b 20  20 c9 20 32 32 3a 0d 07  |st"..k.  . 22:..|
0000dd40  6c 32 20 20 f2 74 69 63  6b 5f 6f 6e 65 28 66 69  |l2  .tick_one(fi|
0000dd50  65 6c 64 6d 65 6e 75 25  2c 30 2c 66 69 65 6c 64  |eldmenu%,0,field|
0000dd60  73 25 2d 31 2c 4b 65 79  66 6c 64 31 25 2d 31 29  |s%-1,Keyfld1%-1)|
0000dd70  0d 07 6d 3f 20 20 f2 73  68 6f 77 5f 6d 65 6e 75  |..m?  .show_menu|
0000dd80  28 66 69 65 6c 64 6d 65  6e 75 25 2c 6f 6c 64 78  |(fieldmenu%,oldx|
0000dd90  25 2b 33 32 2c 6f 6c 64  79 25 29 3a 66 69 65 6c  |%+32,oldy%):fiel|
0000dda0  64 66 75 6e 63 24 3d 22  73 65 63 6f 6e 64 22 0d  |dfunc$="second".|
0000ddb0  07 6e 0a 20 20 c9 20 37  3a 0d 07 6f 21 20 20 e7  |.n.  . 7:..o!  .|
0000ddc0  20 6b 65 79 66 75 6e 63  24 3c 3e 22 43 75 72 72  | keyfunc$<>"Curr|
0000ddd0  65 6e 74 20 6b 65 79 22  20 8c 0d 07 70 2f 20 20  |ent key" ...p/  |
0000dde0  20 20 6b 65 79 6c 69 6d  69 74 25 3d 6c 65 6e 25  |  keylimit%=len%|
0000ddf0  28 4b 65 79 66 6c 64 30  25 29 2b 6c 65 6e 25 28  |(Keyfld0%)+len%(|
0000de00  4b 65 79 66 6c 64 31 25  29 0d 07 71 12 20 20 20  |Keyfld1%)..q.   |
0000de10  20 e3 20 4a 25 3d 30 20  b8 20 33 0d 07 72 1f 20  | . J%=0 . 3..r. |
0000de20  20 20 20 20 20 57 44 25  28 4a 25 29 3d bb 28 24  |     WD%(J%)=.($|
0000de30  57 6b 65 79 25 28 4a 25  29 29 0d 07 73 0c 20 20  |Wkey%(J%))..s.  |
0000de40  20 20 ed 20 4a 25 0d 07  74 0e 20 20 20 20 c8 8e  |  . J%..t.    ..|
0000de50  20 b9 20 ca 0d 07 75 31  20 20 20 20 20 20 c9 20  | . ...u1      . |
0000de60  c6 8e 28 57 44 25 28 29  29 3e 6b 65 79 6c 69 6d  |..(WD%())>keylim|
0000de70  69 74 25 3a f2 73 6f 66  74 65 72 72 6f 72 28 22  |it%:.softerror("|
0000de80  22 2c 32 36 29 0d 07 76  0c 20 20 20 20 20 20 7f  |",26)..v.      .|
0000de90  3a 0d 07 77 17 20 20 20  20 20 20 c8 8e 20 6b 65  |:..w.      .. ke|
0000dea0  79 66 75 6e 63 24 20 ca  0d 07 78 1c 20 20 20 20  |yfunc$ ...x.    |
0000deb0  20 20 20 20 c9 20 22 50  72 69 6d 61 72 79 20 6b  |    . "Primary k|
0000dec0  65 79 22 3a 0d 07 79 12  20 20 20 20 20 20 20 20  |ey":..y.        |
0000ded0  6b 65 79 25 3d 30 0d 07  7a 1f 20 20 20 20 20 20  |key%=0..z.      |
0000dee0  20 20 f2 63 6f 70 79 5f  6b 65 79 64 61 74 61 28  |  .copy_keydata(|
0000def0  6b 65 79 25 29 0d 07 7b  2a 20 20 20 20 20 20 20  |key%)..{*       |
0000df00  20 52 41 25 3d bb 28 24  52 65 63 6f 72 64 73 25  | RA%=.($Records%|
0000df10  29 3a 66 24 3d 24 64 61  74 61 62 61 73 65 25 0d  |):f$=$database%.|
0000df20  07 7c 26 20 20 20 20 20  20 20 20 f2 6d 61 6b 65  |.|&        .make|
0000df30  5f 65 6d 70 74 79 5f 69  6e 64 65 78 28 52 41 25  |_empty_index(RA%|
0000df40  2c 30 2c b9 29 0d 07 7d  2a 20 20 20 20 20 20 20  |,0,.)..}*       |
0000df50  20 f2 73 61 76 65 5f 72  65 63 73 28 66 24 2b 22  | .save_recs(f$+"|
0000df60  2e 44 61 74 61 62 61 73  65 22 2c 52 41 25 29 0d  |.Database",RA%).|
0000df70  07 7e 21 20 20 20 20 20  20 20 20 70 72 65 73 65  |.~!        prese|
0000df80  6e 74 25 3d 37 3a f2 73  61 76 65 5f 6b 65 79 73  |nt%=7:.save_keys|
0000df90  0d 07 7f 24 20 20 20 20  20 20 20 20 64 65 73 69  |...$        desi|
0000dfa0  67 6e 25 3d a3 3a f2 67  65 74 5f 69 74 5f 69 6e  |gn%=.:.get_it_in|
0000dfb0  28 66 24 29 0d 07 80 30  20 20 20 20 20 20 20 20  |(f$)...0        |
0000dfc0  c9 20 22 4e 65 77 20 70  72 69 6d 61 72 79 20 6b  |. "New primary k|
0000dfd0  65 79 22 3a f2 6e 65 77  5f 74 72 65 65 28 66 69  |ey":.new_tree(fi|
0000dfe0  6c 65 25 29 0d 07 81 29  20 20 20 20 20 20 20 20  |le%)...)        |
0000dff0  c9 20 22 49 6e 64 65 78  20 66 69 65 6c 64 22 3a  |. "Index field":|
0000e000  f2 63 72 65 61 74 65 5f  69 6e 64 65 78 0d 07 82  |.create_index...|
0000e010  0b 20 20 20 20 20 20 cb  0d 07 83 09 20 20 20 20  |.      .....    |
0000e020  cb 0d 07 84 07 20 20 cd  0d 07 85 11 20 20 6b 65  |.....  .....  ke|
0000e030  79 66 75 6e 63 24 3d 22  22 0d 07 86 1a 20 20 f2  |yfunc$=""....  .|
0000e040  63 6c 6f 73 65 5f 77 69  6e 64 6f 77 28 6b 65 79  |close_window(key|
0000e050  57 25 29 0d 07 87 05 cb  0d 07 88 05 e1 0d 07 89  |W%).............|
0000e060  05 3a 0d 07 8a 1b dd 20  f2 73 68 61 64 65 5f 6b  |.:..... .shade_k|
0000e070  65 79 5f 69 63 6f 6e 73  28 6f 6e 25 29 0d 07 8b  |ey_icons(on%)...|
0000e080  10 e3 20 49 25 3d 31 36  20 b8 20 32 30 0d 07 8c  |.. I%=16 . 20...|
0000e090  20 20 20 f2 69 63 6f 6e  5f 62 69 74 28 32 32 2c  |   .icon_bit(22,|
0000e0a0  6b 65 79 57 25 2c 49 25  2c 6f 6e 25 29 0d 07 8d  |keyW%,I%,on%)...|
0000e0b0  08 ed 20 49 25 0d 07 8e  0e e3 20 49 25 3d 32 20  |.. I%..... I%=2 |
0000e0c0  b8 20 35 0d 07 8f 20 20  20 f2 69 63 6f 6e 5f 62  |. 5...   .icon_b|
0000e0d0  69 74 28 32 32 2c 6b 65  79 57 25 2c 49 25 2c 6f  |it(22,keyW%,I%,o|
0000e0e0  6e 25 29 0d 07 90 08 ed  20 49 25 0d 07 91 05 e1  |n%)..... I%.....|
0000e0f0  0d 07 92 05 3a 0d 07 93  1f dd 20 f2 6b 63 79 63  |....:..... .kcyc|
0000e100  6c 65 28 f8 20 46 25 2c  54 25 2c 69 63 6f 6e 25  |le(. F%,T%,icon%|
0000e110  2c 7a 25 29 0d 07 94 0a  46 25 2b 3d 7a 25 0d 07  |,z%)....F%+=z%..|
0000e120  95 17 e7 20 46 25 3e 66  69 65 6c 64 73 25 20 8c  |... F%>fields% .|
0000e130  20 46 25 3d 30 0d 07 96  17 e7 20 46 25 3c 30 20  | F%=0..... F%<0 |
0000e140  8c 20 46 25 3d 66 69 65  6c 64 73 25 0d 07 97 22  |. F%=fields%..."|
0000e150  e7 20 46 25 3e 30 20 8c  20 24 54 25 3d 54 61 67  |. F%>0 . $T%=Tag|
0000e160  24 28 46 25 29 20 8b 20  24 54 25 3d 22 22 0d 07  |$(F%) . $T%=""..|
0000e170  98 1d f2 72 65 64 72 61  77 5f 69 63 6f 6e 28 6b  |...redraw_icon(k|
0000e180  65 79 57 25 2c 69 63 6f  6e 25 29 0d 07 99 2a f2  |eyW%,icon%)...*.|
0000e190  74 69 63 6b 5f 6f 6e 65  28 66 69 65 6c 64 6d 65  |tick_one(fieldme|
0000e1a0  6e 75 25 2c 30 2c 66 69  65 6c 64 73 25 2d 31 2c  |nu%,0,fields%-1,|
0000e1b0  46 25 2d 31 29 0d 07 9a  05 e1 0d 07 9b 05 3a 0d  |F%-1).........:.|
0000e1c0  07 9c 19 dd 20 f2 63 6f  70 79 5f 6b 65 79 64 61  |.... .copy_keyda|
0000e1d0  74 61 28 6b 65 79 25 29  0d 07 9d 2d 4b 46 25 28  |ta(key%)...-KF%(|
0000e1e0  6b 65 79 25 2c 30 29 3d  4b 65 79 66 6c 64 30 25  |key%,0)=Keyfld0%|
0000e1f0  3a 4b 46 25 28 6b 65 79  25 2c 31 29 3d 4b 65 79  |:KF%(key%,1)=Key|
0000e200  66 6c 64 31 25 0d 07 9e  17 4b 4c 25 28 6b 65 79  |fld1%....KL%(key|
0000e210  25 29 3d c6 8e 28 57 44  25 28 29 29 0d 07 9f 0e  |%)=..(WD%())....|
0000e220  e3 20 4a 25 3d 30 20 b8  20 33 0d 07 a0 1a 20 20  |. J%=0 . 3....  |
0000e230  4b 57 25 28 6b 65 79 25  2c 4a 25 29 3d 57 44 25  |KW%(key%,J%)=WD%|
0000e240  28 4a 25 29 0d 07 a1 08  ed 20 4a 25 0d 07 a2 23  |(J%)..... J%...#|
0000e250  63 61 73 65 25 28 6b 65  79 25 29 3d a4 73 65 6c  |case%(key%)=.sel|
0000e260  65 63 74 65 64 28 6b 65  79 57 25 2c 32 30 29 0d  |ected(keyW%,20).|
0000e270  07 a3 05 e1 0d 07 a4 05  3a 0d 07 a5 18 dd 20 f2  |........:..... .|
0000e280  73 65 74 5f 6b 65 79 64  61 74 61 28 6b 65 79 25  |set_keydata(key%|
0000e290  29 0d 07 a6 0b ea 20 4a  25 2c 53 24 0d 07 a7 2d  |)..... J%,S$...-|
0000e2a0  4b 65 79 66 6c 64 30 25  3d 4b 46 25 28 6b 65 79  |Keyfld0%=KF%(key|
0000e2b0  25 2c 30 29 3a 4b 65 79  66 6c 64 31 25 3d 4b 46  |%,0):Keyfld1%=KF|
0000e2c0  25 28 6b 65 79 25 2c 31  29 0d 07 a8 1b 24 46 31  |%(key%,1)....$F1|
0000e2d0  64 6b 65 79 25 3d 54 61  67 24 28 4b 65 79 66 6c  |dkey%=Tag$(Keyfl|
0000e2e0  64 30 25 29 0d 07 a9 3b  e7 20 4b 46 25 28 6b 65  |d0%)...;. KF%(ke|
0000e2f0  79 25 2c 31 29 3e 30 20  8c 20 24 46 32 64 6b 65  |y%,1)>0 . $F2dke|
0000e300  79 25 3d 54 61 67 24 28  4b 65 79 66 6c 64 31 25  |y%=Tag$(Keyfld1%|
0000e310  29 20 8b 20 24 46 32 64  6b 65 79 25 3d 22 22 0d  |) . $F2dkey%="".|
0000e320  07 aa 15 6b 65 79 6c 65  6e 25 3d 4b 4c 25 28 6b  |...keylen%=KL%(k|
0000e330  65 79 25 29 0d 07 ab 0e  e3 20 4a 25 3d 30 20 b8  |ey%)..... J%=0 .|
0000e340  20 33 0d 07 ac 30 20 20  57 44 25 28 4a 25 29 3d  | 3...0  WD%(J%)=|
0000e350  4b 57 25 28 6b 65 79 25  2c 4a 25 29 3a 24 57 6b  |KW%(key%,J%):$Wk|
0000e360  65 79 25 28 4a 25 29 3d  c3 28 57 44 25 28 4a 25  |ey%(J%)=.(WD%(J%|
0000e370  29 29 0d 07 ad 08 ed 20  4a 25 0d 07 ae 13 24 4b  |))..... J%....$K|
0000e380  65 79 4e 6f 25 3d c3 28  6b 65 79 25 29 0d 07 af  |eyNo%=.(key%)...|
0000e390  23 f2 73 65 74 5f 69 63  6f 6e 28 6b 65 79 57 25  |#.set_icon(keyW%|
0000e3a0  2c 32 30 2c 63 61 73 65  25 28 6b 65 79 25 29 29  |,20,case%(key%))|
0000e3b0  0d 07 b0 05 e1 0d 07 b1  05 3a 0d 07 b2 15 dd 20  |.........:..... |
0000e3c0  f2 6b 65 79 5f 73 65 6c  65 63 74 28 44 25 29 0d  |.key_select(D%).|
0000e3d0  07 b3 13 f2 63 6f 6c 6f  75 72 28 6b 65 79 25 2c  |....colour(key%,|
0000e3e0  32 29 0d 07 b4 0b c8 8e  20 44 25 20 ca 0d 07 b5  |2)...... D% ....|
0000e3f0  24 20 20 c9 20 2b 31 3a  6b 65 79 25 3d 28 6b 65  |$  . +1:key%=(ke|
0000e400  79 25 2b 31 29 20 83 20  28 4b 65 79 73 25 2b 31  |y%+1) . (Keys%+1|
0000e410  29 0d 07 b6 28 20 20 c9  20 2d 31 3a 6b 65 79 25  |)...(  . -1:key%|
0000e420  2d 3d 31 3a e7 20 6b 65  79 25 3c 30 20 8c 20 6b  |-=1:. key%<0 . k|
0000e430  65 79 25 3d 4b 65 79 73  25 0d 07 b7 05 cb 0d 07  |ey%=Keys%.......|
0000e440  b8 13 f2 63 6f 6c 6f 75  72 28 6b 65 79 25 2c 31  |...colour(key%,1|
0000e450  29 0d 07 b9 16 f2 73 65  74 5f 6b 65 79 64 61 74  |).....set_keydat|
0000e460  61 28 6b 65 79 25 29 0d  07 ba 3e 24 a4 74 65 78  |a(key%)...>$.tex|
0000e470  74 28 6b 65 79 70 61 64  57 25 2c 33 33 29 3d 49  |t(keypadW%,33)=I|
0000e480  6e 64 65 78 24 28 6b 65  79 25 29 3a f2 72 65 64  |ndex$(key%):.red|
0000e490  72 61 77 5f 69 63 6f 6e  28 6b 65 79 70 61 64 57  |raw_icon(keypadW|
0000e4a0  25 2c 33 33 29 0d 07 bb  13 74 6f 70 3d 38 2a 66  |%,33)....top=8*f|
0000e4b0  69 6c 65 25 2b 4c 48 25  0d 07 bc 1c 61 64 64 72  |ile%+LH%....addr|
0000e4c0  3d a4 6d 6f 76 65 74 6f  28 6b 65 79 25 2c 74 6f  |=.moveto(key%,to|
0000e4d0  70 2c 31 29 0d 07 bd 05  e1 0d 07 be 05 3a 0d 07  |p,1).........:..|
0000e4e0  bf 12 dd 20 f2 73 65 74  5f 63 6f 6c 6f 75 72 73  |... .set_colours|
0000e4f0  0d 07 c0 08 ea 20 49 25  0d 07 c1 0c c8 8e 20 69  |..... I%...... i|
0000e500  63 25 20 ca 0d 07 c2 16  20 20 c9 20 30 2c 31 2c  |c% .....  . 0,1,|
0000e510  32 2c 33 2c 34 2c 35 2c  36 3a 0d 07 c3 15 20 20  |2,3,4,5,6:....  |
0000e520  63 6f 6c 25 3d 6e 63 6f  6c 25 28 69 63 25 29 0d  |col%=ncol%(ic%).|
0000e530  07 c4 20 20 20 66 62 25  3d a4 73 65 6c 65 63 74  |..   fb%=.select|
0000e540  65 64 5f 65 73 67 28 63  6f 6c 57 25 2c 32 29 0d  |ed_esg(colW%,2).|
0000e550  07 c5 0e 20 20 c8 8e 20  66 62 25 20 ca 0d 07 c6  |...  .. fb% ....|
0000e560  23 20 20 20 20 c9 20 31  31 3a 63 6f 6c 25 3d 28  |#    . 11:col%=(|
0000e570  63 6f 6c 25 20 80 20 26  46 29 3a 66 62 25 3d 31  |col% . &F):fb%=1|
0000e580  0d 07 c7 28 20 20 20 20  c9 20 31 32 3a 63 6f 6c  |...(    . 12:col|
0000e590  25 3d 28 28 63 6f 6c 25  3e 3e 34 29 20 80 20 26  |%=((col%>>4) . &|
0000e5a0  46 29 3a 66 62 25 3d 30  0d 07 c8 07 20 20 cb 0d  |F):fb%=0....  ..|
0000e5b0  07 c9 14 20 20 c8 8e 20  62 25 20 80 20 25 31 31  |...  .. b% . %11|
0000e5c0  31 20 ca 0d 07 ca 0c 20  20 20 20 c9 20 31 3a 0d  |1 .....    . 1:.|
0000e5d0  07 cb 22 20 20 20 20 63  6f 6c 25 2d 3d 31 3a e7  |.."    col%-=1:.|
0000e5e0  20 63 6f 6c 25 3c 30 20  8c 20 63 6f 6c 25 3d 31  | col%<0 . col%=1|
0000e5f0  35 0d 07 cc 24 20 20 20  20 f2 64 63 6f 6c 6f 75  |5...$    .dcolou|
0000e600  72 28 63 6f 6c 57 25 2c  69 63 25 2c 63 6f 6c 25  |r(colW%,ic%,col%|
0000e610  2c 66 62 25 29 0d 07 cd  0c 20 20 20 20 c9 20 34  |,fb%)....    . 4|
0000e620  3a 0d 07 ce 1a 20 20 20  20 63 6f 6c 25 3d 28 63  |:....    col%=(c|
0000e630  6f 6c 25 2b 31 29 20 83  20 31 36 0d 07 cf 24 20  |ol%+1) . 16...$ |
0000e640  20 20 20 f2 64 63 6f 6c  6f 75 72 28 63 6f 6c 57  |   .dcolour(colW|
0000e650  25 2c 69 63 25 2c 63 6f  6c 25 2c 66 62 25 29 0d  |%,ic%,col%,fb%).|
0000e660  07 d0 07 20 20 cb 0d 07  d1 2a 20 20 6e 63 6f 6c  |...  ....*  ncol|
0000e670  25 28 69 63 25 29 3d a4  67 65 74 5f 69 63 6f 6e  |%(ic%)=.get_icon|
0000e680  5f 63 6f 6c 73 28 63 6f  6c 57 25 2c 69 63 25 29  |_cols(colW%,ic%)|
0000e690  0d 07 d2 0d 20 20 c9 20  39 2c 31 30 3a 0d 07 d3  |....  . 9,10:...|
0000e6a0  15 20 20 66 63 6f 6c 25  28 29 3d 6e 63 6f 6c 25  |.  fcol%()=ncol%|
0000e6b0  28 29 0d 07 d4 14 20 20  e3 20 49 25 3d 30 20 b8  |()....  . I%=0 .|
0000e6c0  20 4b 65 79 73 25 0d 07  d5 15 20 20 20 20 f2 63  | Keys%....    .c|
0000e6d0  6f 6c 6f 75 72 28 49 25  2c 32 29 0d 07 d6 0a 20  |olour(I%,2).... |
0000e6e0  20 ed 20 49 25 0d 07 d7  12 20 20 f2 63 6f 6c 6f  | . I%....  .colo|
0000e6f0  75 72 28 30 2c 30 29 0d  07 d8 15 20 20 f2 63 6f  |ur(0,0)....  .co|
0000e700  6c 6f 75 72 28 6b 65 79  25 2c 31 29 0d 07 d9 16  |lour(key%,1)....|
0000e710  20 20 e3 20 49 25 3d 31  20 b8 20 66 69 65 6c 64  |  . I%=1 . field|
0000e720  73 25 0d 07 da 44 20 20  20 20 e7 20 6c 69 6e 6b  |s%...D    . link|
0000e730  24 28 49 25 29 3c 3e 22  22 20 8c 20 f2 73 65 74  |$(I%)<>"" . .set|
0000e740  5f 69 63 6f 6e 5f 63 6f  6c 73 28 6d 61 69 6e 57  |_icon_cols(mainW|
0000e750  25 2c 66 69 65 6c 64 25  28 49 25 29 2c 6e 63 6f  |%,field%(I%),nco|
0000e760  6c 25 28 36 29 29 0d 07  db 0a 20 20 ed 20 49 25  |l%(6))....  . I%|
0000e770  0d 07 dc 1f 20 20 e7 20  69 63 25 3d 31 30 20 8c  |....  . ic%=10 .|
0000e780  20 f2 77 72 69 74 65 5f  63 6f 6c 6f 75 72 73 0d  | .write_colours.|
0000e790  07 dd 1e 20 20 c8 99 20  22 57 69 6d 70 5f 43 72  |...  .. "Wimp_Cr|
0000e7a0  65 61 74 65 4d 65 6e 75  22 2c 2c 2d 31 0d 07 de  |eateMenu",,-1...|
0000e7b0  0b 20 20 c9 20 31 35 3a  0d 07 df 34 20 20 f2 72  |.  . 15:...4  .r|
0000e7c0  65 61 64 5f 63 6f 6c 6f  75 72 73 28 22 3c 50 62  |ead_colours("<Pb|
0000e7d0  61 73 65 24 44 69 72 3e  2e 52 65 73 6f 75 72 63  |ase$Dir>.Resourc|
0000e7e0  65 73 2e 43 6f 6c 6f 75  72 73 22 29 0d 07 e0 10  |es.Colours")....|
0000e7f0  20 20 e3 20 49 25 3d 30  20 b8 20 36 0d 07 e1 2a  |  . I%=0 . 6...*|
0000e800  20 20 20 20 f2 73 65 74  5f 69 63 6f 6e 5f 63 6f  |    .set_icon_co|
0000e810  6c 73 28 63 6f 6c 57 25  2c 49 25 2c 6e 63 6f 6c  |ls(colW%,I%,ncol|
0000e820  25 28 49 25 29 29 0d 07  e2 0a 20 20 ed 20 49 25  |%(I%))....  . I%|
0000e830  0d 07 e3 05 cb 0d 07 e4  05 e1 0d 07 e5 05 3a 0d  |..............:.|
0000e840  07 e6 13 dd 20 f2 63 72  65 61 74 65 5f 63 6c 69  |.... .create_cli|
0000e850  63 6b 0d 07 e7 0b ea 20  43 61 6c 63 24 0d 07 e8  |ck..... Calc$...|
0000e860  15 62 75 74 74 25 3d 28  62 25 20 80 20 25 31 31  |.butt%=(b% . %11|
0000e870  31 29 0d 07 e9 0e c8 8e  20 62 75 74 74 25 20 ca  |1)...... butt% .|
0000e880  0d 07 ea 0c 20 20 c9 20  32 2c 34 3a 0d 07 eb 3e  |....  . 2,4:...>|
0000e890  20 20 e7 20 69 63 25 3d  33 36 20 8c 20 f2 73 68  |  . ic%=36 . .sh|
0000e8a0  6f 77 5f 6d 65 6e 75 28  6d 65 6e 75 25 28 6d 65  |ow_menu(menu%(me|
0000e8b0  6e 75 6e 75 6d 62 65 72  25 29 2c 6f 6c 64 78 25  |nunumber%),oldx%|
0000e8c0  2b 33 32 2c 6f 6c 64 79  25 29 0d 07 ec 05 cb 0d  |+32,oldy%)......|
0000e8d0  07 ed 2c e7 20 62 75 74  74 25 3d 34 20 8c 20 7a  |..,. butt%=4 . z|
0000e8e0  25 3d 31 20 8b 20 e7 20  62 75 74 74 25 3d 31 20  |%=1 . . butt%=1 |
0000e8f0  8c 20 7a 25 3d 2d 31 20  8b 20 e1 0d 07 ee 0c c8  |. z%=-1 . ......|
0000e900  8e 20 69 63 25 20 ca 0d  07 ef 1f 20 20 c9 20 32  |. ic% .....  . 2|
0000e910  31 3a f2 73 65 74 5f 6c  69 6d 69 74 73 28 31 2c  |1:.set_limits(1,|
0000e920  30 2c 38 2c 38 29 0d 07  f0 23 20 20 c9 20 32 32  |0,8,8)...#  . 22|
0000e930  3a f2 73 65 74 5f 6c 69  6d 69 74 73 28 33 36 2c  |:.set_limits(36,|
0000e940  33 36 2c 34 30 2c 31 31  29 0d 07 f1 21 20 20 c9  |36,40,11)...!  .|
0000e950  20 32 33 3a f2 73 65 74  5f 6c 69 6d 69 74 73 28  | 23:.set_limits(|
0000e960  39 2c 39 2c 33 35 2c 31  39 29 0d 07 f2 23 20 20  |9,9,35,19)...#  |
0000e970  c9 20 32 34 3a f2 73 65  74 5f 6c 69 6d 69 74 73  |. 24:.set_limits|
0000e980  28 34 31 2c 34 31 2c 34  35 2c 31 34 29 0d 07 f3  |(41,41,45,14)...|
0000e990  23 20 20 c9 20 33 35 3a  f2 73 65 74 5f 6c 69 6d  |#  . 35:.set_lim|
0000e9a0  69 74 73 28 34 36 2c 34  36 2c 35 39 2c 31 36 29  |its(46,46,59,16)|
0000e9b0  0d 07 f4 27 20 20 c9 20  31 39 3a f2 63 68 61 6e  |...'  . 19:.chan|
0000e9c0  67 65 5f 74 79 70 65 28  7a 25 2c 6d 65 6e 75 6e  |ge_type(z%,menun|
0000e9d0  75 6d 62 65 72 25 29 0d  07 f5 28 20 20 c9 20 32  |umber%)...(  . 2|
0000e9e0  30 3a f2 63 68 61 6e 67  65 5f 74 79 70 65 28 2d  |0:.change_type(-|
0000e9f0  7a 25 2c 6d 65 6e 75 6e  75 6d 62 65 72 25 29 0d  |z%,menunumber%).|
0000ea00  07 f6 38 20 20 c9 20 31  38 3a f2 63 72 65 61 74  |..8  . 18:.creat|
0000ea10  65 5f 66 69 65 6c 64 28  bb 28 24 49 6e 73 54 65  |e_field(.($InsTe|
0000ea20  78 74 25 29 2c 70 6f 73  78 25 2c 70 6f 73 79 25  |xt%),posx%,posy%|
0000ea30  2c 43 61 6c 63 24 29 0d  07 f7 2e 20 20 c9 20 32  |,Calc$)....  . 2|
0000ea40  39 3a f2 72 65 6d 6f 76  65 5f 66 69 65 6c 64 28  |9:.remove_field(|
0000ea50  46 69 65 6c 64 6e 75 6d  62 65 72 25 2c a3 2c 43  |Fieldnumber%,.,C|
0000ea60  61 6c 63 24 29 0d 07 f8  33 20 20 f2 63 72 65 61  |alc$)...3  .crea|
0000ea70  74 65 5f 66 69 65 6c 64  28 46 69 65 6c 64 6e 75  |te_field(Fieldnu|
0000ea80  6d 62 65 72 25 2c 70 6f  73 78 25 2c 70 6f 73 79  |mber%,posx%,posy|
0000ea90  25 2c 43 61 6c 63 24 29  0d 07 f9 2e 20 20 c9 20  |%,Calc$)....  . |
0000eaa0  33 30 3a f2 72 65 6d 6f  76 65 5f 66 69 65 6c 64  |30:.remove_field|
0000eab0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 2c b9 2c  |(Fieldnumber%,.,|
0000eac0  43 61 6c 63 24 29 0d 07  fa 3d 20 20 c9 20 31 34  |Calc$)...=  . 14|
0000ead0  3a f2 69 63 6f 6e 5f 62  69 74 28 32 32 2c 63 72  |:.icon_bit(22,cr|
0000eae0  65 61 74 65 57 25 2c 31  33 2c 28 a4 73 65 6c 65  |eateW%,13,(.sele|
0000eaf0  63 74 65 64 28 63 72 65  61 74 65 57 25 2c 31 34  |cted(createW%,14|
0000eb00  29 29 29 0d 07 fb 0b 20  20 c9 20 33 39 3a 0d 07  |)))....  . 39:..|
0000eb10  fc 15 20 20 46 25 3d bb  28 24 49 6e 73 54 65 78  |..  F%=.($InsTex|
0000eb20  74 25 29 0d 07 fd 1c 20  20 e7 20 46 25 3e 30 20  |t%)....  . F%>0 |
0000eb30  80 20 46 25 3c 3d 66 69  65 6c 64 73 25 20 8c 0d  |. F%<=fields% ..|
0000eb40  07 fe 28 20 20 20 20 e7  20 46 25 3c 46 69 65 6c  |..(    . F%<Fiel|
0000eb50  64 6e 75 6d 62 65 72 25  20 8c 20 5a 25 3d 2d 31  |dnumber% . Z%=-1|
0000eb60  20 8b 20 5a 25 3d 31 0d  07 ff 28 20 20 20 20 f2  | . Z%=1...(    .|
0000eb70  72 65 5f 73 65 71 75 65  6e 63 65 28 46 69 65 6c  |re_sequence(Fiel|
0000eb80  64 6e 75 6d 62 65 72 25  2c 46 25 2c 5a 25 29 0d  |dnumber%,F%,Z%).|
0000eb90  08 00 07 20 20 cd 0d 08  01 1d 20 20 f2 63 6c 6f  |...  .....  .clo|
0000eba0  73 65 5f 77 69 6e 64 6f  77 28 63 72 65 61 74 65  |se_window(create|
0000ebb0  57 25 29 0d 08 02 32 20  20 c9 20 34 30 3a f2 73  |W%)...2  . 40:.s|
0000ebc0  77 61 70 5f 66 69 65 6c  64 73 28 46 69 65 6c 64  |wap_fields(Field|
0000ebd0  6e 75 6d 62 65 72 25 2c  bb 28 24 49 6e 73 54 65  |number%,.($InsTe|
0000ebe0  78 74 25 29 29 0d 08 03  05 cb 0d 08 04 0f f2 75  |xt%))..........u|
0000ebf0  70 64 61 74 65 5f 62 6f  78 0d 08 05 35 e7 20 28  |pdate_box...5. (|
0000ec00  70 72 65 73 65 6e 74 25  20 80 20 34 29 3d 30 20  |present% . 4)=0 |
0000ec10  8c 20 f2 6c 69 74 28 6d  65 6e 75 25 28 39 29 2c  |. .lit(menu%(9),|
0000ec20  31 2c 28 66 69 65 6c 64  73 25 3e 30 29 29 0d 08  |1,(fields%>0))..|
0000ec30  06 0c c8 8e 20 69 63 25  20 ca 0d 08 07 11 20 20  |.... ic% .....  |
0000ec40  c9 20 31 38 2c 32 39 2c  33 30 3a 0d 08 08 11 20  |. 18,29,30:.... |
0000ec50  20 e7 20 62 75 74 74 25  3d 34 20 8c 0d 08 09 1f  | . butt%=4 .....|
0000ec60  20 20 20 20 f2 63 6c 6f  73 65 5f 77 69 6e 64 6f  |    .close_windo|
0000ec70  77 28 63 72 65 61 74 65  57 25 29 0d 08 0a 09 20  |w(createW%).... |
0000ec80  20 20 20 cc 0d 08 0b 23  20 20 20 20 f2 69 63 6f  |   ....#    .ico|
0000ec90  6e 5f 62 69 74 28 32 32  2c 63 72 65 61 74 65 57  |n_bit(22,createW|
0000eca0  25 2c 31 38 2c a3 29 0d  08 0c 2b 20 20 20 20 f2  |%,18,.)...+    .|
0000ecb0  69 63 6f 6e 5f 62 69 74  28 32 32 2c 63 72 65 61  |icon_bit(22,crea|
0000ecc0  74 65 57 25 2c 33 30 2c  ac 20 61 64 6a 75 73 74  |teW%,30,. adjust|
0000ecd0  25 29 0d 08 0d 23 20 20  20 20 f2 69 63 6f 6e 5f  |%)...#    .icon_|
0000ece0  62 69 74 28 32 32 2c 63  72 65 61 74 65 57 25 2c  |bit(22,createW%,|
0000ecf0  32 39 2c b9 29 0d 08 0e  1c 20 20 20 20 46 69 65  |29,.)....    Fie|
0000ed00  6c 64 6e 75 6d 62 65 72  25 3d 66 69 65 6c 64 73  |ldnumber%=fields|
0000ed10  25 0d 08 0f 07 20 20 cd  0d 08 10 05 cb 0d 08 11  |%....  .........|
0000ed20  05 e1 0d 08 12 05 3a 0d  08 13 11 dd 20 f2 75 70  |......:..... .up|
0000ed30  64 61 74 65 5f 62 6f 78  0d 08 14 13 c8 8e 20 66  |date_box...... f|
0000ed40  69 65 6c 64 74 79 70 65  25 20 ca 0d 08 15 46 20  |ieldtype% ....F |
0000ed50  20 c9 20 30 2c 31 2c 32  2c 33 2c 34 2c 35 2c 36  | . 0,1,2,3,4,5,6|
0000ed60  2c 37 2c 34 36 2c 34 37  3a e7 20 ac 20 61 64 6a  |,7,46,47:. . adj|
0000ed70  75 73 74 25 20 8c 20 f2  69 63 6f 6e 5f 62 69 74  |ust% . .icon_bit|
0000ed80  28 32 32 2c 63 72 65 61  74 65 57 25 2c 36 2c b9  |(22,createW%,6,.|
0000ed90  29 0d 08 16 22 20 20 7f  3a f2 69 63 6f 6e 5f 62  |)..."  .:.icon_b|
0000eda0  69 74 28 32 32 2c 63 72  65 61 74 65 57 25 2c 36  |it(22,createW%,6|
0000edb0  2c a3 29 0d 08 17 05 cb  0d 08 18 3b f2 69 63 6f  |,.)........;.ico|
0000edc0  6e 5f 62 69 74 28 32 32  2c 63 72 65 61 74 65 57  |n_bit(22,createW|
0000edd0  25 2c 31 34 2c 28 66 69  65 6c 64 74 79 70 65 25  |%,14,(fieldtype%|
0000ede0  3d 33 20 84 20 66 69 65  6c 64 74 79 70 65 25 3d  |=3 . fieldtype%=|
0000edf0  36 29 29 0d 08 19 54 f2  69 63 6f 6e 5f 62 69 74  |6))...T.icon_bit|
0000ee00  28 32 32 2c 63 72 65 61  74 65 57 25 2c 31 33 2c  |(22,createW%,13,|
0000ee10  28 66 69 65 6c 64 74 79  70 65 25 3d 33 20 84 20  |(fieldtype%=3 . |
0000ee20  66 69 65 6c 64 74 79 70  65 25 3d 36 29 20 80 20  |fieldtype%=6) . |
0000ee30  a4 73 65 6c 65 63 74 65  64 28 63 72 65 61 74 65  |.selected(create|
0000ee40  57 25 2c 31 34 29 29 0d  08 1a 3c f2 69 63 6f 6e  |W%,14))...<.icon|
0000ee50  5f 62 69 74 28 32 32 2c  63 72 65 61 74 65 57 25  |_bit(22,createW%|
0000ee60  2c 31 35 2c 28 66 69 65  6c 64 74 79 70 65 25 3d  |,15,(fieldtype%=|
0000ee70  33 20 84 20 66 69 65 6c  64 74 79 70 65 25 3d 34  |3 . fieldtype%=4|
0000ee80  37 29 29 0d 08 1b 2c f2  69 63 6f 6e 5f 62 69 74  |7))...,.icon_bit|
0000ee90  28 32 32 2c 63 72 65 61  74 65 57 25 2c 32 35 2c  |(22,createW%,25,|
0000eea0  28 66 69 65 6c 64 74 79  70 65 25 3d 33 29 29 0d  |(fieldtype%=3)).|
0000eeb0  08 1c 27 f2 69 63 6f 6e  5f 62 69 74 28 32 32 2c  |..'.icon_bit(22,|
0000eec0  63 72 65 61 74 65 57 25  2c 32 36 2c ac 20 61 64  |createW%,26,. ad|
0000eed0  6a 75 73 74 25 29 0d 08  1d 2e e7 20 ac 20 61 64  |just%)..... . ad|
0000eee0  6a 75 73 74 25 20 8c 20  f2 6c 69 74 28 6d 65 6e  |just% . .lit(men|
0000eef0  75 25 28 39 29 2c 32 2c  28 66 69 65 6c 64 73 25  |u%(9),2,(fields%|
0000ef00  3e 30 29 29 0d 08 1e 20  24 56 61 6c 54 65 78 74  |>0))... $ValText|
0000ef10  25 3d 76 6e 61 6d 65 24  28 66 69 65 6c 64 74 79  |%=vname$(fieldty|
0000ef20  70 65 25 29 0d 08 1f 1d  f2 72 65 64 72 61 77 5f  |pe%).....redraw_|
0000ef30  69 63 6f 6e 28 63 72 65  61 74 65 57 25 2c 32 38  |icon(createW%,28|
0000ef40  29 0d 08 20 05 e1 0d 08  21 05 3a 0d 08 22 1e dd  |).. ....!.:.."..|
0000ef50  20 f2 73 65 74 5f 6c 69  6d 69 74 73 28 74 25 2c  | .set_limits(t%,|
0000ef60  66 25 2c 6c 25 2c 6d 25  29 0d 08 23 11 66 69 65  |f%,l%,m%)..#.fie|
0000ef70  6c 64 74 79 70 65 25 3d  74 25 0d 08 24 11 66 69  |ldtype%=t%..$.fi|
0000ef80  72 73 74 74 79 70 65 25  3d 66 25 0d 08 25 10 6c  |rsttype%=f%..%.l|
0000ef90  61 73 74 74 79 70 65 25  3d 6c 25 0d 08 26 12 6d  |asttype%=l%..&.m|
0000efa0  65 6e 75 6e 75 6d 62 65  72 25 3d 6d 25 0d 08 27  |enunumber%=m%..'|
0000efb0  26 f2 74 69 63 6b 5f 6f  6e 65 28 6d 65 6e 75 25  |&.tick_one(menu%|
0000efc0  28 6d 25 29 2c 30 2c 6c  25 2d 66 25 2c 74 25 2d  |(m%),0,l%-f%,t%-|
0000efd0  66 25 29 0d 08 28 0f f2  75 70 64 61 74 65 5f 62  |f%)..(..update_b|
0000efe0  6f 78 0d 08 29 05 e1 0d  08 2a 05 3a 0d 08 2b 19  |ox..)....*.:..+.|
0000eff0  dd 20 f2 63 68 61 6e 67  65 5f 74 79 70 65 28 64  |. .change_type(d|
0000f000  25 2c 6d 25 29 0d 08 2c  0b c8 8e 20 64 25 20 ca  |%,m%)..,... d% .|
0000f010  0d 08 2d 17 20 20 c9 20  31 3a 66 69 65 6c 64 74  |..-.  . 1:fieldt|
0000f020  79 70 65 25 2b 3d 31 0d  08 2e 34 20 20 e7 20 66  |ype%+=1...4  . f|
0000f030  69 65 6c 64 74 79 70 65  25 3e 6c 61 73 74 74 79  |ieldtype%>lastty|
0000f040  70 65 25 20 8c 20 66 69  65 6c 64 74 79 70 65 25  |pe% . fieldtype%|
0000f050  3d 66 69 72 73 74 74 79  70 65 25 0d 08 2f 18 20  |=firsttype%../. |
0000f060  20 c9 20 2d 31 3a 66 69  65 6c 64 74 79 70 65 25  | . -1:fieldtype%|
0000f070  2d 3d 31 0d 08 30 34 20  20 e7 20 66 69 65 6c 64  |-=1..04  . field|
0000f080  74 79 70 65 25 3c 66 69  72 73 74 74 79 70 65 25  |type%<firsttype%|
0000f090  20 8c 20 66 69 65 6c 64  74 79 70 65 25 3d 6c 61  | . fieldtype%=la|
0000f0a0  73 74 74 79 70 65 25 0d  08 31 05 cb 0d 08 32 45  |sttype%..1....2E|
0000f0b0  f2 74 69 63 6b 5f 6f 6e  65 28 6d 65 6e 75 25 28  |.tick_one(menu%(|
0000f0c0  6d 25 29 2c 30 2c 6c 61  73 74 74 79 70 65 25 2d  |m%),0,lasttype%-|
0000f0d0  66 69 72 73 74 74 79 70  65 25 2c 66 69 65 6c 64  |firsttype%,field|
0000f0e0  74 79 70 65 25 2d 66 69  72 73 74 74 79 70 65 25  |type%-firsttype%|
0000f0f0  29 0d 08 33 0f f2 75 70  64 61 74 65 5f 62 6f 78  |)..3..update_box|
0000f100  0d 08 34 05 e1 0d 08 35  05 3a 0d 08 36 10 dd 20  |..4....5.:..6.. |
0000f110  f2 70 61 73 73 77 6f 72  64 73 0d 08 37 07 ea 20  |.passwords..7.. |
0000f120  46 0d 08 38 0c c8 8e 20  69 63 25 20 ca 0d 08 39  |F..8... ic% ...9|
0000f130  0a 20 20 c9 20 34 3a 0d  08 3a 23 20 20 e7 20 24  |.  . 4:..:#  . $|
0000f140  57 72 69 74 65 25 3d 22  22 20 8c 20 24 57 72 69  |Write%="" . $Wri|
0000f150  74 65 25 3d 24 52 65 61  64 25 0d 08 3b 28 20 20  |te%=$Read%..;(  |
0000f160  e7 20 24 4d 61 6e 61 67  65 72 25 3d 22 22 20 8c  |. $Manager%="" .|
0000f170  20 24 4d 61 6e 61 67 65  72 25 3d 24 57 72 69 74  | $Manager%=$Writ|
0000f180  65 25 0d 08 3c 20 20 20  46 3d ad 28 24 64 61 74  |e%..<   F=.($dat|
0000f190  61 62 61 73 65 25 2b 22  2e 43 6f 6c 6f 75 72 73  |abase%+".Colours|
0000f1a0  22 29 0d 08 3d 0c 20 20  cf 23 46 3d 33 35 0d 08  |")..=.  .#F=35..|
0000f1b0  3e 22 20 20 53 24 3d a4  65 6e 63 72 79 70 74 28  |>"  S$=.encrypt(|
0000f1c0  24 52 65 61 64 25 2c b9  29 3a f1 23 46 2c 53 24  |$Read%,.):.#F,S$|
0000f1d0  0d 08 3f 23 20 20 53 24  3d a4 65 6e 63 72 79 70  |..?#  S$=.encryp|
0000f1e0  74 28 24 57 72 69 74 65  25 2c b9 29 3a f1 23 46  |t($Write%,.):.#F|
0000f1f0  2c 53 24 0d 08 40 25 20  20 53 24 3d a4 65 6e 63  |,S$..@%  S$=.enc|
0000f200  72 79 70 74 28 24 4d 61  6e 61 67 65 72 25 2c b9  |rypt($Manager%,.|
0000f210  29 3a f1 23 46 2c 53 24  0d 08 41 11 20 20 e3 20  |):.#F,S$..A.  . |
0000f220  49 25 3d 39 20 b8 20 31  36 0d 08 42 20 20 20 20  |I%=9 . 16..B    |
0000f230  20 f1 23 46 2c a4 73 65  6c 65 63 74 65 64 28 70  | .#F,.selected(p|
0000f240  61 73 73 57 25 2c 49 25  29 0d 08 43 0a 20 20 ed  |assW%,I%)..C.  .|
0000f250  20 49 25 0d 08 44 12 20  20 f1 23 46 2c 6c 6f 67  | I%..D.  .#F,log|
0000f260  70 61 74 68 24 0d 08 45  0d 20 20 a2 23 46 3d 8f  |path$..E.  .#F=.|
0000f270  23 46 0d 08 46 14 20 20  f2 63 6c 6f 73 65 5f 66  |#F..F.  .close_f|
0000f280  69 6c 65 28 46 29 0d 08  47 2a 20 20 f2 6c 69 74  |ile(F)..G*  .lit|
0000f290  28 6d 65 6e 75 25 28 31  29 2c 36 2c a4 73 65 6c  |(menu%(1),6,.sel|
0000f2a0  65 63 74 65 64 28 70 61  73 73 57 25 2c 39 29 29  |ected(passW%,9))|
0000f2b0  0d 08 48 2b 20 20 f2 6c  69 74 28 6d 65 6e 75 25  |..H+  .lit(menu%|
0000f2c0  28 31 29 2c 37 2c a4 73  65 6c 65 63 74 65 64 28  |(1),7,.selected(|
0000f2d0  70 61 73 73 57 25 2c 31  33 29 29 0d 08 49 2b 20  |passW%,13))..I+ |
0000f2e0  20 f2 6c 69 74 28 6d 65  6e 75 25 28 31 29 2c 38  | .lit(menu%(1),8|
0000f2f0  2c a4 73 65 6c 65 63 74  65 64 28 70 61 73 73 57  |,.selected(passW|
0000f300  25 2c 31 33 29 29 0d 08  4a 2b 20 20 f2 6c 69 74  |%,13))..J+  .lit|
0000f310  28 6d 65 6e 75 25 28 31  29 2c 32 2c a4 73 65 6c  |(menu%(1),2,.sel|
0000f320  65 63 74 65 64 28 70 61  73 73 57 25 2c 31 34 29  |ected(passW%,14)|
0000f330  29 0d 08 4b 2b 20 20 f2  6c 69 74 28 6d 65 6e 75  |)..K+  .lit(menu|
0000f340  25 28 33 29 2c 38 2c a4  73 65 6c 65 63 74 65 64  |%(3),8,.selected|
0000f350  28 70 61 73 73 57 25 2c  31 35 29 29 0d 08 4c 50  |(passW%,15))..LP|
0000f360  20 20 e7 20 ac 20 a4 73  65 6c 65 63 74 65 64 28  |  . . .selected(|
0000f370  70 61 73 73 57 25 2c 39  29 20 8c 20 f2 63 6c 6f  |passW%,9) . .clo|
0000f380  73 65 5f 77 69 6e 64 6f  77 28 6b 65 79 70 61 64  |se_window(keypad|
0000f390  57 25 29 20 8b 20 f2 6f  70 65 6e 5f 77 69 6e 64  |W%) . .open_wind|
0000f3a0  6f 77 28 6b 65 79 70 61  64 57 25 29 0d 08 4d 31  |ow(keypadW%)..M1|
0000f3b0  20 20 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |  .close_window(|
0000f3c0  70 61 73 73 57 25 29 3a  f2 63 6c 6f 73 65 5f 77  |passW%):.close_w|
0000f3d0  69 6e 64 6f 77 28 73 61  76 65 57 25 29 0d 08 4e  |indow(saveW%)..N|
0000f3e0  0d 20 20 77 61 72 6e 25  3d b9 0d 08 4f 0b 20 20  |.  warn%=...O.  |
0000f3f0  c9 20 31 36 3a 0d 08 50  1e 20 20 e7 20 a4 73 65  |. 16:..P.  . .se|
0000f400  6c 65 63 74 65 64 28 70  61 73 73 57 25 2c 31 36  |lected(passW%,16|
0000f410  29 20 8c 0d 08 51 1f 20  20 20 20 73 61 76 65 66  |) ...Q.    savef|
0000f420  75 6e 63 24 3d 22 4c 6f  67 20 63 68 61 6e 67 65  |unc$="Log change|
0000f430  73 22 0d 08 52 4a 20 20  20 20 e7 20 6c 6f 67 70  |s"..RJ    . logp|
0000f440  61 74 68 24 3d 22 22 20  8c 20 24 53 61 76 65 4e  |ath$="" . $SaveN|
0000f450  61 6d 65 25 3d 24 64 61  74 61 62 61 73 65 25 2b  |ame%=$database%+|
0000f460  22 2e 4c 6f 67 22 20 8b  20 24 53 61 76 65 4e 61  |".Log" . $SaveNa|
0000f470  6d 65 25 3d 6c 6f 67 70  61 74 68 24 0d 08 53 32  |me%=logpath$..S2|
0000f480  20 20 20 20 24 53 61 76  65 53 70 72 69 74 65 25  |    $SaveSprite%|
0000f490  3d 22 73 66 69 6c 65 5f  66 66 66 3b 50 70 74 72  |="sfile_fff;Pptr|
0000f4a0  5f 68 61 6e 64 2c 31 32  2c 38 3b 42 33 22 0d 08  |_hand,12,8;B3"..|
0000f4b0  54 37 20 20 20 20 21 62  6c 6f 63 6b 25 3d 70 61  |T7    !block%=pa|
0000f4c0  73 73 57 25 3a c8 99 20  22 57 69 6d 70 5f 47 65  |ssW%:.. "Wimp_Ge|
0000f4d0  74 57 69 6e 64 6f 77 53  74 61 74 65 22 2c 2c 62  |tWindowState",,b|
0000f4e0  6c 6f 63 6b 25 0d 08 55  2a 20 20 20 20 78 6d 69  |lock%..U*    xmi|
0000f4f0  6e 25 3d 62 6c 6f 63 6b  25 21 34 2b 32 30 30 3a  |n%=block%!4+200:|
0000f500  79 6d 61 78 25 3d 62 6c  6f 63 6b 25 21 31 36 0d  |ymax%=block%!16.|
0000f510  08 56 37 20 20 20 20 21  62 6c 6f 63 6b 25 3d 73  |.V7    !block%=s|
0000f520  61 76 65 57 25 3a c8 99  20 22 57 69 6d 70 5f 47  |aveW%:.. "Wimp_G|
0000f530  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
0000f540  62 6c 6f 63 6b 25 0d 08  57 39 20 20 20 20 62 6c  |block%..W9    bl|
0000f550  6f 63 6b 25 21 31 32 3d  78 6d 69 6e 25 2b 62 6c  |ock%!12=xmin%+bl|
0000f560  6f 63 6b 25 21 31 32 2d  62 6c 6f 63 6b 25 21 34  |ock%!12-block%!4|
0000f570  3a 62 6c 6f 63 6b 25 21  34 3d 78 6d 69 6e 25 0d  |:block%!4=xmin%.|
0000f580  08 58 39 20 20 20 20 62  6c 6f 63 6b 25 21 38 3d  |.X9    block%!8=|
0000f590  79 6d 61 78 25 2d 62 6c  6f 63 6b 25 21 31 36 2b  |ymax%-block%!16+|
0000f5a0  62 6c 6f 63 6b 25 21 38  3a 62 6c 6f 63 6b 25 21  |block%!8:block%!|
0000f5b0  31 36 3d 79 6d 61 78 25  0d 08 59 31 20 20 20 20  |16=ymax%..Y1    |
0000f5c0  62 6c 6f 63 6b 25 21 32  38 3d 2d 31 3a c8 99 20  |block%!28=-1:.. |
0000f5d0  22 57 69 6d 70 5f 4f 70  65 6e 57 69 6e 64 6f 77  |"Wimp_OpenWindow|
0000f5e0  22 2c 2c 62 6c 6f 63 6b  25 0d 08 5a 1c 20 20 20  |",,block%..Z.   |
0000f5f0  20 f2 73 65 74 5f 63 61  72 65 74 28 73 61 76 65  | .set_caret(save|
0000f600  57 25 2c 30 29 0d 08 5b  11 20 20 20 20 f2 6f 70  |W%,0)..[.    .op|
0000f610  65 6e 5f 6c 6f 67 0d 08  5c 14 20 20 20 20 cc 20  |en_log..\.    . |
0000f620  f2 63 6c 6f 73 65 5f 6c  6f 67 0d 08 5d 07 20 20  |.close_log..].  |
0000f630  cd 0d 08 5e 05 cb 0d 08  5f 05 e1 0d 08 60 05 3a  |...^...._....`.:|
0000f640  0d 08 61 0f dd 20 f2 6f  70 65 6e 5f 6c 6f 67 0d  |..a.. .open_log.|
0000f650  08 62 14 e7 20 6c 6f 67  70 61 74 68 24 3c 3e 22  |.b.. logpath$<>"|
0000f660  22 20 8c 0d 08 63 22 20  20 c8 99 20 22 4f 53 5f  |" ...c"  .. "OS_|
0000f670  46 69 6c 65 22 2c 35 2c  6c 6f 67 70 61 74 68 24  |File",5,logpath$|
0000f680  20 b8 20 64 25 0d 08 64  0e 20 20 e7 20 64 25 3d  | . d%..d.  . d%=|
0000f690  31 20 8c 0d 08 65 38 20  20 20 20 6c 6f 67 68 61  |1 ...e8    logha|
0000f6a0  6e 64 6c 65 25 3d ad 28  6c 6f 67 70 61 74 68 24  |ndle%=.(logpath$|
0000f6b0  29 3a cf 23 6c 6f 67 68  61 6e 64 6c 65 25 3d a2  |):.#loghandle%=.|
0000f6c0  23 6c 6f 67 68 61 6e 64  6c 65 25 0d 08 66 25 20  |#loghandle%..f% |
0000f6d0  20 20 20 d5 23 6c 6f 67  68 61 6e 64 6c 65 25 2c  |   .#loghandle%,|
0000f6e0  22 4c 6f 67 20 6f 70 65  6e 65 64 20 22 2b 91 24  |"Log opened "+.$|
0000f6f0  0d 08 67 33 20 20 20 20  d5 23 6c 6f 67 68 61 6e  |..g3    .#loghan|
0000f700  64 6c 65 25 2c 22 50 61  73 73 77 6f 72 64 20 6c  |dle%,"Password l|
0000f710  65 76 65 6c 20 75 73 65  64 3a 20 22 2b c3 28 70  |evel used: "+.(p|
0000f720  77 25 29 0d 08 68 1d 20  20 20 20 d5 23 6c 6f 67  |w%)..h.    .#log|
0000f730  68 61 6e 64 6c 65 25 2c  c4 33 35 2c 22 3d 22 29  |handle%,.35,"=")|
0000f740  0d 08 69 09 20 20 20 20  cc 0d 08 6a 19 20 20 20  |..i.    ...j.   |
0000f750  20 f2 73 6f 66 74 65 72  72 6f 72 28 22 22 2c 39  | .softerror("",9|
0000f760  39 29 0d 08 6b 1c 20 20  20 20 f2 64 65 73 65 6c  |9)..k.    .desel|
0000f770  65 63 74 28 70 61 73 73  57 25 2c 31 36 29 0d 08  |ect(passW%,16)..|
0000f780  6c 13 20 20 20 20 6c 6f  67 70 61 74 68 24 3d 22  |l.    logpath$="|
0000f790  22 0d 08 6d 07 20 20 cd  0d 08 6e 05 cd 0d 08 6f  |"..m.  ...n....o|
0000f7a0  05 e1 0d 08 70 05 3a 0d  08 71 10 dd 20 f2 63 6c  |....p.:..q.. .cl|
0000f7b0  6f 73 65 5f 6c 6f 67 0d  08 72 15 e7 20 6c 6f 67  |ose_log..r.. log|
0000f7c0  68 61 6e 64 6c 65 25 3c  3e 30 20 8c 0d 08 73 15  |handle%<>0 ...s.|
0000f7d0  20 20 d5 23 6c 6f 67 68  61 6e 64 6c 65 25 2c 22  |  .#loghandle%,"|
0000f7e0  22 0d 08 74 23 20 20 d5  23 6c 6f 67 68 61 6e 64  |"..t#  .#loghand|
0000f7f0  6c 65 25 2c 22 4c 6f 67  20 63 6c 6f 73 65 64 20  |le%,"Log closed |
0000f800  22 2b 91 24 0d 08 75 1d  20 20 f2 63 6c 6f 73 65  |"+.$..u.  .close|
0000f810  5f 66 69 6c 65 28 6c 6f  67 68 61 6e 64 6c 65 25  |_file(loghandle%|
0000f820  29 0d 08 76 23 20 20 c8  99 20 22 4f 53 5f 46 69  |)..v#  .. "OS_Fi|
0000f830  6c 65 22 2c 31 38 2c 6c  6f 67 70 61 74 68 24 2c  |le",18,logpath$,|
0000f840  26 66 66 66 0d 08 77 05  cd 0d 08 78 05 e1 0d 08  |&fff..w....x....|
0000f850  79 05 3a 0d 08 7a 18 dd  20 f2 63 6f 75 6e 74 28  |y.:..z.. .count(|
0000f860  6b 65 79 25 2c f8 20 52  55 25 29 0d 08 7b 1a ea  |key%,. RU%)..{..|
0000f870  20 7a 65 72 6f 25 2c 66  69 6c 65 25 2c 74 6f 70  | zero%,file%,top|
0000f880  2c 73 75 6d 25 0d 08 7c  09 52 55 25 3d 30 0d 08  |,sum%..|.RU%=0..|
0000f890  7d 11 e3 20 66 69 6c 65  25 3d 30 20 b8 20 35 0d  |}.. file%=0 . 5.|
0000f8a0  08 7e 15 20 20 74 6f 70  3d 38 2a 66 69 6c 65 25  |.~.  top=8*file%|
0000f8b0  2b 4c 48 25 0d 08 7f 22  20 20 73 75 6d 25 3d a4  |+LH%..."  sum%=.|
0000f8c0  63 6f 75 6e 74 5f 72 65  63 73 28 6b 65 79 25 2c  |count_recs(key%,|
0000f8d0  7a 65 72 6f 25 29 0d 08  80 0f 20 20 52 55 25 2b  |zero%)....  RU%+|
0000f8e0  3d 73 75 6d 25 0d 08 81  25 20 20 24 a4 74 65 78  |=sum%...%  $.tex|
0000f8f0  74 28 6d 69 73 63 57 25  2c 66 69 6c 65 25 2b 32  |t(miscW%,file%+2|
0000f900  32 29 3d c3 28 73 75 6d  25 29 0d 08 82 0b ed 20  |2)=.(sum%)..... |
0000f910  66 69 6c 65 25 0d 08 83  05 e1 0d 08 84 05 3a 0d  |file%.........:.|
0000f920  08 85 1e dd 20 a4 63 6f  75 6e 74 5f 72 65 63 73  |.... .count_recs|
0000f930  28 6b 65 79 25 2c f8 20  70 74 72 25 29 0d 08 86  |(key%,. ptr%)...|
0000f940  1b ea 20 50 25 2c 63 6f  75 6e 74 25 2c 53 25 2c  |.. P%,count%,S%,|
0000f950  52 25 2c 53 24 2c 6b 24  0d 08 87 15 c8 99 20 22  |R%,S$,k$...... "|
0000f960  48 6f 75 72 67 6c 61 73  73 5f 4f 6e 22 0d 08 88  |Hourglass_On"...|
0000f970  1d 50 25 3d a4 6e 65 69  67 68 62 6f 75 72 28 6b  |.P%=.neighbour(k|
0000f980  65 79 25 2c 74 6f 70 2c  31 29 0d 08 89 0e c8 95  |ey%,top,1)......|
0000f990  20 50 25 3c 3e 74 6f 70  0d 08 8a 0f 20 20 63 6f  | P%<>top....  co|
0000f9a0  75 6e 74 25 2b 3d 31 0d  08 8b 10 20 20 e7 20 70  |unt%+=1....  . p|
0000f9b0  74 72 25 3e 30 20 8c 0d  08 8c 1e 20 20 20 20 52  |tr%>0 .....    R|
0000f9c0  25 3d a4 72 65 63 5f 6e  6f 28 6b 24 2c 6b 65 79  |%=.rec_no(k$,key|
0000f9d0  25 2c 50 25 29 0d 08 8d  23 20 20 20 20 e7 20 52  |%,P%)...#    . R|
0000f9e0  25 3e 68 69 67 68 65 73  74 25 20 8c 20 68 69 67  |%>highest% . hig|
0000f9f0  68 65 73 74 25 3d 52 25  0d 08 8e 31 20 20 20 20  |hest%=R%...1    |
0000fa00  21 70 74 72 25 3d 52 25  3a 24 28 70 74 72 25 2b  |!ptr%=R%:$(ptr%+|
0000fa10  34 29 3d 6b 24 3a 70 74  72 25 2b 3d 34 2b 4b 4c  |4)=k$:ptr%+=4+KL|
0000fa20  25 28 6b 65 79 25 29 2b  31 0d 08 8f 15 20 20 20  |%(key%)+1....   |
0000fa30  20 66 6c 61 67 70 74 72  25 3f 52 25 3d 30 0d 08  | flagptr%?R%=0..|
0000fa40  90 07 20 20 cd 0d 08 91  1e 20 20 50 25 3d a4 6e  |..  .....  P%=.n|
0000fa50  65 69 67 68 62 6f 75 72  28 6b 65 79 25 2c 50 25  |eighbour(key%,P%|
0000fa60  2c 31 29 0d 08 92 05 ce  0d 08 93 16 c8 99 20 22  |,1)........... "|
0000fa70  48 6f 75 72 67 6c 61 73  73 5f 4f 66 66 22 0d 08  |Hourglass_Off"..|
0000fa80  94 0b 3d 63 6f 75 6e 74  25 0d 08 95 05 3a 0d 08  |..=count%....:..|
0000fa90  96 15 dd 20 f2 61 6e 61  6c 79 73 65 28 66 75 6e  |... .analyse(fun|
0000faa0  63 25 29 0d 08 97 31 ea  20 4c 25 2c 50 25 2c 53  |c%)...1. L%,P%,S|
0000fab0  25 2c 53 24 2c 4b 24 2c  6b 24 2c 70 74 72 25 2c  |%,S$,K$,k$,ptr%,|
0000fac0  70 6f 73 25 2c 4e 25 2c  76 61 6c 75 65 73 25 2c  |pos%,N%,values%,|
0000fad0  6b 65 79 25 0d 08 98 0f  ea 20 53 24 28 29 2c 4e  |key%..... S$(),N|
0000fae0  25 28 29 0d 08 99 17 f2  72 65 61 64 5f 70 72 69  |%().....read_pri|
0000faf0  6e 74 5f 6f 70 74 69 6f  6e 73 0d 08 9a 2e e7 20  |nt_options..... |
0000fb00  66 75 6e 63 25 3c 30 20  8c 20 4c 25 3d 36 20 8b  |func%<0 . L%=6 .|
0000fb10  20 6b 65 79 25 3d 66 75  6e 63 25 3a 4c 25 3d 4b  | key%=func%:L%=K|
0000fb20  4c 25 28 6b 65 79 25 29  0d 08 9b 38 e7 20 4c 25  |L%(key%)...8. L%|
0000fb30  3e 38 20 8c 20 54 61 62  25 28 30 29 3d 4c 6d 61  |>8 . Tab%(0)=Lma|
0000fb40  72 67 69 6e 25 2b 4c 25  2b 36 20 8b 20 54 61 62  |rgin%+L%+6 . Tab|
0000fb50  25 28 30 29 3d 4c 6d 61  72 67 69 6e 25 2b 31 34  |%(0)=Lmargin%+14|
0000fb60  0d 08 9c 15 54 61 62 25  28 31 29 3d 54 61 62 25  |....Tab%(1)=Tab%|
0000fb70  28 30 29 2b 36 0d 08 9d  0f e7 20 66 75 6e 63 25  |(0)+6..... func%|
0000fb80  3c 30 20 8c 0d 08 9e 3a  20 20 54 69 74 6c 65 24  |<0 ....:  Title$|
0000fb90  3d 22 41 6e 61 6c 79 73  69 73 20 6f 66 20 64 61  |="Analysis of da|
0000fba0  74 65 20 66 69 65 6c 64  3a 20 22 2b 54 61 67 24  |te field: "+Tag$|
0000fbb0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 0d 08  |(Fieldnumber%)..|
0000fbc0  9f 35 20 20 48 65 61 64  69 6e 67 24 3d a4 70 61  |.5  Heading$=.pa|
0000fbd0  64 28 6d 61 72 67 69 6e  24 2b 22 4d 6f 6e 74 68  |d(margin$+"Month|
0000fbe0  22 2c 54 61 62 25 28 30  29 29 2b 22 4e 75 6d 62  |",Tab%(0))+"Numb|
0000fbf0  65 72 22 0d 08 a0 07 20  20 cc 0d 08 a1 2f 20 20  |er"....  ..../  |
0000fc00  54 69 74 6c 65 24 3d 22  41 6e 61 6c 79 73 69 73  |Title$="Analysis|
0000fc10  20 6f 66 20 69 6e 64 65  78 3a 20 22 2b 49 6e 64  | of index: "+Ind|
0000fc20  65 78 24 28 6b 65 79 25  29 0d 08 a2 38 20 20 48  |ex$(key%)...8  H|
0000fc30  65 61 64 69 6e 67 24 3d  a4 70 61 64 28 6d 61 72  |eading$=.pad(mar|
0000fc40  67 69 6e 24 2b 22 43 6f  6e 74 65 6e 74 73 22 2c  |gin$+"Contents",|
0000fc50  54 61 62 25 28 30 29 29  2b 22 4e 75 6d 62 65 72  |Tab%(0))+"Number|
0000fc60  22 0d 08 a3 05 cd 0d 08  a4 0e 54 69 74 6c 65 31  |".........Title1|
0000fc70  24 3d 91 24 0d 08 a5 1a  4c 65 6e 4c 69 6e 65 25  |$=.$....LenLine%|
0000fc80  3d a9 28 48 65 61 64 69  6e 67 24 29 2b 32 0d 08  |=.(Heading$)+2..|
0000fc90  a6 37 f2 65 78 74 65 6e  64 5f 6e 61 6d 65 64 5f  |.7.extend_named_|
0000fca0  73 6c 69 64 69 6e 67 5f  62 6c 6f 63 6b 28 6c 69  |sliding_block(li|
0000fcb0  6e 65 61 6e 63 68 6f 72  25 2c 4c 65 6e 4c 69 6e  |neanchor%,LenLin|
0000fcc0  65 25 2b 34 29 0d 08 a7  49 f2 65 78 74 65 6e 64  |e%+4)...I.extend|
0000fcd0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
0000fce0  6c 6f 63 6b 28 68 65 61  64 61 6e 63 68 6f 72 25  |lock(headanchor%|
0000fcf0  2c 4c 65 6e 4c 69 6e 65  25 2b 34 29 3a 70 6f 73  |,LenLine%+4):pos|
0000fd00  25 3d 21 68 65 61 64 61  6e 63 68 6f 72 25 0d 08  |%=!headanchor%..|
0000fd10  a8 37 f2 68 65 61 70 5f  73 74 6f 72 65 28 68 65  |.7.heap_store(he|
0000fd20  61 64 61 6e 63 68 6f 72  25 2c 4c 65 6e 4c 69 6e  |adanchor%,LenLin|
0000fd30  65 25 2c 30 2c 70 6f 73  25 2c 30 2c 48 65 61 64  |e%,0,pos%,0,Head|
0000fd40  69 6e 67 24 29 0d 08 a9  18 72 65 70 6f 72 74 64  |ing$)....reportd|
0000fd50  65 73 74 24 3d 22 57 69  6e 64 6f 77 22 0d 08 aa  |est$="Window"...|
0000fd60  1c f2 63 6c 6f 73 65 5f  77 69 6e 64 6f 77 28 64  |..close_window(d|
0000fd70  61 74 61 64 69 63 57 25  29 0d 08 ab 0c 43 6f 75  |atadicW%)....Cou|
0000fd80  6e 74 25 3d 30 0d 08 ac  11 f2 6c 69 73 74 5f 68  |nt%=0.....list_h|
0000fd90  65 61 64 28 30 29 0d 08  ad 15 c8 99 20 22 48 6f  |ead(0)...... "Ho|
0000fda0  75 72 67 6c 61 73 73 5f  4f 6e 22 0d 08 ae 2e e7  |urglass_On".....|
0000fdb0  20 66 75 6e 63 25 3c 30  20 8c 20 f2 61 6e 61 6c  | func%<0 . .anal|
0000fdc0  79 73 65 5f 64 61 74 65  20 8b 20 f2 61 6e 61 6c  |yse_date . .anal|
0000fdd0  79 73 65 5f 69 6e 64 65  78 0d 08 af 16 c8 99 20  |yse_index...... |
0000fde0  22 48 6f 75 72 67 6c 61  73 73 5f 4f 66 66 22 0d  |"Hourglass_Off".|
0000fdf0  08 b0 11 f2 72 75 6c 65  5f 6f 66 66 28 34 35 29  |....rule_off(45)|
0000fe00  0d 08 b1 3b 4c 69 6e 65  24 3d a4 70 61 64 28 6d  |...;Line$=.pad(m|
0000fe10  61 72 67 69 6e 24 2b 22  54 6f 74 61 6c 22 2c 54  |argin$+"Total",T|
0000fe20  61 62 25 28 30 29 29 2b  a4 6a 75 73 74 69 66 79  |ab%(0))+.justify|
0000fe30  28 c3 28 4e 25 29 2c 31  2c 30 29 0d 08 b2 40 24  |(.(N%),1,0)...@$|
0000fe40  28 21 6c 69 6e 65 61 6e  63 68 6f 72 25 29 3d 4c  |(!lineanchor%)=L|
0000fe50  69 6e 65 24 3a f2 6c 69  73 74 5f 6c 69 6e 65 28  |ine$:.list_line(|
0000fe60  2d 31 2c 6c 69 6e 65 61  6e 63 68 6f 72 25 2c a9  |-1,lineanchor%,.|
0000fe70  28 4c 69 6e 65 24 29 2c  33 32 29 0d 08 b3 11 f2  |(Line$),32).....|
0000fe80  72 75 6c 65 5f 6f 66 66  28 34 35 29 0d 08 b4 10  |rule_off(45)....|
0000fe90  f2 73 63 72 65 65 6e 5f  6c 69 73 74 0d 08 b5 05  |.screen_list....|
0000fea0  e1 0d 08 b6 05 3a 0d 08  b7 14 dd 20 f2 61 6e 61  |.....:..... .ana|
0000feb0  6c 79 73 65 5f 69 6e 64  65 78 0d 08 b8 0c 4b 24  |lyse_index....K$|
0000fec0  3d 22 2a 2a 2a 22 0d 08  b9 1d 50 25 3d a4 6e 65  |="***"....P%=.ne|
0000fed0  69 67 68 62 6f 75 72 28  6b 65 79 25 2c 74 6f 70  |ighbour(key%,top|
0000fee0  2c 31 29 0d 08 ba 0e c8  95 20 50 25 3c 3e 74 6f  |,1)...... P%<>to|
0000fef0  70 0d 08 bb 1e 20 20 20  20 52 25 3d a4 72 65 63  |p....    R%=.rec|
0000ff00  5f 6e 6f 28 6b 24 2c 6b  65 79 25 2c 50 25 29 0d  |_no(k$,key%,P%).|
0000ff10  08 bc 23 20 20 20 20 e7  20 6b 24 3c 3e 4b 24 20  |..#    . k$<>K$ |
0000ff20  8c 20 76 61 6c 75 65 73  25 2b 3d 31 3a 4b 24 3d  |. values%+=1:K$=|
0000ff30  6b 24 0d 08 bd 20 20 20  20 20 50 25 3d a4 6e 65  |k$...     P%=.ne|
0000ff40  69 67 68 62 6f 75 72 28  6b 65 79 25 2c 50 25 2c  |ighbour(key%,P%,|
0000ff50  31 29 0d 08 be 05 ce 0d  08 bf 1d de 20 53 24 28  |1).......... S$(|
0000ff60  76 61 6c 75 65 73 25 29  2c 4e 25 28 76 61 6c 75  |values%),N%(valu|
0000ff70  65 73 25 29 0d 08 c0 0c  4b 24 3d 22 2a 2a 2a 22  |es%)....K$="***"|
0000ff80  0d 08 c1 1d 50 25 3d a4  6e 65 69 67 68 62 6f 75  |....P%=.neighbou|
0000ff90  72 28 6b 65 79 25 2c 74  6f 70 2c 31 29 0d 08 c2  |r(key%,top,1)...|
0000ffa0  0e c8 95 20 50 25 3c 3e  74 6f 70 0d 08 c3 1e 20  |... P%<>top.... |
0000ffb0  20 20 20 52 25 3d a4 72  65 63 5f 6e 6f 28 6b 24  |   R%=.rec_no(k$|
0000ffc0  2c 6b 65 79 25 2c 50 25  29 0d 08 c4 45 20 20 20  |,key%,P%)...E   |
0000ffd0  20 e7 20 6b 24 3c 3e 4b  24 20 8c 20 70 74 72 25  | . k$<>K$ . ptr%|
0000ffe0  2b 3d 31 3a 4b 24 3d 6b  24 3a 53 24 28 70 74 72  |+=1:K$=k$:S$(ptr|
0000fff0  25 29 3d 4b 24 3a 4e 25  28 70 74 72 25 29 3d 31  |%)=K$:N%(ptr%)=1|
00010000  20 8b 20 4e 25 28 70 74  72 25 29 2b 3d 31 0d 08  | . N%(ptr%)+=1..|
00010010  c5 20 20 20 20 20 50 25  3d a4 6e 65 69 67 68 62  |.     P%=.neighb|
00010020  6f 75 72 28 6b 65 79 25  2c 50 25 2c 31 29 0d 08  |our(key%,P%,1)..|
00010030  c6 05 ce 0d 08 c7 11 e3  20 49 25 3d 31 20 b8 20  |........ I%=1 . |
00010040  70 74 72 25 0d 08 c8 49  20 20 53 24 3d 53 24 28  |ptr%...I  S$=S$(|
00010050  49 25 29 3a e7 20 53 24  3d 22 22 20 8c 20 53 24  |I%):. S$="" . S$|
00010060  3d 22 3c 6e 75 6c 6c 3e  22 20 8b 20 e7 20 69 73  |="<null>" . . is|
00010070  61 64 61 74 65 25 20 8c  20 53 24 3d a4 72 65 76  |adate% . S$=.rev|
00010080  65 72 73 65 5f 64 61 74  65 28 53 24 29 0d 08 c9  |erse_date(S$)...|
00010090  48 20 20 4c 69 6e 65 24  3d 6d 61 72 67 69 6e 24  |H  Line$=margin$|
000100a0  2b 53 24 3a 4c 69 6e 65  24 3d a4 70 61 64 28 4c  |+S$:Line$=.pad(L|
000100b0  69 6e 65 24 2c 54 61 62  25 28 30 29 29 2b a4 6a  |ine$,Tab%(0))+.j|
000100c0  75 73 74 69 66 79 28 c3  28 4e 25 28 49 25 29 29  |ustify(.(N%(I%))|
000100d0  2c 31 2c 30 29 0d 08 ca  42 20 20 24 28 21 6c 69  |,1,0)...B  $(!li|
000100e0  6e 65 61 6e 63 68 6f 72  25 29 3d 4c 69 6e 65 24  |neanchor%)=Line$|
000100f0  3a f2 6c 69 73 74 5f 6c  69 6e 65 28 2d 31 2c 6c  |:.list_line(-1,l|
00010100  69 6e 65 61 6e 63 68 6f  72 25 2c a9 28 4c 69 6e  |ineanchor%,.(Lin|
00010110  65 24 29 2c 33 32 29 0d  08 cb 10 20 20 4e 25 2b  |e$),32)....  N%+|
00010120  3d 4e 25 28 49 25 29 0d  08 cc 08 ed 20 49 25 0d  |=N%(I%)..... I%.|
00010130  08 cd 05 e1 0d 08 ce 05  3a 0d 08 cf 13 dd 20 f2  |........:..... .|
00010140  61 6e 61 6c 79 73 65 5f  64 61 74 65 0d 08 d0 13  |analyse_date....|
00010150  de 20 53 24 28 31 32 29  2c 4e 25 28 31 32 29 0d  |. S$(12),N%(12).|
00010160  08 d1 59 53 24 28 29 3d  22 3c 6e 75 6c 6c 3e 22  |..YS$()="<null>"|
00010170  2c 22 4a 61 6e 22 2c 22  46 65 62 22 2c 22 4d 61  |,"Jan","Feb","Ma|
00010180  72 22 2c 22 41 70 72 22  2c 22 4d 61 79 22 2c 22  |r","Apr","May","|
00010190  4a 75 6e 22 2c 22 4a 75  6c 22 2c 22 41 75 67 22  |Jun","Jul","Aug"|
000101a0  2c 22 53 65 70 22 2c 22  4f 63 74 22 2c 22 4e 6f  |,"Sep","Oct","No|
000101b0  76 22 2c 22 44 65 63 22  0d 08 d2 2a 64 62 61 73  |v","Dec"...*dbas|
000101c0  65 68 61 6e 64 6c 65 25  3d 8e 28 24 64 61 74 61  |ehandle%=.($data|
000101d0  62 61 73 65 25 2b 22 2e  44 61 74 61 62 61 73 65  |base%+".Database|
000101e0  22 29 0d 08 d3 1d 50 25  3d a4 6e 65 69 67 68 62  |")....P%=.neighb|
000101f0  6f 75 72 28 6b 65 79 25  2c 74 6f 70 2c 31 29 0d  |our(key%,top,1).|
00010200  08 d4 0e c8 95 20 50 25  3c 3e 74 6f 70 0d 08 d5  |..... P%<>top...|
00010210  1c 20 20 52 25 3d a4 72  65 63 5f 6e 6f 28 6b 24  |.  R%=.rec_no(k$|
00010220  2c 6b 65 79 25 2c 50 25  29 0d 08 d6 23 20 20 f2  |,key%,P%)...#  .|
00010230  72 65 61 64 73 6d 61 72  72 61 79 28 64 62 61 73  |readsmarray(dbas|
00010240  65 68 61 6e 64 6c 65 25  2c 52 25 29 0d 08 d7 19  |ehandle%,R%)....|
00010250  20 20 53 24 3d 46 24 28  46 69 65 6c 64 6e 75 6d  |  S$=F$(Fieldnum|
00010260  62 65 72 25 29 0d 08 d8  10 20 20 e7 20 53 24 3c  |ber%)....  . S$<|
00010270  3e 22 22 20 8c 0d 08 d9  16 20 20 20 20 4d 25 3d  |>"" .....    M%=|
00010280  bb 28 c1 53 24 2c 34 2c  32 29 29 0d 08 da 11 20  |.(.S$,4,2)).... |
00010290  20 20 20 4e 25 28 4d 25  29 2b 3d 31 0d 08 db 12  |   N%(M%)+=1....|
000102a0  20 20 20 20 cc 20 4e 25  28 30 29 2b 3d 31 0d 08  |    . N%(0)+=1..|
000102b0  dc 07 20 20 cd 0d 08 dd  1e 20 20 50 25 3d a4 6e  |..  .....  P%=.n|
000102c0  65 69 67 68 62 6f 75 72  28 6b 65 79 25 2c 50 25  |eighbour(key%,P%|
000102d0  2c 31 29 0d 08 de 05 ce  0d 08 df 1d f2 63 6c 6f  |,1)..........clo|
000102e0  73 65 5f 66 69 6c 65 28  64 62 61 73 65 68 61 6e  |se_file(dbasehan|
000102f0  64 6c 65 25 29 0d 08 e0  0f e3 20 49 25 3d 30 20  |dle%)..... I%=0 |
00010300  b8 20 31 32 0d 08 e1 4c  20 20 4c 69 6e 65 24 3d  |. 12...L  Line$=|
00010310  6d 61 72 67 69 6e 24 2b  53 24 28 49 25 29 3a 4c  |margin$+S$(I%):L|
00010320  69 6e 65 24 3d a4 70 61  64 28 4c 69 6e 65 24 2c  |ine$=.pad(Line$,|
00010330  54 61 62 25 28 30 29 29  2b a4 6a 75 73 74 69 66  |Tab%(0))+.justif|
00010340  79 28 c3 28 4e 25 28 49  25 29 29 2c 31 2c 30 29  |y(.(N%(I%)),1,0)|
00010350  0d 08 e2 42 20 20 24 28  21 6c 69 6e 65 61 6e 63  |...B  $(!lineanc|
00010360  68 6f 72 25 29 3d 4c 69  6e 65 24 3a f2 6c 69 73  |hor%)=Line$:.lis|
00010370  74 5f 6c 69 6e 65 28 2d  31 2c 6c 69 6e 65 61 6e  |t_line(-1,linean|
00010380  63 68 6f 72 25 2c a9 28  4c 69 6e 65 24 29 2c 33  |chor%,.(Line$),3|
00010390  32 29 0d 08 e3 10 20 20  4e 25 2b 3d 4e 25 28 49  |2)....  N%+=N%(I|
000103a0  25 29 0d 08 e4 08 ed 20  49 25 0d 08 e5 05 e1 0d  |%)..... I%......|
000103b0  08 e6 05 3a 0d 08 e7 13  dd 20 f2 75 70 64 61 74  |...:..... .updat|
000103c0  65 5f 73 74 61 74 73 0d  08 e8 15 24 66 69 6c 65  |e_stats....$file|
000103d0  73 69 7a 65 25 3d c3 28  52 41 25 29 0d 08 e9 14  |size%=.(RA%)....|
000103e0  24 52 65 63 6f 72 64 73  25 3d c3 28 52 41 25 29  |$Records%=.(RA%)|
000103f0  0d 08 ea 11 24 75 73 65  64 25 3d c3 28 52 55 25  |....$used%=.(RU%|
00010400  29 0d 08 eb 23 24 70 65  72 63 65 6e 74 25 3d c3  |)...#$percent%=.|
00010410  28 a8 28 52 55 25 2a 31  30 30 2f 52 41 25 29 29  |(.(RU%*100/RA%))|
00010420  2b 22 25 22 0d 08 ec 05  e1 0d 08 ed 05 3a 0d 08  |+"%".........:..|
00010430  ee 4c f4 20 4b 65 79 70  72 65 73 73 20 70 72 6f  |.L. Keypress pro|
00010440  63 65 73 73 69 6e 67 20  2d 2d 2d 2d 2d 2d 2d 2d  |cessing --------|
00010450  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00010470  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 08 ef 05 3a 0d  |----------....:.|
00010480  08 f0 1c dd 20 f2 73 65  74 5f 6b 65 79 62 6f 61  |.... .set_keyboa|
00010490  72 64 28 77 69 25 2c 69  63 25 29 0d 08 f1 0c c8  |rd(wi%,ic%).....|
000104a0  8e 20 77 69 25 20 ca 0d  08 f2 0f 20 20 c9 20 6d  |. wi% .....  . m|
000104b0  61 69 6e 57 25 3a 0d 08  f3 21 20 20 c8 8e 20 63  |ainW%:...!  .. c|
000104c0  68 61 72 74 79 70 65 25  28 28 69 63 25 2b 31 29  |hartype%((ic%+1)|
000104d0  20 81 20 32 29 20 ca 0d  08 f4 24 20 20 20 20 c9  | . 2) ....$    .|
000104e0  20 32 2c 34 3a c8 99 20  22 4f 53 5f 42 79 74 65  | 2,4:.. "OS_Byte|
000104f0  22 2c 32 30 32 2c 30 2c  32 33 39 0d 08 f5 21 20  |",202,0,239...! |
00010500  20 20 20 7f 3a c8 99 20  22 4f 53 5f 42 79 74 65  |   .:.. "OS_Byte|
00010510  22 2c 32 30 32 2c 31 36  2c 31 31 31 0d 08 f6 07  |",202,16,111....|
00010520  20 20 cb 0d 08 f7 22 20  20 7f 3a c8 99 20 22 4f  |  ...."  .:.. "O|
00010530  53 5f 42 79 74 65 22 2c  32 30 32 2c 63 61 70 73  |S_Byte",202,caps|
00010540  25 2c 31 31 31 0d 08 f8  05 cb 0d 08 f9 14 c8 99  |%,111...........|
00010550  20 22 4f 53 5f 42 79 74  65 22 2c 31 31 38 0d 08  | "OS_Byte",118..|
00010560  fa 05 e1 0d 08 fb 05 3a  0d 08 fc 12 dd 20 f2 70  |.......:..... .p|
00010570  72 6f 63 65 73 73 5f 6b  65 79 0d 08 fd 1f e7 20  |rocess_key..... |
00010580  70 72 69 6e 74 69 6e 67  25 20 84 20 69 6e 64 65  |printing% . inde|
00010590  78 69 6e 67 25 20 8c 20  e1 0d 08 fe 0b ea 20 54  |xing% . ...... T|
000105a0  25 2c 4e 24 0d 08 ff 26  c8 99 20 22 57 69 6d 70  |%,N$...&.. "Wimp|
000105b0  5f 47 65 74 43 61 72 65  74 50 6f 73 69 74 69 6f  |_GetCaretPositio|
000105c0  6e 22 2c 2c 62 6c 6f 63  6b 25 0d 09 00 34 77 69  |n",,block%...4wi|
000105d0  25 3d 62 6c 6f 63 6b 25  21 30 3a 69 63 25 3d 62  |%=block%!0:ic%=b|
000105e0  6c 6f 63 6b 25 21 34 3a  6b 65 79 5f 70 72 65 73  |lock%!4:key_pres|
000105f0  73 65 64 25 3d 62 6c 6f  63 6b 25 21 32 34 0d 09  |sed%=block%!24..|
00010600  01 0c c8 8e 20 77 69 25  20 ca 0d 09 02 1a 20 20  |.... wi% .....  |
00010610  c9 20 6d 61 69 6e 57 25  3a f2 6d 61 69 6e 5f 70  |. mainW%:.main_p|
00010620  72 65 73 73 0d 09 03 1e  20 20 c9 20 6b 65 79 70  |ress....  . keyp|
00010630  61 64 57 25 3a f2 6b 65  79 70 61 64 5f 70 72 65  |adW%:.keypad_pre|
00010640  73 73 0d 09 04 1d 20 20  c9 20 70 61 73 73 57 25  |ss....  . passW%|
00010650  3a f2 64 62 6f 78 5f 70  72 65 73 73 28 34 29 0d  |:.dbox_press(4).|
00010660  09 05 1f 20 20 c9 20 63  68 61 6e 67 65 57 25 3a  |...  . changeW%:|
00010670  f2 64 62 6f 78 5f 70 72  65 73 73 28 34 29 0d 09  |.dbox_press(4)..|
00010680  06 1f 20 20 c9 20 74 61  62 6c 65 57 25 3a f2 64  |..  . tableW%:.d|
00010690  62 6f 78 5f 70 72 65 73  73 28 32 36 29 0d 09 07  |box_press(26)...|
000106a0  1d 20 20 c9 20 73 61 76  65 57 25 3a f2 64 62 6f  |.  . saveW%:.dbo|
000106b0  78 5f 70 72 65 73 73 28  32 29 0d 09 08 20 20 20  |x_press(2)...   |
000106c0  c9 20 64 61 74 61 64 69  63 57 25 3a f2 64 61 74  |. datadicW%:.dat|
000106d0  61 64 69 63 5f 70 72 65  73 73 0d 09 09 1f 20 20  |adic_press....  |
000106e0  c9 20 70 72 69 6e 74 57  25 3a f2 64 62 6f 78 5f  |. printW%:.dbox_|
000106f0  70 72 65 73 73 28 32 30  29 0d 09 0a 1f 20 20 c9  |press(20)....  .|
00010700  20 6c 61 62 65 6c 57 25  3a f2 64 62 6f 78 5f 70  | labelW%:.dbox_p|
00010710  72 65 73 73 28 31 35 29  0d 09 0b 1e 20 20 c9 20  |ress(15)....  . |
00010720  63 72 65 61 74 65 57 25  3a f2 63 72 65 61 74 65  |createW%:.create|
00010730  5f 70 72 65 73 73 0d 09  0c 1f 20 20 c9 20 61 63  |_press....  . ac|
00010740  63 65 73 73 57 25 3a f2  64 62 6f 78 5f 70 72 65  |cessW%:.dbox_pre|
00010750  73 73 28 33 29 0d 09 0d  1c 20 20 c9 20 6b 65 79  |ss(3)....  . key|
00010760  57 25 3a f2 64 62 6f 78  5f 70 72 65 73 73 28 37  |W%:.dbox_press(7|
00010770  29 0d 09 0e 20 20 20 c9  20 73 61 76 65 73 75 62  |)...   . savesub|
00010780  57 25 3a f2 64 62 6f 78  5f 70 72 65 73 73 28 32  |W%:.dbox_press(2|
00010790  29 0d 09 0f 1c 20 20 c9  20 6d 61 74 63 68 57 25  |)....  . matchW%|
000107a0  3a f2 6d 61 74 63 68 5f  70 72 65 73 73 0d 09 10  |:.match_press...|
000107b0  1d 20 20 c9 20 6d 6f 76  65 57 25 3a f2 64 62 6f  |.  . moveW%:.dbo|
000107c0  78 5f 70 72 65 73 73 28  38 29 0d 09 11 1d 20 20  |x_press(8)....  |
000107d0  c9 20 63 61 6c 63 57 25  3a f2 64 62 6f 78 5f 70  |. calcW%:.dbox_p|
000107e0  72 65 73 73 28 31 29 0d  09 12 1e 20 20 c9 20 6d  |ress(1)....  . m|
000107f0  65 72 67 65 57 25 3a f2  64 62 6f 78 5f 70 72 65  |ergeW%:.dbox_pre|
00010800  73 73 28 37 29 0d 09 13  1d 20 20 c9 20 73 69 7a  |ss(7)....  . siz|
00010810  65 57 25 3a f2 64 62 6f  78 5f 70 72 65 73 73 28  |eW%:.dbox_press(|
00010820  34 29 0d 09 14 1c 20 20  c9 20 63 73 76 57 25 3a  |4)....  . csvW%:|
00010830  f2 64 62 6f 78 5f 70 72  65 73 73 28 39 29 0d 09  |.dbox_press(9)..|
00010840  15 05 cb 0d 09 16 05 e1  0d 09 17 05 3a 0d 09 18  |............:...|
00010850  13 dd 20 f2 6b 65 79 70  61 64 5f 70 72 65 73 73  |.. .keypad_press|
00010860  0d 09 19 17 e7 20 6b 65  79 5f 70 72 65 73 73 65  |..... key_presse|
00010870  64 25 3d 31 33 20 8c 0d  09 1a 0e 20 20 c8 8e 20  |d%=13 .....  .. |
00010880  69 63 25 20 ca 0d 09 1b  21 20 20 20 20 c9 20 32  |ic% ....!    . 2|
00010890  37 3a f2 6d 6f 75 73 65  28 30 2c 30 2c 34 2c 77  |7:.mouse(0,0,4,w|
000108a0  69 25 2c 32 38 29 0d 09  1c 21 20 20 20 20 c9 20  |i%,28)...!    . |
000108b0  32 39 3a f2 6d 6f 75 73  65 28 30 2c 30 2c 34 2c  |29:.mouse(0,0,4,|
000108c0  77 69 25 2c 33 30 29 0d  09 1d 07 20 20 cb 0d 09  |wi%,30)....  ...|
000108d0  1e 29 20 20 cc 20 c8 99  20 22 57 69 6d 70 5f 50  |.)  . .. "Wimp_P|
000108e0  72 6f 63 65 73 73 4b 65  79 22 2c 6b 65 79 5f 70  |rocessKey",key_p|
000108f0  72 65 73 73 65 64 25 0d  09 1f 05 cd 0d 09 20 05  |ressed%....... .|
00010900  e1 0d 09 21 05 3a 0d 09  22 11 dd 20 f2 6d 61 69  |...!.:..".. .mai|
00010910  6e 5f 70 72 65 73 73 0d  09 23 42 e7 20 ac 20 a4  |n_press..#B. . .|
00010920  73 65 6c 65 63 74 65 64  28 70 61 73 73 57 25 2c  |selected(passW%,|
00010930  31 30 29 20 8c 20 c8 99  20 22 57 69 6d 70 5f 50  |10) . .. "Wimp_P|
00010940  72 6f 63 65 73 73 4b 65  79 22 2c 6b 65 79 5f 70  |rocessKey",key_p|
00010950  72 65 73 73 65 64 25 3a  e1 0d 09 24 0b ea 20 69  |ressed%:...$.. i|
00010960  63 6f 6e 25 0d 09 25 38  e7 20 66 6c 61 73 68 25  |con%..%8. flash%|
00010970  20 8c 20 f2 64 65 73 65  6c 65 63 74 28 6d 61 69  | . .deselect(mai|
00010980  6e 57 25 2c 66 69 65 6c  64 25 28 66 6c 61 73 68  |nW%,field%(flash|
00010990  25 29 29 3a 66 6c 61 73  68 25 3d a3 0d 09 26 5d  |%)):flash%=...&]|
000109a0  e7 20 6b 65 79 5f 70 72  65 73 73 65 64 25 3c 3e  |. key_pressed%<>|
000109b0  33 39 32 20 8c 20 e7 20  a4 76 61 6c 69 64 61 74  |392 . . .validat|
000109c0  65 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 2c 54  |e(Fieldnumber%,T|
000109d0  25 2c 4e 24 29 3d a3 20  8c 20 e1 20 8b 20 f2 75  |%,N$)=. . . . .u|
000109e0  70 64 61 74 65 5f 63 61  6c 63 73 28 46 69 65 6c  |pdate_calcs(Fiel|
000109f0  64 6e 75 6d 62 65 72 25  29 0d 09 27 15 c8 8e 20  |dnumber%)..'... |
00010a00  6b 65 79 5f 70 72 65 73  73 65 64 25 20 ca 0d 09  |key_pressed% ...|
00010a10  28 0b 20 20 c9 20 31 33  3a 0d 09 29 0e 20 20 c8  |(.  . 13:..).  .|
00010a20  8e 20 77 69 25 20 ca 0d  09 2a 11 20 20 20 20 c9  |. wi% ...*.    .|
00010a30  20 6d 61 69 6e 57 25 3a  0d 09 2b 22 20 20 20 20  | mainW%:..+"    |
00010a40  20 20 e7 20 46 69 65 6c  64 6e 75 6d 62 65 72 25  |  . Fieldnumber%|
00010a50  3d 66 69 65 6c 64 73 25  20 8c 0d 09 2c 23 20 20  |=fields% ...,#  |
00010a60  20 20 20 20 20 20 f2 63  6c 6f 73 65 5f 77 69 6e  |      .close_win|
00010a70  64 6f 77 28 72 65 6c 61  74 65 57 25 29 0d 09 2d  |dow(relateW%)..-|
00010a80  1d 20 20 20 20 20 20 20  20 f2 64 69 73 70 6c 61  |.        .displa|
00010a90  79 28 6b 65 79 25 2c 2d  31 29 0d 09 2e 0d 20 20  |y(key%,-1)....  |
00010aa0  20 20 20 20 20 20 cc 0d  09 2f 0d 20 20 20 20 20  |      .../.     |
00010ab0  20 20 20 f5 0d 09 30 45  20 20 20 20 20 20 20 20  |   ...0E        |
00010ac0  20 20 46 69 65 6c 64 6e  75 6d 62 65 72 25 2b 3d  |  Fieldnumber%+=|
00010ad0  31 3a e7 20 46 69 65 6c  64 6e 75 6d 62 65 72 25  |1:. Fieldnumber%|
00010ae0  3e 66 69 65 6c 64 73 25  20 8c 20 46 69 65 6c 64  |>fields% . Field|
00010af0  6e 75 6d 62 65 72 25 3d  31 0d 09 31 28 20 20 20  |number%=1..1(   |
00010b00  20 20 20 20 20 20 20 63  25 3d 63 68 61 72 74 79  |       c%=charty|
00010b10  70 65 25 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |pe%(Fieldnumber%|
00010b20  29 0d 09 32 32 20 20 20  20 20 20 20 20 fd 20 6c  |)..22        . l|
00010b30  65 6e 25 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |en%(Fieldnumber%|
00010b40  29 3e 30 20 80 20 28 63  25 3c 36 20 84 20 63 25  |)>0 . (c%<6 . c%|
00010b50  3d 38 29 0d 09 33 26 20  20 20 20 20 20 20 20 69  |=8)..3&        i|
00010b60  63 6f 6e 25 3d 66 69 65  6c 64 25 28 46 69 65 6c  |con%=field%(Fiel|
00010b70  64 6e 75 6d 62 65 72 25  29 0d 09 34 24 20 20 20  |dnumber%)..4$   |
00010b80  20 20 20 20 20 f2 73 65  74 5f 63 61 72 65 74 28  |     .set_caret(|
00010b90  6d 61 69 6e 57 25 2c 69  63 6f 6e 25 29 0d 09 35  |mainW%,icon%)..5|
00010ba0  2a 20 20 20 20 20 20 20  20 e7 20 72 65 6c 61 74  |*        . relat|
00010bb0  69 6f 6e 73 25 3d b9 20  8c 20 f2 72 65 6c 61 74  |ions%=. . .relat|
00010bc0  69 6f 6e 73 28 a3 29 0d  09 36 0b 20 20 20 20 20  |ions(.)..6.     |
00010bd0  20 cd 0d 09 37 07 20 20  cb 0d 09 38 0c 20 20 c9  | ...7.  ...8.  .|
00010be0  20 33 39 38 3a 0d 09 39  07 20 20 f5 0d 09 3a 3f  | 398:..9.  ...:?|
00010bf0  20 20 20 20 46 69 65 6c  64 6e 75 6d 62 65 72 25  |    Fieldnumber%|
00010c00  2b 3d 31 3a e7 20 46 69  65 6c 64 6e 75 6d 62 65  |+=1:. Fieldnumbe|
00010c10  72 25 3e 66 69 65 6c 64  73 25 20 8c 20 46 69 65  |r%>fields% . Fie|
00010c20  6c 64 6e 75 6d 62 65 72  25 3d 31 0d 09 3b 22 20  |ldnumber%=1..;" |
00010c30  20 20 20 63 25 3d 63 68  61 72 74 79 70 65 25 28  |   c%=chartype%(|
00010c40  46 69 65 6c 64 6e 75 6d  62 65 72 25 29 0d 09 3c  |Fieldnumber%)..<|
00010c50  2c 20 20 fd 20 6c 65 6e  25 28 46 69 65 6c 64 6e  |,  . len%(Fieldn|
00010c60  75 6d 62 65 72 25 29 3e  30 20 80 20 28 63 25 3c  |umber%)>0 . (c%<|
00010c70  36 20 84 20 63 25 3d 38  29 0d 09 3d 20 20 20 69  |6 . c%=8)..=   i|
00010c80  63 6f 6e 25 3d 66 69 65  6c 64 25 28 46 69 65 6c  |con%=field%(Fiel|
00010c90  64 6e 75 6d 62 65 72 25  29 0d 09 3e 1e 20 20 f2  |dnumber%)..>.  .|
00010ca0  73 65 74 5f 63 61 72 65  74 28 6d 61 69 6e 57 25  |set_caret(mainW%|
00010cb0  2c 69 63 6f 6e 25 29 0d  09 3f 24 20 20 e7 20 72  |,icon%)..?$  . r|
00010cc0  65 6c 61 74 69 6f 6e 73  25 3d b9 20 8c 20 f2 72  |elations%=. . .r|
00010cd0  65 6c 61 74 69 6f 6e 73  28 a3 29 0d 09 40 0c 20  |elations(.)..@. |
00010ce0  20 c9 20 33 39 39 3a 0d  09 41 07 20 20 f5 0d 09  | . 399:..A.  ...|
00010cf0  42 3f 20 20 20 20 46 69  65 6c 64 6e 75 6d 62 65  |B?    Fieldnumbe|
00010d00  72 25 2d 3d 31 3a e7 20  46 69 65 6c 64 6e 75 6d  |r%-=1:. Fieldnum|
00010d10  62 65 72 25 3c 31 20 8c  20 46 69 65 6c 64 6e 75  |ber%<1 . Fieldnu|
00010d20  6d 62 65 72 25 3d 66 69  65 6c 64 73 25 0d 09 43  |mber%=fields%..C|
00010d30  22 20 20 20 20 63 25 3d  63 68 61 72 74 79 70 65  |"    c%=chartype|
00010d40  25 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 29 0d  |%(Fieldnumber%).|
00010d50  09 44 2c 20 20 fd 20 6c  65 6e 25 28 46 69 65 6c  |.D,  . len%(Fiel|
00010d60  64 6e 75 6d 62 65 72 25  29 3e 30 20 80 20 28 63  |dnumber%)>0 . (c|
00010d70  25 3c 36 20 84 20 63 25  3d 38 29 0d 09 45 20 20  |%<6 . c%=8)..E  |
00010d80  20 69 63 6f 6e 25 3d 66  69 65 6c 64 25 28 46 69  | icon%=field%(Fi|
00010d90  65 6c 64 6e 75 6d 62 65  72 25 29 0d 09 46 1e 20  |eldnumber%)..F. |
00010da0  20 f2 73 65 74 5f 63 61  72 65 74 28 6d 61 69 6e  | .set_caret(main|
00010db0  57 25 2c 69 63 6f 6e 25  29 0d 09 47 24 20 20 e7  |W%,icon%)..G$  .|
00010dc0  20 72 65 6c 61 74 69 6f  6e 73 25 3d b9 20 8c 20  | relations%=. . |
00010dd0  f2 72 65 6c 61 74 69 6f  6e 73 28 a3 29 0d 09 48  |.relations(.)..H|
00010de0  34 20 20 c9 20 33 38 39  3a e7 20 41 63 63 65 73  |4  . 389:. Acces|
00010df0  73 25 20 8c 20 f2 73 68  6f 77 5f 6d 65 6e 75 28  |s% . .show_menu(|
00010e00  63 68 61 6e 67 65 57 25  2c 35 30 30 2c 36 30 30  |changeW%,500,600|
00010e10  29 0d 09 49 0c 20 20 c9  20 34 30 35 3a 0d 09 4a  |)..I.  . 405:..J|
00010e20  1a 20 20 e7 20 a9 28 70  72 69 6e 74 6f 72 64 65  |.  . .(printorde|
00010e30  72 24 29 3d 32 20 8c 0d  09 4b 42 20 20 20 20 46  |r$)=2 ...KB    F|
00010e40  69 65 6c 64 6e 75 6d 62  65 72 25 3d a4 66 6e 75  |ieldnumber%=.fnu|
00010e50  6d 28 70 72 69 6e 74 6f  72 64 65 72 24 29 3a 56  |m(printorder$):V|
00010e60  25 3d 63 68 61 72 74 79  70 65 25 28 46 69 65 6c  |%=chartype%(Fiel|
00010e70  64 6e 75 6d 62 65 72 25  29 0d 09 4c 0f 20 20 20  |dnumber%)..L.   |
00010e80  20 c8 8e 20 56 25 20 ca  0d 09 4d 12 20 20 20 20  | .. V% ...M.    |
00010e90  20 20 c9 20 33 36 2c 33  39 3a 0d 09 4e 46 20 20  |  . 36,39:..NF  |
00010ea0  20 20 20 20 e7 20 a4 62  6c 6f 62 5f 70 61 74 68  |    . .blob_path|
00010eb0  28 a3 2c 24 64 61 74 61  62 61 73 65 25 2c 52 45  |(.,$database%,RE|
00010ec0  43 25 2c 46 69 65 6c 64  6e 75 6d 62 65 72 25 2c  |C%,Fieldnumber%,|
00010ed0  56 25 2c 6f 62 6a 65 63  74 24 29 3e 3d 30 20 8c  |V%,object$)>=0 .|
00010ee0  0d 09 4f 1e 20 20 20 20  20 20 20 20 f2 73 65 74  |..O.        .set|
00010ef0  5f 75 70 5f 66 69 65 6c  64 5f 6d 65 6e 75 0d 09  |_up_field_menu..|
00010f00  50 26 20 20 20 20 20 20  20 20 f2 73 68 6f 77 5f  |P&        .show_|
00010f10  6d 65 6e 75 28 73 61 76  65 57 25 2c 35 30 30 2c  |menu(saveW%,500,|
00010f20  36 30 30 29 0d 09 51 0b  20 20 20 20 20 20 cd 0d  |600)..Q.      ..|
00010f30  09 52 09 20 20 20 20 cb  0d 09 53 07 20 20 cd 0d  |.R.    ...S.  ..|
00010f40  09 54 17 20 20 c9 20 34  30 38 3a f2 76 61 6c 5f  |.T.  . 408:.val_|
00010f50  6f 6e 5f 6f 66 66 0d 09  55 24 20 20 c9 20 33 38  |on_off..U$  . 38|
00010f60  37 3a f2 6d 6f 75 73 65  28 30 2c 30 2c 34 2c 6b  |7:.mouse(0,0,4,k|
00010f70  65 79 70 61 64 57 25 2c  32 29 0d 09 56 24 20 20  |eypadW%,2)..V$  |
00010f80  c9 20 34 30 33 3a f2 6d  6f 75 73 65 28 30 2c 30  |. 403:.mouse(0,0|
00010f90  2c 34 2c 6b 65 79 70 61  64 57 25 2c 33 29 0d 09  |,4,keypadW%,3)..|
00010fa0  57 24 20 20 c9 20 33 38  36 3a f2 6d 6f 75 73 65  |W$  . 386:.mouse|
00010fb0  28 30 2c 30 2c 34 2c 6b  65 79 70 61 64 57 25 2c  |(0,0,4,keypadW%,|
00010fc0  34 29 0d 09 58 24 20 20  c9 20 34 30 32 3a f2 6d  |4)..X$  . 402:.m|
00010fd0  6f 75 73 65 28 30 2c 30  2c 34 2c 6b 65 79 70 61  |ouse(0,0,4,keypa|
00010fe0  64 57 25 2c 35 29 0d 09  59 24 20 20 c9 20 33 39  |dW%,5)..Y$  . 39|
00010ff0  31 3a f2 6d 6f 75 73 65  28 30 2c 30 2c 34 2c 6b  |1:.mouse(0,0,4,k|
00011000  65 79 70 61 64 57 25 2c  36 29 0d 09 5a 24 20 20  |eypadW%,6)..Z$  |
00011010  c9 20 34 30 37 3a f2 6d  6f 75 73 65 28 30 2c 30  |. 407:.mouse(0,0|
00011020  2c 34 2c 6b 65 79 70 61  64 57 25 2c 37 29 0d 09  |,4,keypadW%,7)..|
00011030  5b 24 20 20 c9 20 33 39  33 3a f2 6d 6f 75 73 65  |[$  . 393:.mouse|
00011040  28 30 2c 30 2c 34 2c 6b  65 79 70 61 64 57 25 2c  |(0,0,4,keypadW%,|
00011050  38 29 0d 09 5c 24 20 20  c9 20 34 30 39 3a f2 6d  |8)..\$  . 409:.m|
00011060  6f 75 73 65 28 30 2c 30  2c 34 2c 6b 65 79 70 61  |ouse(0,0,4,keypa|
00011070  64 57 25 2c 39 29 0d 09  5d 25 20 20 c9 20 33 38  |dW%,9)..]%  . 38|
00011080  38 3a f2 6d 6f 75 73 65  28 30 2c 30 2c 34 2c 6b  |8:.mouse(0,0,4,k|
00011090  65 79 70 61 64 57 25 2c  31 30 29 0d 09 5e 25 20  |eypadW%,10)..^% |
000110a0  20 c9 20 34 30 34 3a f2  6d 6f 75 73 65 28 30 2c  | . 404:.mouse(0,|
000110b0  30 2c 34 2c 6b 65 79 70  61 64 57 25 2c 31 31 29  |0,4,keypadW%,11)|
000110c0  0d 09 5f 25 20 20 c9 20  34 32 30 3a f2 6d 6f 75  |.._%  . 420:.mou|
000110d0  73 65 28 30 2c 30 2c 34  2c 6b 65 79 70 61 64 57  |se(0,0,4,keypadW|
000110e0  25 2c 31 32 29 0d 09 60  25 20 20 c9 20 33 38 35  |%,12)..`%  . 385|
000110f0  3a f2 6d 6f 75 73 65 28  30 2c 30 2c 34 2c 6b 65  |:.mouse(0,0,4,ke|
00011100  79 70 61 64 57 25 2c 31  33 29 0d 09 61 25 20 20  |ypadW%,13)..a%  |
00011110  c9 20 34 30 31 3a f2 6d  6f 75 73 65 28 30 2c 30  |. 401:.mouse(0,0|
00011120  2c 31 2c 6b 65 79 70 61  64 57 25 2c 31 33 29 0d  |,1,keypadW%,13).|
00011130  09 62 25 20 20 c9 20 34  35 38 3a f2 6d 6f 75 73  |.b%  . 458:.mous|
00011140  65 28 30 2c 30 2c 34 2c  6b 65 79 70 61 64 57 25  |e(0,0,4,keypadW%|
00011150  2c 31 34 29 0d 09 63 25  20 20 c9 20 33 39 30 3a  |,14)..c%  . 390:|
00011160  f2 6d 6f 75 73 65 28 30  2c 30 2c 34 2c 6b 65 79  |.mouse(0,0,4,key|
00011170  70 61 64 57 25 2c 31 35  29 0d 09 64 25 20 20 c9  |padW%,15)..d%  .|
00011180  20 34 30 36 3a f2 6d 6f  75 73 65 28 30 2c 30 2c  | 406:.mouse(0,0,|
00011190  34 2c 6b 65 79 70 61 64  57 25 2c 31 36 29 0d 09  |4,keypadW%,16)..|
000111a0  65 25 20 20 c9 20 34 32  32 3a f2 6d 6f 75 73 65  |e%  . 422:.mouse|
000111b0  28 30 2c 30 2c 34 2c 6b  65 79 70 61 64 57 25 2c  |(0,0,4,keypadW%,|
000111c0  31 37 29 0d 09 66 25 20  20 c9 20 33 39 32 3a f2  |17)..f%  . 392:.|
000111d0  6d 6f 75 73 65 28 30 2c  30 2c 34 2c 6b 65 79 70  |mouse(0,0,4,keyp|
000111e0  61 64 57 25 2c 31 38 29  0d 09 67 17 20 20 c9 20  |adW%,18)..g.  . |
000111f0  33 38 34 3a f2 70 72 69  6e 74 5f 74 68 69 73 0d  |384:.print_this.|
00011200  09 68 12 20 20 c9 20 34  30 30 3a f2 6d 61 74 63  |.h.  . 400:.matc|
00011210  68 0d 09 69 21 20 20 c9  20 34 31 36 3a f2 6f 70  |h..i!  . 416:.op|
00011220  65 6e 5f 77 69 6e 64 6f  77 28 70 72 69 6e 74 57  |en_window(printW|
00011230  25 29 0d 09 6a 29 20 20  7f 3a c8 99 20 22 57 69  |%)..j)  .:.. "Wi|
00011240  6d 70 5f 50 72 6f 63 65  73 73 4b 65 79 22 2c 6b  |mp_ProcessKey",k|
00011250  65 79 5f 70 72 65 73 73  65 64 25 0d 09 6b 05 cb  |ey_pressed%..k..|
00011260  0d 09 6c 20 c8 8e 20 63  68 61 72 74 79 70 65 25  |..l .. chartype%|
00011270  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 20 ca  |(Fieldnumber%) .|
00011280  0d 09 6d 22 20 20 c9 20  32 2c 34 3a c8 99 20 22  |..m"  . 2,4:.. "|
00011290  4f 53 5f 42 79 74 65 22  2c 32 30 32 2c 30 2c 32  |OS_Byte",202,0,2|
000112a0  33 39 0d 09 6e 1f 20 20  7f 3a c8 99 20 22 4f 53  |39..n.  .:.. "OS|
000112b0  5f 42 79 74 65 22 2c 32  30 32 2c 31 36 2c 31 31  |_Byte",202,16,11|
000112c0  31 0d 09 6f 05 cb 0d 09  70 14 c8 99 20 22 4f 53  |1..o....p... "OS|
000112d0  5f 42 79 74 65 22 2c 31  31 38 0d 09 71 15 c8 99  |_Byte",118..q...|
000112e0  20 22 4f 53 5f 42 79 74  65 22 2c 31 35 2c 30 0d  | "OS_Byte",15,0.|
000112f0  09 72 05 e1 0d 09 73 05  3a 0d 09 74 16 dd 20 f2  |.r....s.:..t.. .|
00011300  64 62 6f 78 5f 70 72 65  73 73 28 6f 6b 25 29 0d  |dbox_press(ok%).|
00011310  09 75 15 c8 8e 20 6b 65  79 5f 70 72 65 73 73 65  |.u... key_presse|
00011320  64 25 20 ca 0d 09 76 43  20 20 c9 20 31 33 3a e7  |d% ...vC  . 13:.|
00011330  20 a4 6e 65 78 74 5f 77  72 69 74 65 61 62 6c 65  | .next_writeable|
00011340  28 77 69 25 2c 69 63 25  2c 31 2c 31 29 3d b9 20  |(wi%,ic%,1,1)=. |
00011350  8c 20 f2 6d 6f 75 73 65  28 30 2c 30 2c 34 2c 77  |. .mouse(0,0,4,w|
00011360  69 25 2c 6f 6b 25 29 0d  09 77 33 20 20 c9 20 32  |i%,ok%)..w3  . 2|
00011370  37 3a f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |7:.close_window(|
00011380  77 69 25 29 3a f2 73 65  74 5f 63 61 72 65 74 28  |wi%):.set_caret(|
00011390  6d 61 69 6e 57 25 2c 2d  31 29 0d 09 78 2b 20 20  |mainW%,-1)..x+  |
000113a0  c9 20 33 39 38 3a 66 25  3d a4 6e 65 78 74 5f 77  |. 398:f%=.next_w|
000113b0  72 69 74 65 61 62 6c 65  28 77 69 25 2c 69 63 25  |riteable(wi%,ic%|
000113c0  2c 31 2c 30 29 0d 09 79  2c 20 20 c9 20 33 39 39  |,1,0)..y,  . 399|
000113d0  3a 66 25 3d a4 6e 65 78  74 5f 77 72 69 74 65 61  |:f%=.next_writea|
000113e0  62 6c 65 28 77 69 25 2c  69 63 25 2c 2d 31 2c 30  |ble(wi%,ic%,-1,0|
000113f0  29 0d 09 7a 29 20 20 7f  20 c8 99 20 22 57 69 6d  |)..z)  . .. "Wim|
00011400  70 5f 50 72 6f 63 65 73  73 4b 65 79 22 2c 6b 65  |p_ProcessKey",ke|
00011410  79 5f 70 72 65 73 73 65  64 25 0d 09 7b 05 cb 0d  |y_pressed%..{...|
00011420  09 7c 05 e1 0d 09 7d 05  3a 0d 09 7e 14 dd 20 f2  |.|....}.:..~.. .|
00011430  64 61 74 61 64 69 63 5f  70 72 65 73 73 0d 09 7f  |datadic_press...|
00011440  0c ea 20 69 63 6f 6e 73  25 0d 09 80 1f 69 63 6f  |.. icons%....ico|
00011450  6e 73 25 3d 52 6f 77 73  25 2a 28 54 61 62 46 69  |ns%=Rows%*(TabFi|
00011460  65 6c 64 73 25 2b 31 29  0d 09 81 15 c8 8e 20 6b  |elds%+1)...... k|
00011470  65 79 5f 70 72 65 73 73  65 64 25 20 ca 0d 09 82  |ey_pressed% ....|
00011480  0b 20 20 c9 20 31 33 3a  0d 09 83 32 20 20 e7 20  |.  . 13:...2  . |
00011490  69 63 25 3c 69 63 6f 6e  73 25 2d 31 20 8c 20 f2  |ic%<icons%-1 . .|
000114a0  73 65 74 5f 63 61 72 65  74 28 64 61 74 61 64 69  |set_caret(datadi|
000114b0  63 57 25 2c 69 63 25 2b  31 29 0d 09 84 0c 20 20  |cW%,ic%+1)....  |
000114c0  c9 20 33 39 38 3a 0d 09  85 48 20 20 e7 20 69 63  |. 398:...H  . ic|
000114d0  25 3c 69 63 6f 6e 73 25  2d 54 61 62 46 69 65 6c  |%<icons%-TabFiel|
000114e0  64 73 25 2d 31 20 8c 20  f2 73 65 74 5f 63 61 72  |ds%-1 . .set_car|
000114f0  65 74 28 64 61 74 61 64  69 63 57 25 2c 69 63 25  |et(datadicW%,ic%|
00011500  2b 54 61 62 46 69 65 6c  64 73 25 2b 31 29 0d 09  |+TabFields%+1)..|
00011510  86 0c 20 20 c9 20 33 39  39 3a 0d 09 87 42 20 20  |..  . 399:...B  |
00011520  e7 20 69 63 25 3e 3d 54  61 62 46 69 65 6c 64 73  |. ic%>=TabFields|
00011530  25 2b 31 20 8c 20 f2 73  65 74 5f 63 61 72 65 74  |%+1 . .set_caret|
00011540  28 64 61 74 61 64 69 63  57 25 2c 69 63 25 2d 54  |(datadicW%,ic%-T|
00011550  61 62 46 69 65 6c 64 73  25 2d 31 29 0d 09 88 29  |abFields%-1)...)|
00011560  20 20 7f 3a c8 99 20 22  57 69 6d 70 5f 50 72 6f  |  .:.. "Wimp_Pro|
00011570  63 65 73 73 4b 65 79 22  2c 6b 65 79 5f 70 72 65  |cessKey",key_pre|
00011580  73 73 65 64 25 0d 09 89  05 cb 0d 09 8a 05 e1 0d  |ssed%...........|
00011590  09 8b 05 3a 0d 09 8c 13  dd 20 f2 63 72 65 61 74  |...:..... .creat|
000115a0  65 5f 70 72 65 73 73 0d  09 8d 0a c8 8e 20 b9 20  |e_press...... . |
000115b0  ca 0d 09 8e 3d 20 20 c9  20 a4 73 68 61 64 65 64  |....=  . .shaded|
000115c0  28 77 69 25 2c 32 39 29  3a e7 20 ac 20 a4 73 68  |(wi%,29):. . .sh|
000115d0  61 64 65 64 28 77 69 25  2c 31 38 29 20 8c 20 f2  |aded(wi%,18) . .|
000115e0  64 62 6f 78 5f 70 72 65  73 73 28 31 38 29 0d 09  |dbox_press(18)..|
000115f0  8f 2d 20 20 7f 3a e7 20  ac 20 a4 73 68 61 64 65  |.-  .:. . .shade|
00011600  64 28 77 69 25 2c 32 39  29 20 8c 20 f2 64 62 6f  |d(wi%,29) . .dbo|
00011610  78 5f 70 72 65 73 73 28  32 39 29 0d 09 90 05 cb  |x_press(29).....|
00011620  0d 09 91 05 e1 0d 09 92  05 3a 0d 09 93 12 dd 20  |.........:..... |
00011630  f2 6d 61 74 63 68 5f 70  72 65 73 73 0d 09 94 15  |.match_press....|
00011640  c8 8e 20 6b 65 79 5f 70  72 65 73 73 65 64 25 20  |.. key_pressed% |
00011650  ca 0d 09 95 22 20 20 c9  20 31 33 3a f2 6d 6f 75  |...."  . 13:.mou|
00011660  73 65 28 30 2c 30 2c 34  2c 6d 61 74 63 68 57 25  |se(0,0,4,matchW%|
00011670  2c 31 29 0d 09 96 46 20  20 c9 20 32 37 3a f2 63  |,1)...F  . 27:.c|
00011680  6c 6f 73 65 5f 77 69 6e  64 6f 77 28 6d 61 74 63  |lose_window(matc|
00011690  68 57 25 29 3a c8 99 20  22 57 69 6d 70 5f 53 65  |hW%):.. "Wimp_Se|
000116a0  74 43 61 72 65 74 50 6f  73 69 74 69 6f 6e 22 2c  |tCaretPosition",|
000116b0  6d 61 69 6e 57 25 2c 2d  31 0d 09 97 17 20 20 c9  |mainW%,-1....  .|
000116c0  20 33 38 34 3a f2 70 72  69 6e 74 5f 74 68 69 73  | 384:.print_this|
000116d0  0d 09 98 29 20 20 7f 3a  c8 99 20 22 57 69 6d 70  |...)  .:.. "Wimp|
000116e0  5f 50 72 6f 63 65 73 73  4b 65 79 22 2c 6b 65 79  |_ProcessKey",key|
000116f0  5f 70 72 65 73 73 65 64  25 0d 09 99 05 cb 0d 09  |_pressed%.......|
00011700  9a 05 e1 0d 09 9b 05 3a  0d 09 9c 12 dd 20 f2 6d  |.......:..... .m|
00011710  65 6e 75 5f 73 65 6c 65  63 74 0d 09 9d 16 ea 20  |enu_select..... |
00011720  68 61 6e 64 6c 65 25 2c  50 25 2c 51 25 2c 49 25  |handle%,P%,Q%,I%|
00011730  0d 09 9e 26 63 68 6f 69  63 65 31 25 3d 21 62 6c  |...&choice1%=!bl|
00011740  6f 63 6b 25 3a 63 68 6f  69 63 65 32 25 3d 62 6c  |ock%:choice2%=bl|
00011750  6f 63 6b 25 21 34 0d 09  9f 28 63 68 6f 69 63 65  |ock%!4...(choice|
00011760  33 25 3d 62 6c 6f 63 6b  25 21 38 3a 63 68 6f 69  |3%=block%!8:choi|
00011770  63 65 34 25 3d 62 6c 6f  63 6b 25 21 31 32 0d 09  |ce4%=block%!12..|
00011780  a0 08 50 25 3d 31 0d 09  a1 35 c8 99 20 22 57 69  |..P%=1...5.. "Wi|
00011790  6d 70 5f 44 65 63 6f 64  65 4d 65 6e 75 22 2c 2c  |mp_DecodeMenu",,|
000117a0  6d 65 6e 75 68 61 6e 64  6c 65 25 2c 62 6c 6f 63  |menuhandle%,bloc|
000117b0  6b 25 2c 63 68 6f 69 63  65 73 25 0d 09 a2 0e e3  |k%,choices%.....|
000117c0  20 49 25 3d 31 20 b8 20  34 0d 09 a3 1d 20 20 51  | I%=1 . 4....  Q|
000117d0  25 3d a7 24 63 68 6f 69  63 65 73 25 2c 22 2e 22  |%=.$choices%,"."|
000117e0  2c 50 25 2b 31 29 0d 09  a4 26 20 20 63 68 6f 69  |,P%+1)...&  choi|
000117f0  63 65 24 28 49 25 29 3d  c1 24 63 68 6f 69 63 65  |ce$(I%)=.$choice|
00011800  73 25 2c 50 25 2c 51 25  2d 50 25 29 0d 09 a5 0d  |s%,P%,Q%-P%)....|
00011810  20 20 50 25 3d 51 25 2b  31 0d 09 a6 08 ed 20 49  |  P%=Q%+1..... I|
00011820  25 0d 09 a7 24 c8 99 20  22 57 69 6d 70 5f 47 65  |%...$.. "Wimp_Ge|
00011830  74 50 6f 69 6e 74 65 72  49 6e 66 6f 22 2c 2c 62  |tPointerInfo",,b|
00011840  6c 6f 63 6b 25 0d 09 a8  14 72 65 64 6f 25 3d 62  |lock%....redo%=b|
00011850  6c 6f 63 6b 25 21 38 3d  31 0d 09 a9 14 c8 8e 20  |lock%!8=1...... |
00011860  6d 65 6e 75 68 61 6e 64  6c 65 25 20 ca 0d 09 aa  |menuhandle% ....|
00011870  11 20 20 c9 20 6d 65 6e  75 25 28 30 29 3a 0d 09  |.  . menu%(0):..|
00011880  ab 15 20 20 c8 8e 20 63  68 6f 69 63 65 24 28 31  |..  .. choice$(1|
00011890  29 20 ca 0d 09 ac 38 20  20 20 20 c9 20 22 48 65  |) ....8    . "He|
000118a0  6c 70 22 3a c8 99 20 22  57 69 6d 70 5f 53 74 61  |lp":.. "Wimp_Sta|
000118b0  72 74 54 61 73 6b 22 2c  22 3c 50 62 61 73 65 24  |rtTask","<Pbase$|
000118c0  44 69 72 3e 2e 21 48 65  6c 70 22 0d 09 ad 47 20  |Dir>.!Help"...G |
000118d0  20 20 20 c9 20 22 53 61  76 65 20 63 68 6f 69 63  |   . "Save choic|
000118e0  65 73 22 3a f2 73 61 76  65 5f 63 68 6f 69 63 65  |es":.save_choice|
000118f0  73 28 22 3c 50 62 61 73  65 24 44 69 72 3e 2e 52  |s("<Pbase$Dir>.R|
00011900  65 73 6f 75 72 63 65 73  2e 43 68 6f 69 63 65 73  |esources.Choices|
00011910  22 29 0d 09 ae 4a 20 20  20 20 c9 20 22 44 65 66  |")...J    . "Def|
00011920  61 75 6c 74 20 63 68 6f  69 63 65 73 22 3a f2 67  |ault choices":.g|
00011930  65 74 5f 63 68 6f 69 63  65 73 28 22 3c 50 62 61  |et_choices("<Pba|
00011940  73 65 24 44 69 72 3e 2e  52 65 73 6f 75 72 63 65  |se$Dir>.Resource|
00011950  73 2e 44 65 66 61 75 6c  74 73 22 29 0d 09 af 16  |s.Defaults")....|
00011960  20 20 20 20 c9 20 22 55  74 69 6c 69 74 69 65 73  |    . "Utilities|
00011970  22 3a 0d 09 b0 17 20 20  20 20 c8 8e 20 63 68 6f  |":....    .. cho|
00011980  69 63 65 24 28 32 29 20  ca 0d 09 b1 1e 20 20 20  |ice$(2) .....   |
00011990  20 20 20 c9 20 22 4e 65  77 20 70 72 69 6d 61 72  |   . "New primar|
000119a0  79 20 6b 65 79 22 3a 0d  09 b2 1f 20 20 20 20 20  |y key":....     |
000119b0  20 24 4b 65 79 54 69 74  6c 65 25 3d 63 68 6f 69  | $KeyTitle%=choi|
000119c0  63 65 24 28 32 29 0d 09  b3 2d 20 20 20 20 20 20  |ce$(2)...-      |
000119d0  6b 65 79 66 75 6e 63 24  3d 63 68 6f 69 63 65 24  |keyfunc$=choice$|
000119e0  28 32 29 3a f2 73 65 74  5f 6b 65 79 64 61 74 61  |(2):.set_keydata|
000119f0  28 30 29 0d 09 b4 1d 20  20 20 20 20 20 f2 73 68  |(0)....      .sh|
00011a00  61 64 65 5f 6b 65 79 5f  69 63 6f 6e 73 28 b9 29  |ade_key_icons(.)|
00011a10  0d 09 b5 1e 20 20 20 20  20 20 e7 20 28 70 72 65  |....      . (pre|
00011a20  73 65 6e 74 25 20 80 20  32 29 3d 32 20 8c 0d 09  |sent% . 2)=2 ...|
00011a30  b6 2f 20 20 20 20 20 20  20 20 f2 73 65 6c 65 63  |./        .selec|
00011a40  74 28 6b 65 79 57 25 2c  38 29 3a f2 64 65 73 65  |t(keyW%,8):.dese|
00011a50  6c 65 63 74 28 6b 65 79  57 25 2c 39 29 0d 09 b7  |lect(keyW%,9)...|
00011a60  3b 20 20 20 20 20 20 20  20 f2 69 63 6f 6e 5f 62  |;        .icon_b|
00011a70  69 74 28 32 32 2c 6b 65  79 57 25 2c 38 2c b9 29  |it(22,keyW%,8,.)|
00011a80  3a f2 69 63 6f 6e 5f 62  69 74 28 32 32 2c 6b 65  |:.icon_bit(22,ke|
00011a90  79 57 25 2c 39 2c b9 29  0d 09 b8 0d 20 20 20 20  |yW%,9,.)....    |
00011aa0  20 20 20 20 cc 0d 09 b9  2f 20 20 20 20 20 20 20  |    ..../       |
00011ab0  20 f2 73 65 6c 65 63 74  28 6b 65 79 57 25 2c 39  | .select(keyW%,9|
00011ac0  29 3a f2 64 65 73 65 6c  65 63 74 28 6b 65 79 57  |):.deselect(keyW|
00011ad0  25 2c 38 29 0d 09 ba 3b  20 20 20 20 20 20 20 20  |%,8)...;        |
00011ae0  f2 69 63 6f 6e 5f 62 69  74 28 32 32 2c 6b 65 79  |.icon_bit(22,key|
00011af0  57 25 2c 38 2c a3 29 3a  f2 69 63 6f 6e 5f 62 69  |W%,8,.):.icon_bi|
00011b00  74 28 32 32 2c 6b 65 79  57 25 2c 39 2c a3 29 0d  |t(22,keyW%,9,.).|
00011b10  09 bb 0b 20 20 20 20 20  20 cd 0d 09 bc 34 20 20  |...      ....4  |
00011b20  20 20 20 20 f2 73 65 74  5f 68 65 69 67 68 74 28  |    .set_height(|
00011b30  6b 65 79 57 25 2c 37 30  30 29 3a f2 73 65 74 5f  |keyW%,700):.set_|
00011b40  63 61 72 65 74 28 6b 65  79 57 25 2c 32 29 0d 09  |caret(keyW%,2)..|
00011b50  bd 20 20 20 20 20 20 20  c9 20 22 4e 65 77 20 72  |.       . "New r|
00011b60  65 63 6f 72 64 20 66 6f  72 6d 61 74 22 3a 0d 09  |ecord format":..|
00011b70  be 21 20 20 20 20 20 20  f2 63 6c 6f 73 65 5f 77  |.!      .close_w|
00011b80  69 6e 64 6f 77 28 72 65  66 6f 72 6d 57 25 29 0d  |indow(reformW%).|
00011b90  09 bf 20 20 20 20 20 20  20 e7 20 a4 63 6f 6e 66  |..       . .conf|
00011ba0  69 72 6d 28 a4 6d 73 67  28 32 38 29 29 20 8c 0d  |irm(.msg(28)) ..|
00011bb0  09 c0 1e 20 20 20 20 20  20 20 20 72 65 66 6f 72  |...        refor|
00011bc0  6d 24 3d 22 52 65 66 6f  72 6d 61 74 22 0d 09 c1  |m$="Reformat"...|
00011bd0  2e 20 20 20 20 20 20 20  20 24 52 65 66 6d 54 69  |.        $RefmTi|
00011be0  74 6c 65 25 3d 22 43 68  61 6e 67 65 20 72 65 63  |tle%="Change rec|
00011bf0  6f 72 64 20 66 6f 72 6d  61 74 22 0d 09 c2 25 20  |ord format"...% |
00011c00  20 20 20 20 20 20 20 f2  73 65 74 5f 68 65 69 67  |       .set_heig|
00011c10  68 74 28 72 65 66 6f 72  6d 57 25 2c 32 32 30 29  |ht(reformW%,220)|
00011c20  0d 09 c3 0b 20 20 20 20  20 20 cd 0d 09 c4 1c 20  |....      ..... |
00011c30  20 20 20 20 20 c9 20 22  41 64 6a 75 73 74 20 66  |     . "Adjust f|
00011c40  6f 72 6d 61 74 22 3a 0d  09 c5 17 20 20 20 20 20  |ormat":....     |
00011c50  20 f2 61 64 6a 75 73 74  5f 6f 6e 28 b9 29 0d 09  | .adjust_on(.)..|
00011c60  c6 1b 20 20 20 20 20 20  f2 64 69 73 70 6c 61 79  |..      .display|
00011c70  28 6b 65 79 25 2c 2d 31  29 0d 09 c7 35 20 20 20  |(key%,-1)...5   |
00011c80  20 20 20 f2 61 6c 74 65  72 5f 66 6c 61 67 73 28  |   .alter_flags(|
00011c90  26 31 37 30 31 36 37 33  31 2c 26 30 37 30 30 36  |&17016731,&07006|
00011ca0  35 33 35 2c 26 31 37 30  30 36 35 33 42 29 0d 09  |535,&1700653B)..|
00011cb0  c8 1d 20 20 20 20 20 20  c9 20 22 4d 65 72 67 65  |..      . "Merge|
00011cc0  20 64 61 74 61 62 61 73  65 22 3a 0d 09 c9 21 20  | database":...! |
00011cd0  20 20 20 20 20 f2 63 6c  6f 73 65 5f 77 69 6e 64  |     .close_wind|
00011ce0  6f 77 28 72 65 66 6f 72  6d 57 25 29 0d 09 ca 19  |ow(reformW%)....|
00011cf0  20 20 20 20 20 20 72 65  66 6f 72 6d 24 3d 22 4d  |      reform$="M|
00011d00  65 72 67 65 22 0d 09 cb  26 20 20 20 20 20 20 24  |erge"...&      $|
00011d10  52 65 66 6d 54 69 74 6c  65 25 3d 22 4d 65 72 67  |RefmTitle%="Merg|
00011d20  65 20 64 61 74 61 62 61  73 65 22 0d 09 cc 23 20  |e database"...# |
00011d30  20 20 20 20 20 f2 73 65  74 5f 68 65 69 67 68 74  |     .set_height|
00011d40  28 72 65 66 6f 72 6d 57  25 2c 33 36 30 29 0d 09  |(reformW%,360)..|
00011d50  cd 1c 20 20 20 20 20 20  c9 20 22 42 61 6c 61 6e  |..      . "Balan|
00011d60  63 65 20 69 6e 64 65 78  22 3a 0d 09 ce 19 20 20  |ce index":....  |
00011d70  20 20 20 20 c8 8e 20 63  68 6f 69 63 65 24 28 33  |    .. choice$(3|
00011d80  29 20 ca 0d 09 cf 1a 20  20 20 20 20 20 20 20 c9  |) .....        .|
00011d90  20 22 41 75 74 6f 6d 61  74 69 63 22 3a 0d 09 d0  | "Automatic":...|
00011da0  1a 20 20 20 20 20 20 20  20 e7 20 63 68 6f 69 63  |.        . choic|
00011db0  65 34 25 3d 30 20 8c 0d  09 d1 21 20 20 20 20 20  |e4%=0 ....!     |
00011dc0  20 20 20 20 20 f2 73 65  74 5f 61 75 74 6f 62 61  |     .set_autoba|
00011dd0  6c 61 6e 63 65 28 b9 29  0d 09 d2 38 20 20 20 20  |lance(.)...8    |
00011de0  20 20 20 20 20 20 cc 20  f2 73 65 74 5f 61 75 74  |      . .set_aut|
00011df0  6f 62 61 6c 61 6e 63 65  28 ac 20 a4 74 69 63 6b  |obalance(. .tick|
00011e00  65 64 28 6d 65 6e 75 25  28 32 31 29 2c 30 29 29  |ed(menu%(21),0))|
00011e10  0d 09 d3 0d 20 20 20 20  20 20 20 20 cd 0d 09 d4  |....        ....|
00011e20  28 20 20 20 20 20 20 20  20 c9 20 22 52 69 67 68  |(        . "Righ|
00011e30  74 20 6e 6f 77 22 3a f2  62 61 6c 61 6e 63 65 28  |t now":.balance(|
00011e40  6b 65 79 25 29 0d 09 d5  0b 20 20 20 20 20 20 cb  |key%)....      .|
00011e50  0d 09 d6 1a 20 20 20 20  20 20 c9 20 22 50 72 69  |....      . "Pri|
00011e60  6e 74 20 69 6e 64 65 78  22 3a 0d 09 d7 19 20 20  |nt index":....  |
00011e70  20 20 20 20 c8 8e 20 63  68 6f 69 63 65 24 28 33  |    .. choice$(3|
00011e80  29 20 ca 0d 09 d8 19 20  20 20 20 20 20 20 20 c9  |) .....        .|
00011e90  20 22 43 6f 6d 70 6c 65  74 65 22 3a 0d 09 d9 29  | "Complete":...)|
00011ea0  20 20 20 20 20 20 20 20  f2 70 72 69 6e 74 5f 74  |        .print_t|
00011eb0  72 65 65 28 6b 65 79 25  2c 66 69 6c 65 25 2c 22  |ree(key%,file%,"|
00011ec0  41 4c 4c 22 29 0d 09 da  1c 20 20 20 20 20 20 20  |ALL")....       |
00011ed0  20 c9 20 22 54 6f 74 61  6c 73 20 6f 6e 6c 79 22  | . "Totals only"|
00011ee0  3a 0d 09 db 2c 20 20 20  20 20 20 20 20 f2 70 72  |:...,        .pr|
00011ef0  69 6e 74 5f 74 72 65 65  28 6b 65 79 25 2c 66 69  |int_tree(key%,fi|
00011f00  6c 65 25 2c 22 54 4f 54  41 4c 53 22 29 0d 09 dc  |le%,"TOTALS")...|
00011f10  0b 20 20 20 20 20 20 cb  0d 09 dd 35 20 20 20 20  |.      ....5    |
00011f20  20 20 c9 20 22 46 69 6e  64 20 64 75 70 6c 69 63  |  . "Find duplic|
00011f30  61 74 65 73 22 3a f2 64  75 70 6c 69 63 61 74 65  |ates":.duplicate|
00011f40  73 28 6b 65 79 25 2c 66  69 6c 65 25 29 0d 09 de  |s(key%,file%)...|
00011f50  43 20 20 20 20 20 20 c9  20 22 57 61 72 6e 20 6f  |C      . "Warn o|
00011f60  66 20 64 75 70 6c 69 63  61 74 65 73 22 3a 64 75  |f duplicates":du|
00011f70  70 25 3d ac 20 64 75 70  25 3a f2 74 69 63 6b 28  |p%=. dup%:.tick(|
00011f80  6d 65 6e 75 25 28 33 29  2c 38 2c 64 75 70 25 29  |menu%(3),8,dup%)|
00011f90  0d 09 df 09 20 20 20 20  cb 0d 09 e0 23 20 20 20  |....    ....#   |
00011fa0  20 c9 20 22 43 6c 6f 73  65 20 64 61 74 61 62 61  | . "Close databa|
00011fb0  73 65 22 3a f2 65 78 69  74 28 30 29 0d 09 e1 25  |se":.exit(0)...%|
00011fc0  20 20 20 20 c9 20 22 41  62 61 6e 64 6f 6e 20 64  |    . "Abandon d|
00011fd0  61 74 61 62 61 73 65 22  3a f2 65 78 69 74 28 31  |atabase":.exit(1|
00011fe0  29 0d 09 e2 18 20 20 20  20 c9 20 22 51 75 69 74  |)....    . "Quit|
00011ff0  22 3a 71 75 69 74 25 3d  b9 0d 09 e3 07 20 20 cb  |":quit%=.....  .|
00012000  0d 09 e4 11 20 20 c9 20  6d 65 6e 75 25 28 31 29  |....  . menu%(1)|
00012010  3a 0d 09 e5 15 20 20 c8  8e 20 63 68 6f 69 63 65  |:....  .. choice|
00012020  24 28 31 29 20 ca 0d 09  e6 17 20 20 20 20 c9 20  |$(1) .....    . |
00012030  22 43 53 56 20 6f 70 74  69 6f 6e 73 22 0d 09 e7  |"CSV options"...|
00012040  1d 20 20 20 20 24 43 53  56 54 69 74 6c 65 25 3d  |.    $CSVTitle%=|
00012050  63 68 6f 69 63 65 24 28  31 29 0d 09 e8 1f 20 20  |choice$(1)....  |
00012060  20 20 f2 69 63 6f 6e 5f  62 69 74 28 32 32 2c 63  |  .icon_bit(22,c|
00012070  73 76 57 25 2c 30 2c b9  29 0d 09 e9 36 20 20 20  |svW%,0,.)...6   |
00012080  20 21 62 6c 6f 63 6b 25  3d 63 73 76 57 25 3a c8  | !block%=csvW%:.|
00012090  99 20 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |. "Wimp_GetWindo|
000120a0  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
000120b0  09 ea 2d 20 20 20 20 62  6c 6f 63 6b 25 21 34 3d  |..-    block%!4=|
000120c0  6f 6c 64 78 25 3a 62 6c  6f 63 6b 25 21 31 32 3d  |oldx%:block%!12=|
000120d0  62 6c 6f 63 6b 25 21 34  2b 33 39 30 0d 09 eb 38  |block%!4+390...8|
000120e0  20 20 20 20 62 6c 6f 63  6b 25 21 38 3d 32 30 30  |    block%!8=200|
000120f0  3a 62 6c 6f 63 6b 25 21  31 36 3d 62 6c 6f 63 6b  |:block%!16=block|
00012100  25 21 38 2b 34 32 30 3a  62 6c 6f 63 6b 25 21 32  |%!8+420:block%!2|
00012110  38 3d 2d 31 0d 09 ec 24  20 20 20 20 c8 99 20 22  |8=-1...$    .. "|
00012120  57 69 6d 70 5f 4f 70 65  6e 57 69 6e 64 6f 77 22  |Wimp_OpenWindow"|
00012130  2c 2c 62 6c 6f 63 6b 25  0d 09 ed 1a 20 20 20 20  |,,block%....    |
00012140  c9 20 22 4d 69 73 63 65  6c 6c 61 6e 65 6f 75 73  |. "Miscellaneous|
00012150  22 3a 0d 09 ee 17 20 20  20 20 c8 8e 20 63 68 6f  |":....    .. cho|
00012160  69 63 65 24 28 32 29 20  ca 0d 09 ef 30 20 20 20  |ice$(2) ....0   |
00012170  20 20 20 c9 20 22 53 65  74 20 70 61 73 73 77 6f  |   . "Set passwo|
00012180  72 64 73 22 3a f2 6f 70  65 6e 5f 77 69 6e 64 6f  |rds":.open_windo|
00012190  77 28 70 61 73 73 57 25  29 0d 09 f0 39 20 20 20  |w(passW%)...9   |
000121a0  20 20 20 c9 20 22 45 64  69 74 20 74 65 6d 70 6c  |   . "Edit templ|
000121b0  61 74 65 22 3a 74 65 6d  70 6c 61 74 65 25 3d 31  |ate":template%=1|
000121c0  3a f2 64 69 73 70 6c 61  79 28 6b 65 79 25 2c 2d  |:.display(key%,-|
000121d0  31 29 0d 09 f1 30 20 20  20 20 20 20 c9 20 22 53  |1)...0      . "S|
000121e0  61 76 65 20 69 6e 64 69  63 65 73 22 3a f2 73 65  |ave indices":.se|
000121f0  74 5f 61 75 74 6f 28 32  2d 63 68 6f 69 63 65 33  |t_auto(2-choice3|
00012200  25 29 0d 09 f2 09 20 20  20 20 cb 0d 09 f3 18 20  |%)....    ..... |
00012210  20 20 20 c9 20 22 43 75  72 72 65 6e 74 20 6b 65  |   . "Current ke|
00012220  79 22 3a 0d 09 f4 31 20  20 20 20 24 4b 65 79 54  |y":...1    $KeyT|
00012230  69 74 6c 65 25 3d 63 68  6f 69 63 65 24 28 31 29  |itle%=choice$(1)|
00012240  3a 6b 65 79 66 75 6e 63  24 3d 63 68 6f 69 63 65  |:keyfunc$=choice|
00012250  24 28 31 29 0d 09 f5 1a  20 20 20 20 f2 73 65 74  |$(1)....    .set|
00012260  5f 6b 65 79 64 61 74 61  28 6b 65 79 25 29 0d 09  |_keydata(key%)..|
00012270  f6 32 20 20 20 20 f2 73  68 61 64 65 5f 6b 65 79  |.2    .shade_key|
00012280  5f 69 63 6f 6e 73 28 a3  29 3a f2 73 65 74 5f 68  |_icons(.):.set_h|
00012290  65 69 67 68 74 28 6b 65  79 57 25 2c 35 39 30 29  |eight(keyW%,590)|
000122a0  0d 09 f7 12 20 20 20 20  c9 20 22 50 72 69 6e 74  |....    . "Print|
000122b0  22 3a 0d 09 f8 17 20 20  20 20 c8 8e 20 63 68 6f  |":....    .. cho|
000122c0  69 63 65 24 28 32 29 20  ca 0d 09 f9 1a 20 20 20  |ice$(2) .....   |
000122d0  20 20 20 c9 20 22 4d 61  74 63 68 22 3a f2 6d 61  |   . "Match":.ma|
000122e0  74 63 68 0d 09 fa 27 20  20 20 20 20 20 c9 20 22  |tch...'      . "|
000122f0  53 68 6f 77 20 72 65 73  6f 75 72 63 65 73 22 3a  |Show resources":|
00012300  2a 52 65 73 6f 75 72 63  65 73 0d 09 fb 42 20 20  |*Resources...B  |
00012310  20 20 20 20 c9 20 22 4f  70 74 69 6f 6e 73 22 3a  |    . "Options":|
00012320  f2 6f 70 65 6e 5f 77 69  6e 64 6f 77 28 70 72 69  |.open_window(pri|
00012330  6e 74 57 25 29 3a f2 73  65 74 5f 63 61 72 65 74  |ntW%):.set_caret|
00012340  28 70 72 69 6e 74 57 25  2c 31 36 29 0d 09 fc 1b  |(printW%,16)....|
00012350  20 20 20 20 20 20 c9 20  22 53 61 76 65 20 6f 70  |      . "Save op|
00012360  74 69 6f 6e 73 22 3a 0d  09 fd 35 20 20 20 20 20  |tions":...5     |
00012370  20 24 53 61 76 65 4e 61  6d 65 25 3d 24 64 61 74  | $SaveName%=$dat|
00012380  61 62 61 73 65 25 2b 22  2e 50 72 69 6e 74 52 65  |abase%+".PrintRe|
00012390  73 2e 50 72 69 6e 74 4f  70 74 73 22 0d 09 fe 36  |s.PrintOpts"...6|
000123a0  20 20 20 20 20 20 73 61  76 65 66 75 6e 63 24 3d  |      savefunc$=|
000123b0  63 68 6f 69 63 65 24 28  32 29 3a f2 73 61 76 65  |choice$(2):.save|
000123c0  5f 63 6c 69 63 6b 28 73  61 76 65 57 25 2c 32 2c  |_click(saveW%,2,|
000123d0  34 29 0d 09 ff 19 20 20  20 20 20 20 c9 20 22 53  |4)....      . "S|
000123e0  61 76 65 20 71 75 65 72  79 22 3a 0d 0a 00 31 20  |ave query":...1 |
000123f0  20 20 20 20 20 24 53 61  76 65 4e 61 6d 65 25 3d  |     $SaveName%=|
00012400  24 64 61 74 61 62 61 73  65 25 2b 22 2e 50 72 69  |$database%+".Pri|
00012410  6e 74 52 65 73 2e 51 75  65 72 79 22 0d 0a 01 36  |ntRes.Query"...6|
00012420  20 20 20 20 20 20 73 61  76 65 66 75 6e 63 24 3d  |      savefunc$=|
00012430  63 68 6f 69 63 65 24 28  32 29 3a f2 73 61 76 65  |choice$(2):.save|
00012440  5f 63 6c 69 63 6b 28 73  61 76 65 57 25 2c 32 2c  |_click(saveW%,2,|
00012450  34 29 0d 0a 02 1d 20 20  20 20 20 20 c9 20 22 53  |4)....      . "S|
00012460  61 76 65 20 73 65 6c 65  63 74 69 6f 6e 22 3a 0d  |ave selection":.|
00012470  0a 03 35 20 20 20 20 20  20 24 53 61 76 65 4e 61  |..5      $SaveNa|
00012480  6d 65 25 3d 24 64 61 74  61 62 61 73 65 25 2b 22  |me%=$database%+"|
00012490  2e 50 72 69 6e 74 52 65  73 2e 53 65 6c 65 63 74  |.PrintRes.Select|
000124a0  69 6f 6e 22 0d 0a 04 36  20 20 20 20 20 20 73 61  |ion"...6      sa|
000124b0  76 65 66 75 6e 63 24 3d  63 68 6f 69 63 65 24 28  |vefunc$=choice$(|
000124c0  32 29 3a f2 73 61 76 65  5f 63 6c 69 63 6b 28 73  |2):.save_click(s|
000124d0  61 76 65 57 25 2c 32 2c  34 29 0d 0a 05 26 20 20  |aveW%,2,4)...&  |
000124e0  20 20 20 20 c9 20 22 53  68 6f 77 20 6a 6f 62 73  |    . "Show jobs|
000124f0  20 64 6f 6e 65 22 3a 2a  4a 6f 62 73 44 6f 6e 65  | done":*JobsDone|
00012500  0d 0a 06 2e 20 20 20 20  20 20 c9 20 22 43 6c 65  |....      . "Cle|
00012510  61 72 20 73 65 6c 65 63  74 69 6f 6e 22 3a f2 63  |ar selection":.c|
00012520  6c 65 61 72 5f 73 65 6c  65 63 74 69 6f 6e 0d 0a  |lear_selection..|
00012530  07 24 20 20 20 20 20 20  c9 20 22 53 65 6c 65 63  |.$      . "Selec|
00012540  74 20 61 6c 6c 22 3a f2  73 65 6c 65 63 74 5f 61  |t all":.select_a|
00012550  6c 6c 0d 0a 08 12 20 20  20 20 20 20 7f 3a f2 6d  |ll....      .:.m|
00012560  61 74 63 68 0d 0a 09 09  20 20 20 20 cb 0d 0a 0a  |atch....    ....|
00012570  17 20 20 20 20 c9 20 22  56 61 6c 69 64 61 74 69  |.    . "Validati|
00012580  6f 6e 22 3a 0d 0a 0b 17  20 20 20 20 c8 8e 20 63  |on":....    .. c|
00012590  68 6f 69 63 65 24 28 32  29 20 ca 0d 0a 0c 46 20  |hoice$(2) ....F |
000125a0  20 20 20 20 20 c9 20 22  43 72 65 61 74 65 20 74  |     . "Create t|
000125b0  61 62 6c 65 22 3a f2 6f  70 65 6e 5f 77 69 6e 64  |able":.open_wind|
000125c0  6f 77 28 74 61 62 6c 65  57 25 29 3a f2 73 65 74  |ow(tableW%):.set|
000125d0  5f 63 61 72 65 74 28 74  61 62 6c 65 57 25 2c 30  |_caret(tableW%,0|
000125e0  29 0d 0a 0d 1c 20 20 20  20 20 20 c9 20 22 44 69  |)....      . "Di|
000125f0  73 70 6c 61 79 20 74 61  62 6c 65 22 3a 0d 0a 0e  |splay table":...|
00012600  19 20 20 20 20 20 20 e7  20 63 68 6f 69 63 65 33  |.      . choice3|
00012610  25 3e 3d 30 20 8c 0d 0a  0f 21 20 20 20 20 20 20  |%>=0 ....!      |
00012620  20 20 54 61 62 6c 65 6e  75 6d 62 65 72 25 3d 63  |  Tablenumber%=c|
00012630  68 6f 69 63 65 33 25 0d  0a 10 25 20 20 20 20 20  |hoice3%...%     |
00012640  20 20 20 f2 73 68 6f 77  5f 74 61 62 6c 65 28 54  |   .show_table(T|
00012650  61 62 6c 65 6e 75 6d 62  65 72 25 29 0d 0a 11 0b  |ablenumber%)....|
00012660  20 20 20 20 20 20 cd 0d  0a 12 26 20 20 20 20 20  |      ....&     |
00012670  20 c9 20 22 53 68 6f 77  20 74 61 62 6c 65 20 66  | . "Show table f|
00012680  69 6c 65 73 22 3a 2a 54  61 62 6c 65 73 0d 0a 13  |iles":*Tables...|
00012690  28 20 20 20 20 20 20 c9  20 22 56 61 6c 69 64 61  |(      . "Valida|
000126a0  74 65 20 69 6e 70 75 74  22 3a f2 76 61 6c 5f 6f  |te input":.val_o|
000126b0  6e 5f 6f 66 66 0d 0a 14  51 20 20 20 20 20 20 c9  |n_off...Q      .|
000126c0  20 22 53 68 6f 77 20 72  65 6c 61 74 69 6f 6e 73  | "Show relations|
000126d0  22 3a 72 65 6c 61 74 69  6f 6e 73 25 3d ac 20 72  |":relations%=. r|
000126e0  65 6c 61 74 69 6f 6e 73  25 3a f2 74 69 63 6b 28  |elations%:.tick(|
000126f0  6d 65 6e 75 25 28 32 29  2c 34 2c 72 65 6c 61 74  |menu%(2),4,relat|
00012700  69 6f 6e 73 25 29 0d 0a  15 09 20 20 20 20 cb 0d  |ions%)....    ..|
00012710  0a 16 46 20 20 20 20 c9  20 22 53 68 6f 77 20 6b  |..F    . "Show k|
00012720  65 79 70 61 64 22 3a e7  20 a4 73 65 6c 65 63 74  |eypad":. .select|
00012730  65 64 28 70 61 73 73 57  25 2c 39 29 20 8c 20 f2  |ed(passW%,9) . .|
00012740  6f 70 65 6e 5f 77 69 6e  64 6f 77 28 6b 65 79 70  |open_window(keyp|
00012750  61 64 57 25 29 0d 0a 17  3d 20 20 20 20 c9 20 22  |adW%)...=    . "|
00012760  53 61 76 65 20 63 68 6f  69 63 65 73 22 3a f2 73  |Save choices":.s|
00012770  61 76 65 5f 63 68 6f 69  63 65 73 28 24 64 61 74  |ave_choices($dat|
00012780  61 62 61 73 65 25 2b 22  2e 43 68 6f 69 63 65 73  |abase%+".Choices|
00012790  22 29 0d 0a 18 25 20 20  20 20 c9 20 22 55 6e 64  |")...%    . "Und|
000127a0  6f 20 63 68 61 6e 67 65  73 22 3a f2 72 65 73 74  |o changes":.rest|
000127b0  6f 72 65 5f 72 65 63 0d  0a 19 38 20 20 20 20 c9  |ore_rec...8    .|
000127c0  20 22 48 65 6c 70 22 3a  c8 99 20 22 57 69 6d 70  | "Help":.. "Wimp|
000127d0  5f 53 74 61 72 74 54 61  73 6b 22 2c 22 3c 50 62  |_StartTask","<Pb|
000127e0  61 73 65 24 44 69 72 3e  2e 21 48 65 6c 70 22 0d  |ase$Dir>.!Help".|
000127f0  0a 1a 0a 20 20 20 20 7f  3a 0d 0a 1b 17 20 20 20  |...    .:....   |
00012800  20 c8 8e 20 63 68 6f 69  63 65 24 28 32 29 20 ca  | .. choice$(2) .|
00012810  0d 0a 1c 1a 20 20 20 20  20 20 c9 20 22 49 6e 64  |....      . "Ind|
00012820  65 78 20 66 69 65 6c 64  22 3a 0d 0a 1d 33 20 20  |ex field":...3  |
00012830  20 20 20 20 24 4b 65 79  54 69 74 6c 65 25 3d 63  |    $KeyTitle%=c|
00012840  68 6f 69 63 65 24 28 32  29 3a 6b 65 79 66 75 6e  |hoice$(2):keyfun|
00012850  63 24 3d 63 68 6f 69 63  65 24 28 32 29 0d 0a 1e  |c$=choice$(2)...|
00012860  31 20 20 20 20 20 20 f2  64 65 73 65 6c 65 63 74  |1      .deselect|
00012870  28 6b 65 79 57 25 2c 32  30 29 3a f2 73 68 61 64  |(keyW%,20):.shad|
00012880  65 5f 6b 65 79 5f 69 63  6f 6e 73 28 b9 29 0d 0a  |e_key_icons(.)..|
00012890  1f 34 20 20 20 20 20 20  f2 73 65 74 5f 68 65 69  |.4      .set_hei|
000128a0  67 68 74 28 6b 65 79 57  25 2c 35 39 30 29 3a f2  |ght(keyW%,590):.|
000128b0  73 65 74 5f 63 61 72 65  74 28 6b 65 79 57 25 2c  |set_caret(keyW%,|
000128c0  32 29 0d 0a 20 3d 20 20  20 20 20 20 c9 20 22 41  |2).. =      . "A|
000128d0  6e 61 6c 79 73 65 20 69  6e 64 65 78 22 3a f2 61  |nalyse index":.a|
000128e0  6e 61 6c 79 73 65 28 a4  69 73 5f 61 5f 6b 65 79  |nalyse(.is_a_key|
000128f0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 29 0d  |(Fieldnumber%)).|
00012900  0a 21 29 20 20 20 20 20  20 c9 20 22 41 6e 61 6c  |.!)      . "Anal|
00012910  79 73 65 20 6d 6f 6e 74  68 73 22 3a f2 61 6e 61  |yse months":.ana|
00012920  6c 79 73 65 28 2d 31 29  0d 0a 22 30 20 20 20 20  |lyse(-1).."0    |
00012930  20 20 c9 20 22 4c 69 6e  6b 20 74 6f 20 74 61 62  |  . "Link to tab|
00012940  6c 65 22 3a f2 6f 70 65  6e 5f 77 69 6e 64 6f 77  |le":.open_window|
00012950  28 6c 69 6e 6b 57 25 29  0d 0a 23 1c 20 20 20 20  |(linkW%)..#.    |
00012960  20 20 c9 20 22 53 74 61  72 74 20 65 64 69 74 69  |  . "Start editi|
00012970  6e 67 22 3a 0d 0a 24 29  20 20 20 20 20 20 73 74  |ng":..$)      st|
00012980  61 72 74 68 65 72 65 25  3d 66 69 65 6c 64 25 28  |arthere%=field%(|
00012990  46 69 65 6c 64 6e 75 6d  62 65 72 25 29 0d 0a 25  |Fieldnumber%)..%|
000129a0  33 20 20 20 20 20 20 e7  20 41 63 63 65 73 73 25  |3      . Access%|
000129b0  20 8c 20 f2 73 65 74 5f  63 61 72 65 74 28 6d 61  | . .set_caret(ma|
000129c0  69 6e 57 25 2c 73 74 61  72 74 68 65 72 65 25 29  |inW%,starthere%)|
000129d0  0d 0a 26 5b 20 20 20 20  20 20 c9 20 22 43 6c 65  |..&[      . "Cle|
000129e0  61 72 20 63 6f 6e 74 65  6e 74 73 22 3a f2 64 65  |ar contents":.de|
000129f0  6c 65 74 65 5f 62 6c 6f  62 28 46 69 65 6c 64 6e  |lete_blob(Fieldn|
00012a00  75 6d 62 65 72 25 2c 6f  62 6a 65 63 74 24 2c 6d  |umber%,object$,m|
00012a10  61 69 6e 57 25 2c 66 69  65 6c 64 25 28 46 69 65  |ainW%,field%(Fie|
00012a20  6c 64 6e 75 6d 62 65 72  25 29 29 0d 0a 27 28 20  |ldnumber%))..'( |
00012a30  20 20 20 20 20 e7 20 63  68 61 72 74 79 70 65 25  |     . chartype%|
00012a40  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 3d 34  |(Fieldnumber%)=4|
00012a50  30 20 8c 0d 0a 28 51 20  20 20 20 20 20 20 20 f2  |0 ...(Q        .|
00012a60  73 68 6f 77 5f 70 69 63  74 75 72 65 28 46 69 65  |show_picture(Fie|
00012a70  6c 64 6e 75 6d 62 65 72  25 29 3a f2 72 65 64 72  |ldnumber%):.redr|
00012a80  61 77 5f 69 63 6f 6e 28  6d 61 69 6e 57 25 2c 66  |aw_icon(mainW%,f|
00012a90  69 65 6c 64 25 28 46 69  65 6c 64 6e 75 6d 62 65  |ield%(Fieldnumbe|
00012aa0  72 25 29 29 0d 0a 29 0b  20 20 20 20 20 20 cd 0d  |r%))..).      ..|
00012ab0  0a 2a 30 20 20 20 20 20  20 c9 20 22 57 61 72 6e  |.*0      . "Warn|
00012ac0  20 6f 66 20 64 65 6c 65  74 65 22 3a 64 65 6c 77  | of delete":delw|
00012ad0  61 72 6e 25 3d ac 20 64  65 6c 77 61 72 6e 25 0d  |arn%=. delwarn%.|
00012ae0  0a 2b 25 20 20 20 20 20  20 f2 74 69 63 6b 28 6d  |.+%      .tick(m|
00012af0  65 6e 75 25 28 31 30 29  2c 37 2c 64 65 6c 77 61  |enu%(10),7,delwa|
00012b00  72 6e 25 29 0d 0a 2c 37  20 20 20 20 20 20 c9 20  |rn%)..,7      . |
00012b10  22 55 6e 64 6f 20 63 68  61 6e 67 65 73 22 3a f2  |"Undo changes":.|
00012b20  72 65 73 74 6f 72 65 28  46 69 65 6c 64 6e 75 6d  |restore(Fieldnum|
00012b30  62 65 72 25 2c 22 22 2c  2d 31 29 0d 0a 2d 09 20  |ber%,"",-1)..-. |
00012b40  20 20 20 cb 0d 0a 2e 07  20 20 cb 0d 0a 2f 11 20  |   .....  .../. |
00012b50  20 c9 20 6d 65 6e 75 25  28 39 29 3a 0d 0a 30 15  | . menu%(9):..0.|
00012b60  20 20 c8 8e 20 63 68 6f  69 63 65 24 28 31 29 20  |  .. choice$(1) |
00012b70  ca 0d 0a 31 46 20 20 20  20 c9 20 22 44 65 73 69  |...1F    . "Desi|
00012b80  67 6e 20 66 69 65 6c 64  22 3a f2 6f 70 65 6e 5f  |gn field":.open_|
00012b90  77 69 6e 64 6f 77 28 63  72 65 61 74 65 57 25 29  |window(createW%)|
00012ba0  3a f2 73 65 74 5f 63 61  72 65 74 28 63 72 65 61  |:.set_caret(crea|
00012bb0  74 65 57 25 2c 34 29 0d  0a 32 1b 20 20 20 20 c9  |teW%,4)..2.    .|
00012bc0  20 22 53 61 76 65 20 66  6f 72 6d 20 66 69 6c 65  | "Save form file|
00012bd0  22 3a 0d 0a 33 25 20 20  20 20 24 53 61 76 65 4e  |":..3%    $SaveN|
00012be0  61 6d 65 25 3d 24 64 61  74 61 62 61 73 65 25 2b  |ame%=$database%+|
00012bf0  22 2e 46 6f 72 6d 22 0d  0a 34 34 20 20 20 20 73  |".Form"..44    s|
00012c00  61 76 65 66 75 6e 63 24  3d 63 68 6f 69 63 65 24  |avefunc$=choice$|
00012c10  28 31 29 3a f2 73 61 76  65 5f 63 6c 69 63 6b 28  |(1):.save_click(|
00012c20  73 61 76 65 57 25 2c 32  2c 34 29 0d 0a 35 1d 20  |saveW%,2,4)..5. |
00012c30  20 20 20 c9 20 22 44 65  66 61 75 6c 74 20 64 61  |   . "Default da|
00012c40  74 61 62 61 73 65 22 3a  0d 0a 36 26 20 20 20 20  |tabase":..6&    |
00012c50  f2 73 61 76 65 5f 66 6f  72 6d 28 24 64 61 74 61  |.save_form($data|
00012c60  62 61 73 65 25 2b 22 2e  46 6f 72 6d 22 29 0d 0a  |base%+".Form")..|
00012c70  37 1e 20 20 20 20 f2 67  65 74 5f 69 74 5f 69 6e  |7.    .get_it_in|
00012c80  28 24 64 61 74 61 62 61  73 65 25 29 0d 0a 38 1a  |($database%)..8.|
00012c90  20 20 20 20 e7 20 a4 66  69 72 73 74 5f 66 69 65  |    . .first_fie|
00012ca0  6c 64 3e 30 20 8c 0d 0a  39 16 20 20 20 20 20 20  |ld>0 ...9.      |
00012cb0  f2 64 65 66 61 75 6c 74  5f 6b 65 79 0d 0a 3a 25  |.default_key..:%|
00012cc0  20 20 20 20 20 20 f2 64  65 66 61 75 6c 74 73 28  |      .defaults(|
00012cd0  24 64 61 74 61 62 61 73  65 25 2c 31 30 30 2c 30  |$database%,100,0|
00012ce0  29 0d 0a 3b 1d 20 20 20  20 20 20 cc 20 f2 73 6f  |)..;.      . .so|
00012cf0  66 74 65 72 72 6f 72 28  22 22 2c 33 35 29 0d 0a  |fterror("",35)..|
00012d00  3c 09 20 20 20 20 cd 0d  0a 3d 18 20 20 20 20 c9  |<.    ...=.    .|
00012d10  20 22 50 72 69 6d 61 72  79 20 6b 65 79 22 3a 0d  | "Primary key":.|
00012d20  0a 3e 1d 20 20 20 20 24  4b 65 79 54 69 74 6c 65  |.>.    $KeyTitle|
00012d30  25 3d 63 68 6f 69 63 65  24 28 31 29 0d 0a 3f 1b  |%=choice$(1)..?.|
00012d40  20 20 20 20 6b 65 79 66  75 6e 63 24 3d 63 68 6f  |    keyfunc$=cho|
00012d50  69 63 65 24 28 31 29 0d  0a 40 22 20 20 20 20 63  |ice$(1)..@"    c|
00012d60  61 73 65 25 28 30 29 3d  a3 3a f2 73 65 74 5f 6b  |ase%(0)=.:.set_k|
00012d70  65 79 64 61 74 61 28 30  29 0d 0a 41 30 20 20 20  |eydata(0)..A0   |
00012d80  20 f2 64 65 73 65 6c 65  63 74 28 6b 65 79 57 25  | .deselect(keyW%|
00012d90  2c 32 30 29 3a f2 73 68  61 64 65 5f 6b 65 79 5f  |,20):.shade_key_|
00012da0  69 63 6f 6e 73 28 b9 29  3a 0d 0a 42 32 20 20 20  |icons(.):..B2   |
00012db0  20 f2 73 65 74 5f 68 65  69 67 68 74 28 6b 65 79  | .set_height(key|
00012dc0  57 25 2c 35 39 30 29 3a  f2 73 65 74 5f 63 61 72  |W%,590):.set_car|
00012dd0  65 74 28 6b 65 79 57 25  2c 32 29 0d 0a 43 18 20  |et(keyW%,2)..C. |
00012de0  20 20 20 c9 20 22 51 75  69 74 20 64 65 73 69 67  |   . "Quit desig|
00012df0  6e 22 3a 0d 0a 44 15 20  20 20 20 f2 61 64 6a 75  |n":..D.    .adju|
00012e00  73 74 5f 6f 6e 28 a3 29  0d 0a 45 26 20 20 20 20  |st_on(.)..E&    |
00012e10  f2 73 61 76 65 5f 66 6f  72 6d 28 24 64 61 74 61  |.save_form($data|
00012e20  62 61 73 65 25 2b 22 2e  46 6f 72 6d 22 29 0d 0a  |base%+".Form")..|
00012e30  46 1e 20 20 20 20 f2 67  65 74 5f 69 74 5f 69 6e  |F.    .get_it_in|
00012e40  28 24 64 61 74 61 62 61  73 65 25 29 0d 0a 47 07  |($database%)..G.|
00012e50  20 20 cb 0d 0a 48 12 20  20 c9 20 6d 65 6e 75 25  |  ...H.  . menu%|
00012e60  28 31 37 29 3a 0d 0a 49  22 20 20 54 25 3d a4 74  |(17):..I"  T%=.t|
00012e70  61 62 6c 65 5f 6e 75 6d  62 65 72 28 24 6d 65 6e  |able_number($men|
00012e80  75 25 28 31 37 29 29 0d  0a 4a 15 20 20 c8 8e 20  |u%(17))..J.  .. |
00012e90  63 68 6f 69 63 65 24 28  31 29 20 ca 0d 0a 4b 11  |choice$(1) ...K.|
00012ea0  20 20 20 20 c9 20 22 53  61 76 65 22 3a 0d 0a 4c  |    . "Save":..L|
00012eb0  36 20 20 20 20 24 53 61  76 65 4e 61 6d 65 25 3d  |6    $SaveName%=|
00012ec0  24 64 61 74 61 62 61 73  65 25 2b 22 2e 56 61 6c  |$database%+".Val|
00012ed0  54 61 62 6c 65 73 2e 22  2b 74 61 62 6c 65 24 28  |Tables."+table$(|
00012ee0  54 25 29 0d 0a 4d 36 20  20 20 20 73 61 76 65 66  |T%)..M6    savef|
00012ef0  75 6e 63 24 3d 22 53 61  76 65 20 74 61 62 6c 65  |unc$="Save table|
00012f00  22 3a f2 73 61 76 65 5f  63 6c 69 63 6b 28 73 61  |":.save_click(sa|
00012f10  76 65 57 25 2c 32 2c 34  29 0d 0a 4e 22 20 20 20  |veW%,2,4)..N"   |
00012f20  20 c9 20 22 43 6c 65 61  72 22 3a f2 63 6c 65 61  | . "Clear":.clea|
00012f30  72 5f 74 61 62 6c 65 28  54 25 29 0d 0a 4f 22 20  |r_table(T%)..O" |
00012f40  20 20 20 c9 20 22 50 72  69 6e 74 22 3a f2 70 72  |   . "Print":.pr|
00012f50  69 6e 74 5f 74 61 62 6c  65 28 54 25 29 0d 0a 50  |int_table(T%)..P|
00012f60  20 20 20 20 20 c9 20 22  53 6f 72 74 22 3a f2 73  |     . "Sort":.s|
00012f70  6f 72 74 5f 74 61 62 6c  65 28 54 25 29 0d 0a 51  |ort_table(T%)..Q|
00012f80  2f 20 20 20 20 c9 20 22  55 6e 64 6f 20 61 6c 6c  |/    . "Undo all|
00012f90  22 3a f2 72 65 73 74 6f  72 65 5f 74 61 62 6c 65  |":.restore_table|
00012fa0  28 54 25 2c 74 61 62 6c  65 6e 25 29 0d 0a 52 29  |(T%,tablen%)..R)|
00012fb0  20 20 20 20 c9 20 22 55  6e 64 6f 20 63 68 61 6e  |    . "Undo chan|
00012fc0  67 65 22 3a f2 72 65 73  74 6f 72 65 5f 74 61 62  |ge":.restore_tab|
00012fd0  66 69 65 6c 64 0d 0a 53  07 20 20 cb 0d 0a 54 12  |field..S.  ...T.|
00012fe0  20 20 c9 20 6d 65 6e 75  25 28 31 38 29 3a 0d 0a  |  . menu%(18):..|
00012ff0  55 15 20 20 c8 8e 20 63  68 6f 69 63 65 24 28 31  |U.  .. choice$(1|
00013000  29 20 ca 0d 0a 56 19 20  20 20 20 c9 20 22 53 61  |) ...V.    . "Sa|
00013010  76 65 20 61 73 20 74 65  78 74 22 3a 0d 0a 57 2f  |ve as text":..W/|
00013020  20 20 20 20 24 53 61 76  65 4e 61 6d 65 25 3d 24  |    $SaveName%=$|
00013030  64 61 74 61 62 61 73 65  25 2b 22 2e 50 72 69 6e  |database%+".Prin|
00013040  74 4a 6f 62 73 2e 4c 69  73 74 22 0d 0a 58 34 20  |tJobs.List"..X4 |
00013050  20 20 20 73 61 76 65 66  75 6e 63 24 3d 63 68 6f  |   savefunc$=cho|
00013060  69 63 65 24 28 31 29 3a  f2 73 61 76 65 5f 63 6c  |ice$(1):.save_cl|
00013070  69 63 6b 28 73 61 76 65  57 25 2c 32 2c 34 29 0d  |ick(saveW%,2,4).|
00013080  0a 59 1b 20 20 20 20 c9  20 22 53 6f 72 74 22 3a  |.Y.    . "Sort":|
00013090  f2 73 6f 72 74 5f 6c 69  73 74 0d 0a 5a 1c 20 20  |.sort_list..Z.  |
000130a0  20 20 c9 20 22 53 63 72  61 70 22 3a f2 6c 6f 73  |  . "Scrap":.los|
000130b0  65 5f 6c 69 73 74 0d 0a  5b 07 20 20 cb 0d 0a 5c  |e_list..[.  ...\|
000130c0  12 20 20 c9 20 6d 65 6e  75 25 28 31 35 29 3a 0d  |.  . menu%(15):.|
000130d0  0a 5d 15 20 20 c8 8e 20  63 68 6f 69 63 65 24 28  |.].  .. choice$(|
000130e0  31 29 20 ca 0d 0a 5e 1a  20 20 20 20 c9 20 22 43  |1) ...^.    . "C|
000130f0  6f 6d 6d 61 22 3a 73 65  70 24 3d 22 2c 22 0d 0a  |omma":sep$=","..|
00013100  5f 19 20 20 20 20 c9 20  22 54 41 42 22 3a 73 65  |_.    . "TAB":se|
00013110  70 24 3d bd 28 39 29 0d  0a 60 19 20 20 20 20 c9  |p$=.(9)..`.    .|
00013120  20 22 43 52 22 3a 73 65  70 24 3d bd 28 31 33 29  | "CR":sep$=.(13)|
00013130  0d 0a 61 19 20 20 20 20  c9 20 22 4c 46 22 3a 73  |..a.    . "LF":s|
00013140  65 70 24 3d bd 28 31 30  29 0d 0a 62 16 20 20 20  |ep$=.(10)..b.   |
00013150  20 7f 20 73 65 70 24 3d  24 44 65 6c 69 6d 25 0d  | . sep$=$Delim%.|
00013160  0a 63 07 20 20 cb 0d 0a  64 29 20 20 f2 74 69 63  |.c.  ...d)  .tic|
00013170  6b 5f 6f 6e 65 28 6d 65  6e 75 68 61 6e 64 6c 65  |k_one(menuhandle|
00013180  25 2c 30 2c 33 2c 63 68  6f 69 63 65 31 25 29 0d  |%,0,3,choice1%).|
00013190  0a 65 21 20 20 24 a4 74  65 78 74 28 63 73 76 57  |.e!  $.text(csvW|
000131a0  25 2c 31 34 29 3d 63 68  6f 69 63 65 24 28 31 29  |%,14)=choice$(1)|
000131b0  0d 0a 66 1c 20 20 f2 72  65 64 72 61 77 5f 69 63  |..f.  .redraw_ic|
000131c0  6f 6e 28 63 73 76 57 25  2c 31 34 29 0d 0a 67 12  |on(csvW%,14)..g.|
000131d0  20 20 c9 20 6d 65 6e 75  25 28 32 30 29 3a 0d 0a  |  . menu%(20):..|
000131e0  68 15 20 20 c8 8e 20 63  68 6f 69 63 65 24 28 31  |h.  .. choice$(1|
000131f0  29 20 ca 0d 0a 69 1a 20  20 20 20 c9 20 22 43 52  |) ...i.    . "CR|
00013200  22 3a 74 65 72 6d 24 3d  bd 28 31 33 29 0d 0a 6a  |":term$=.(13)..j|
00013210  1a 20 20 20 20 c9 20 22  4c 46 22 3a 74 65 72 6d  |.    . "LF":term|
00013220  24 3d bd 28 31 30 29 0d  0a 6b 23 20 20 20 20 c9  |$=.(10)..k#    .|
00013230  20 22 43 52 20 4c 46 22  3a 74 65 72 6d 24 3d bd  | "CR LF":term$=.|
00013240  28 31 33 29 2b bd 28 31  30 29 0d 0a 6c 23 20 20  |(13)+.(10)..l#  |
00013250  20 20 c9 20 22 4c 46 20  43 52 22 3a 74 65 72 6d  |  . "LF CR":term|
00013260  24 3d bd 28 31 30 29 2b  bd 28 31 33 29 0d 0a 6d  |$=.(10)+.(13)..m|
00013270  23 20 20 20 20 c9 20 22  43 52 20 43 52 22 3a 74  |#    . "CR CR":t|
00013280  65 72 6d 24 3d bd 28 31  33 29 2b bd 28 31 33 29  |erm$=.(13)+.(13)|
00013290  0d 0a 6e 23 20 20 20 20  c9 20 22 4c 46 20 4c 46  |..n#    . "LF LF|
000132a0  22 3a 74 65 72 6d 24 3d  bd 28 31 30 29 2b bd 28  |":term$=.(10)+.(|
000132b0  31 30 29 0d 0a 6f 18 20  20 20 20 7f 3a 74 65 72  |10)..o.    .:ter|
000132c0  6d 24 3d 24 54 65 72 6d  69 6e 25 0d 0a 70 07 20  |m$=$Termin%..p. |
000132d0  20 cb 0d 0a 71 29 20 20  f2 74 69 63 6b 5f 6f 6e  | ...q)  .tick_on|
000132e0  65 28 6d 65 6e 75 68 61  6e 64 6c 65 25 2c 30 2c  |e(menuhandle%,0,|
000132f0  35 2c 63 68 6f 69 63 65  31 25 29 0d 0a 72 21 20  |5,choice1%)..r! |
00013300  20 24 a4 74 65 78 74 28  63 73 76 57 25 2c 31 35  | $.text(csvW%,15|
00013310  29 3d 63 68 6f 69 63 65  24 28 31 29 0d 0a 73 1c  |)=choice$(1)..s.|
00013320  20 20 f2 72 65 64 72 61  77 5f 69 63 6f 6e 28 63  |  .redraw_icon(c|
00013330  73 76 57 25 2c 31 35 29  0d 0a 74 39 20 20 c9 20  |svW%,15)..t9  . |
00013340  6d 65 6e 75 25 28 38 29  2c 6d 65 6e 75 25 28 31  |menu%(8),menu%(1|
00013350  31 29 2c 6d 65 6e 75 25  28 31 34 29 2c 6d 65 6e  |1),menu%(14),men|
00013360  75 25 28 31 36 29 2c 6d  65 6e 75 25 28 31 39 29  |u%(16),menu%(19)|
00013370  3a 0d 0a 75 24 20 20 66  69 65 6c 64 74 79 70 65  |:..u$  fieldtype|
00013380  25 3d 66 69 72 73 74 74  79 70 65 25 2b 63 68 6f  |%=firsttype%+cho|
00013390  69 63 65 31 25 0d 0a 76  3c 20 20 f2 74 69 63 6b  |ice1%..v<  .tick|
000133a0  5f 6f 6e 65 28 6d 65 6e  75 68 61 6e 64 6c 65 25  |_one(menuhandle%|
000133b0  2c 30 2c 6c 61 73 74 74  79 70 65 25 2d 66 69 72  |,0,lasttype%-fir|
000133c0  73 74 74 79 70 65 25 2c  63 68 6f 69 63 65 31 25  |sttype%,choice1%|
000133d0  29 0d 0a 77 11 20 20 f2  75 70 64 61 74 65 5f 62  |)..w.  .update_b|
000133e0  6f 78 0d 0a 78 11 20 20  c9 20 6d 65 6e 75 25 28  |ox..x.  . menu%(|
000133f0  35 29 3a 0d 0a 79 1b 20  20 54 61 62 6c 65 6e 75  |5):..y.  Tablenu|
00013400  6d 62 65 72 25 3d 63 68  6f 69 63 65 31 25 0d 0a  |mber%=choice1%..|
00013410  7a 26 20 20 24 54 61 62  6c 65 6e 61 6d 65 25 3d  |z&  $Tablename%=|
00013420  74 61 62 6c 65 24 28 54  61 62 6c 65 6e 75 6d 62  |table$(Tablenumb|
00013430  65 72 25 29 0d 0a 7b 32  20 20 f2 74 69 63 6b 5f  |er%)..{2  .tick_|
00013440  6f 6e 65 28 6d 65 6e 75  68 61 6e 64 6c 65 25 2c  |one(menuhandle%,|
00013450  30 2c 4c 61 73 74 54 61  62 6c 65 25 2c 63 68 6f  |0,LastTable%,cho|
00013460  69 63 65 31 25 29 0d 0a  7c 1c 20 20 f2 72 65 64  |ice1%)..|.  .red|
00013470  72 61 77 5f 69 63 6f 6e  28 6c 69 6e 6b 57 25 2c  |raw_icon(linkW%,|
00013480  30 29 0d 0a 7d 13 20 20  c9 20 66 69 65 6c 64 6d  |0)..}.  . fieldm|
00013490  65 6e 75 25 3a 0d 0a 7e  15 20 20 c8 8e 20 66 69  |enu%:..~.  .. fi|
000134a0  65 6c 64 66 75 6e 63 24  20 ca 0d 0a 7f 12 20 20  |eldfunc$ .....  |
000134b0  20 20 c9 20 22 6d 61 74  63 68 22 3a 0d 0a 80 1d  |  . "match":....|
000134c0  20 20 20 20 4d 61 74 63  68 5f 74 61 67 25 3d 63  |    Match_tag%=c|
000134d0  68 6f 69 63 65 31 25 2b  31 0d 0a 81 42 20 20 20  |hoice1%+1...B   |
000134e0  20 24 a4 74 65 78 74 28  6d 61 74 63 68 57 25 2c  | $.text(matchW%,|
000134f0  33 29 3d 54 61 67 24 28  4d 61 74 63 68 5f 74 61  |3)=Tag$(Match_ta|
00013500  67 25 29 3a f2 72 65 64  72 61 77 5f 69 63 6f 6e  |g%):.redraw_icon|
00013510  28 6d 61 74 63 68 57 25  2c 33 29 0d 0a 82 32 20  |(matchW%,3)...2 |
00013520  20 20 20 f2 74 69 63 6b  5f 6f 6e 65 28 66 69 65  |   .tick_one(fie|
00013530  6c 64 6d 65 6e 75 25 2c  30 2c 66 69 65 6c 64 73  |ldmenu%,0,fields|
00013540  25 2d 31 2c 63 68 6f 69  63 65 31 25 29 0d 0a 83  |%-1,choice1%)...|
00013550  12 20 20 20 20 c9 20 22  66 69 72 73 74 22 3a 0d  |.    . "first":.|
00013560  0a 84 23 20 20 20 20 e7  20 6b 65 79 66 75 6e 63  |..#    . keyfunc|
00013570  24 3c 3e 22 43 75 72 72  65 6e 74 20 6b 65 79 22  |$<>"Current key"|
00013580  20 8c 0d 0a 85 2a 20 20  20 20 20 20 e7 20 a4 74  | ....*      . .t|
00013590  69 63 6b 65 64 28 66 69  65 6c 64 6d 65 6e 75 25  |icked(fieldmenu%|
000135a0  2c 63 68 6f 69 63 65 31  25 29 20 8c 0d 0a 86 38  |,choice1%) ....8|
000135b0  20 20 20 20 20 20 20 20  4b 65 79 66 6c 64 30 25  |        Keyfld0%|
000135c0  3d 30 3a 24 46 31 64 6b  65 79 25 3d 22 22 3a f2  |=0:$F1dkey%="":.|
000135d0  72 65 64 72 61 77 5f 69  63 6f 6e 28 6b 65 79 57  |redraw_icon(keyW|
000135e0  25 2c 30 29 0d 0a 87 28  20 20 20 20 20 20 20 20  |%,0)...(        |
000135f0  f2 74 69 63 6b 28 66 69  65 6c 64 6d 65 6e 75 25  |.tick(fieldmenu%|
00013600  2c 63 68 6f 69 63 65 31  25 2c a3 29 0d 0a 88 0d  |,choice1%,.)....|
00013610  20 20 20 20 20 20 20 20  cc 0d 0a 89 1f 20 20 20  |        .....   |
00013620  20 20 20 20 20 4b 65 79  66 6c 64 30 25 3d 63 68  |     Keyfld0%=ch|
00013630  6f 69 63 65 31 25 2b 31  0d 0a 8a 39 20 20 20 20  |oice1%+1...9    |
00013640  20 20 20 20 24 46 31 64  6b 65 79 25 3d 54 61 67  |    $F1dkey%=Tag|
00013650  24 28 4b 65 79 66 6c 64  30 25 29 3a f2 72 65 64  |$(Keyfld0%):.red|
00013660  72 61 77 5f 69 63 6f 6e  28 6b 65 79 57 25 2c 30  |raw_icon(keyW%,0|
00013670  29 0d 0a 8b 36 20 20 20  20 20 20 20 20 f2 74 69  |)...6        .ti|
00013680  63 6b 5f 6f 6e 65 28 66  69 65 6c 64 6d 65 6e 75  |ck_one(fieldmenu|
00013690  25 2c 30 2c 66 69 65 6c  64 73 25 2d 31 2c 63 68  |%,0,fields%-1,ch|
000136a0  6f 69 63 65 31 25 29 0d  0a 8c 0b 20 20 20 20 20  |oice1%)....     |
000136b0  20 cd 0d 0a 8d 09 20 20  20 20 cd 0d 0a 8e 13 20  | .....    ..... |
000136c0  20 20 20 c9 20 22 73 65  63 6f 6e 64 22 3a 0d 0a  |   . "second":..|
000136d0  8f 23 20 20 20 20 e7 20  6b 65 79 66 75 6e 63 24  |.#    . keyfunc$|
000136e0  3c 3e 22 43 75 72 72 65  6e 74 20 6b 65 79 22 20  |<>"Current key" |
000136f0  8c 0d 0a 90 2a 20 20 20  20 20 20 e7 20 a4 74 69  |....*      . .ti|
00013700  63 6b 65 64 28 66 69 65  6c 64 6d 65 6e 75 25 2c  |cked(fieldmenu%,|
00013710  63 68 6f 69 63 65 31 25  29 20 8c 0d 0a 91 38 20  |choice1%) ....8 |
00013720  20 20 20 20 20 20 20 4b  65 79 66 6c 64 31 25 3d  |       Keyfld1%=|
00013730  30 3a 24 46 32 64 6b 65  79 25 3d 22 22 3a f2 72  |0:$F2dkey%="":.r|
00013740  65 64 72 61 77 5f 69 63  6f 6e 28 6b 65 79 57 25  |edraw_icon(keyW%|
00013750  2c 31 29 0d 0a 92 28 20  20 20 20 20 20 20 20 f2  |,1)...(        .|
00013760  74 69 63 6b 28 66 69 65  6c 64 6d 65 6e 75 25 2c  |tick(fieldmenu%,|
00013770  63 68 6f 69 63 65 31 25  2c a3 29 0d 0a 93 0d 20  |choice1%,.).... |
00013780  20 20 20 20 20 20 20 cc  0d 0a 94 1f 20 20 20 20  |       .....    |
00013790  20 20 20 20 4b 65 79 66  6c 64 31 25 3d 63 68 6f  |    Keyfld1%=cho|
000137a0  69 63 65 31 25 2b 31 0d  0a 95 39 20 20 20 20 20  |ice1%+1...9     |
000137b0  20 20 20 24 46 32 64 6b  65 79 25 3d 54 61 67 24  |   $F2dkey%=Tag$|
000137c0  28 4b 65 79 66 6c 64 31  25 29 3a f2 72 65 64 72  |(Keyfld1%):.redr|
000137d0  61 77 5f 69 63 6f 6e 28  6b 65 79 57 25 2c 31 29  |aw_icon(keyW%,1)|
000137e0  0d 0a 96 36 20 20 20 20  20 20 20 20 f2 74 69 63  |...6        .tic|
000137f0  6b 5f 6f 6e 65 28 66 69  65 6c 64 6d 65 6e 75 25  |k_one(fieldmenu%|
00013800  2c 30 2c 66 69 65 6c 64  73 25 2d 31 2c 63 68 6f  |,0,fields%-1,cho|
00013810  69 63 65 31 25 29 0d 0a  97 0b 20 20 20 20 20 20  |ice1%)....      |
00013820  cd 0d 0a 98 09 20 20 20  20 cd 0d 0a 99 07 20 20  |.....    .....  |
00013830  cb 0d 0a 9a 17 20 20 7f  3a f2 73 70 65 63 69 61  |.....  .:.specia|
00013840  6c 5f 73 65 6c 65 63 74  0d 0a 9b 05 cb 0d 0a 9c  |l_select........|
00013850  0f e7 20 ac 20 71 75 69  74 25 20 8c 0d 0a 9d 35  |.. . quit% ....5|
00013860  20 20 e7 20 72 65 64 6f  25 20 8c 20 f2 73 68 6f  |  . redo% . .sho|
00013870  77 5f 6d 65 6e 75 28 6d  65 6e 75 68 61 6e 64 6c  |w_menu(menuhandl|
00013880  65 25 2c 6d 65 6e 75 78  25 2c 6d 65 6e 75 79 25  |e%,menux%,menuy%|
00013890  29 0d 0a 9e 05 cd 0d 0a  9f 05 e1 0d 0a a0 05 3a  |)..............:|
000138a0  0d 0a a1 23 dd 20 f2 69  6e 69 74 5f 64 72 61 67  |...#. .init_drag|
000138b0  28 77 69 25 2c 69 63 25  2c 64 72 61 67 74 79 70  |(wi%,ic%,dragtyp|
000138c0  65 25 29 0d 0a a2 19 f2  67 65 74 73 63 72 65 65  |e%).....getscree|
000138d0  6e 73 69 7a 65 28 57 25  2c 48 25 29 0d 0a a3 0f  |nsize(W%,H%)....|
000138e0  21 62 6c 6f 63 6b 25 3d  77 69 25 0d 0a a4 24 c8  |!block%=wi%...$.|
000138f0  99 20 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |. "Wimp_GetWindo|
00013900  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
00013910  0a a5 1d 79 73 69 7a 65  25 3d 62 6c 6f 63 6b 25  |...ysize%=block%|
00013920  21 31 36 2d 62 6c 6f 63  6b 25 21 38 0d 0a a6 19  |!16-block%!8....|
00013930  78 25 3d 62 6c 6f 63 6b  25 21 34 2d 62 6c 6f 63  |x%=block%!4-bloc|
00013940  6b 25 21 32 30 0d 0a a7  1a 79 25 3d 62 6c 6f 63  |k%!20....y%=bloc|
00013950  6b 25 21 31 36 2d 62 6c  6f 63 6b 25 21 32 34 0d  |k%!16-block%!24.|
00013960  0a a8 10 62 6c 6f 63 6b  25 21 34 3d 69 63 25 0d  |...block%!4=ic%.|
00013970  0a a9 22 c8 99 20 22 57  69 6d 70 5f 47 65 74 49  |..".. "Wimp_GetI|
00013980  63 6f 6e 53 74 61 74 65  22 2c 2c 62 6c 6f 63 6b  |conState",,block|
00013990  25 0d 0a aa 1f 62 6c 6f  63 6b 25 21 38 2b 3d 78  |%....block%!8+=x|
000139a0  25 3a 6d 69 6e 78 25 3d  62 6c 6f 63 6b 25 21 38  |%:minx%=block%!8|
000139b0  0d 0a ab 21 62 6c 6f 63  6b 25 21 31 32 2b 3d 79  |...!block%!12+=y|
000139c0  25 3a 6d 69 6e 79 25 3d  62 6c 6f 63 6b 25 21 31  |%:miny%=block%!1|
000139d0  32 0d 0a ac 21 62 6c 6f  63 6b 25 21 31 36 2b 3d  |2...!block%!16+=|
000139e0  78 25 3a 6d 61 78 78 25  3d 62 6c 6f 63 6b 25 21  |x%:maxx%=block%!|
000139f0  31 36 0d 0a ad 21 62 6c  6f 63 6b 25 21 32 30 2b  |16...!block%!20+|
00013a00  3d 79 25 3a 6d 61 78 79  25 3d 62 6c 6f 63 6b 25  |=y%:maxy%=block%|
00013a10  21 32 30 0d 0a ae 13 e7  20 64 72 61 67 74 79 70  |!20..... dragtyp|
00013a20  65 25 3d 36 20 8c 0d 0a  af 35 20 20 62 6c 6f 63  |e%=6 ....5  bloc|
00013a30  6b 25 21 32 34 3d 32 2a  6d 69 6e 78 25 2d 6d 61  |k%!24=2*minx%-ma|
00013a40  78 78 25 3a 62 6c 6f 63  6b 25 21 33 36 3d 32 2a  |xx%:block%!36=2*|
00013a50  6d 61 78 79 25 2d 6d 69  6e 79 25 0d 0a b0 20 20  |maxy%-miny%...  |
00013a60  20 cc 20 62 6c 6f 63 6b  25 21 32 34 3d 30 3a 62  | . block%!24=0:b|
00013a70  6c 6f 63 6b 25 21 33 36  3d 48 25 0d 0a b1 05 cd  |lock%!36=H%.....|
00013a80  0d 0a b2 0f 62 6c 6f 63  6b 25 21 32 38 3d 30 0d  |....block%!28=0.|
00013a90  0a b3 10 62 6c 6f 63 6b  25 21 33 32 3d 57 25 0d  |...block%!32=W%.|
00013aa0  0a b4 0d 21 62 6c 6f 63  6b 25 3d 30 0d 0a b5 16  |...!block%=0....|
00013ab0  62 6c 6f 63 6b 25 21 34  3d 64 72 61 67 74 79 70  |block%!4=dragtyp|
00013ac0  65 25 0d 0a b6 0f 64 72  61 67 67 69 6e 67 25 3d  |e%....dragging%=|
00013ad0  b9 0d 0a b7 0c c8 8e 20  77 69 25 20 ca 0d 0a b8  |....... wi% ....|
00013ae0  19 20 20 c9 20 73 61 76  65 57 25 2c 73 61 76 65  |.  . saveW%,save|
00013af0  73 75 62 57 25 3a 0d 0a  b9 11 20 20 e7 20 52 49  |subW%:....  . RI|
00013b00  53 43 4f 53 33 20 8c 0d  0a ba 4d 20 20 20 20 e7  |SCOS3 ....M    .|
00013b10  20 77 69 25 3d 73 61 76  65 57 25 20 8c 20 73 70  | wi%=saveW% . sp|
00013b20  72 69 74 65 24 3d c1 24  53 61 76 65 53 70 72 69  |rite$=.$SaveSpri|
00013b30  74 65 25 2c 32 2c 38 29  20 8b 20 73 70 72 69 74  |te%,2,8) . sprit|
00013b40  65 24 3d c1 24 53 75 62  53 70 72 69 74 65 25 2c  |e$=.$SubSprite%,|
00013b50  32 2c 38 29 0d 0a bb 35  20 20 20 20 c8 99 20 22  |2,8)...5    .. "|
00013b60  44 72 61 67 41 53 70 72  69 74 65 5f 53 74 61 72  |DragASprite_Star|
00013b70  74 22 2c 26 43 35 2c 31  2c 73 70 72 69 74 65 24  |t",&C5,1,sprite$|
00013b80  2c 62 6c 6f 63 6b 25 2b  38 0d 0a bc 23 20 20 20  |,block%+8...#   |
00013b90  20 cc 20 c8 99 20 22 57  69 6d 70 5f 44 72 61 67  | . .. "Wimp_Drag|
00013ba0  42 6f 78 22 2c 2c 62 6c  6f 63 6b 25 0d 0a bd 07  |Box",,block%....|
00013bb0  20 20 cd 0d 0a be 08 20  20 7f 3a 0d 0a bf 1f 20  |  .....  .:.... |
00013bc0  20 c8 99 20 22 57 69 6d  70 5f 44 72 61 67 42 6f  | .. "Wimp_DragBo|
00013bd0  78 22 2c 2c 62 6c 6f 63  6b 25 0d 0a c0 05 cb 0d  |x",,block%......|
00013be0  0a c1 1d e7 20 77 69 25  3d 6d 61 69 6e 57 25 20  |.... wi%=mainW% |
00013bf0  8c 20 66 69 63 6f 6e 25  3d 69 63 25 0d 0a c2 05  |. ficon%=ic%....|
00013c00  e1 0d 0a c3 05 3a 0d 0a  c4 1c dd 20 f2 65 6e 64  |.....:..... .end|
00013c10  5f 64 72 61 67 28 73 74  61 72 74 25 2c 65 6e 64  |_drag(start%,end|
00013c20  25 29 0d 0a c5 0d ea 20  77 69 25 2c 69 63 25 0d  |%)..... wi%,ic%.|
00013c30  0a c6 0f 64 72 61 67 67  69 6e 67 25 3d a3 0d 0a  |...dragging%=...|
00013c40  c7 19 64 61 74 61 73 69  7a 65 25 3d 65 6e 64 25  |..datasize%=end%|
00013c50  2d 73 74 61 72 74 25 0d  0a c8 24 c8 99 20 22 57  |-start%...$.. "W|
00013c60  69 6d 70 5f 47 65 74 50  6f 69 6e 74 65 72 49 6e  |imp_GetPointerIn|
00013c70  66 6f 22 2c 2c 62 6c 6f  63 6b 25 0d 0a c9 1f 77  |fo",,block%....w|
00013c80  69 25 3d 62 6c 6f 63 6b  25 21 31 32 3a 69 63 25  |i%=block%!12:ic%|
00013c90  3d 62 6c 6f 63 6b 25 21  31 36 0d 0a ca 37 62 6c  |=block%!16...7bl|
00013ca0  6f 63 6b 25 21 33 32 3d  62 6c 6f 63 6b 25 21 34  |ock%!32=block%!4|
00013cb0  3a 62 6c 6f 63 6b 25 21  32 38 3d 62 6c 6f 63 6b  |:block%!28=block|
00013cc0  25 21 30 3a 62 6c 6f 63  6b 25 21 32 34 3d 69 63  |%!0:block%!24=ic|
00013cd0  25 0d 0a cb 1d 62 6c 6f  63 6b 25 21 32 30 3d 77  |%....block%!20=w|
00013ce0  69 25 3a 62 6c 6f 63 6b  25 21 31 36 3d 31 0d 0a  |i%:block%!16=1..|
00013cf0  cc 33 62 6c 6f 63 6b 25  21 31 32 3d 30 3a 62 6c  |.3block%!12=0:bl|
00013d00  6f 63 6b 25 21 33 36 3d  64 61 74 61 73 69 7a 65  |ock%!36=datasize|
00013d10  25 3a 62 6c 6f 63 6b 25  21 34 30 3d 54 79 70 65  |%:block%!40=Type|
00013d20  25 0d 0a cd 0f e7 20 64  65 73 69 67 6e 25 20 8c  |%..... design% .|
00013d30  0d 0a ce 1e 20 20 f2 61  64 6a 75 73 74 5f 66 69  |....  .adjust_fi|
00013d40  65 6c 64 28 64 72 61 67  62 75 74 74 25 29 0d 0a  |eld(dragbutt%)..|
00013d50  cf 07 20 20 cc 0d 0a d0  25 20 20 e7 20 46 69 6c  |..  ....%  . Fil|
00013d60  65 6e 61 6d 65 24 3c 3e  22 22 20 80 20 77 69 25  |ename$<>"" . wi%|
00013d70  3c 3e 6d 61 69 6e 57 25  20 8c 0d 0a d1 25 20 20  |<>mainW% ....%  |
00013d80  20 20 24 28 62 6c 6f 63  6b 25 2b 34 34 29 3d a4  |  $(block%+44)=.|
00013d90  6c 65 61 66 28 46 69 6c  65 6e 61 6d 65 24 29 0d  |leaf(Filename$).|
00013da0  0a d2 12 20 20 20 20 21  62 6c 6f 63 6b 25 3d 36  |...    !block%=6|
00013db0  30 0d 0a d3 2f 20 20 20  20 c8 99 20 22 57 69 6d  |0.../    .. "Wim|
00013dc0  70 5f 53 65 6e 64 4d 65  73 73 61 67 65 22 2c 31  |p_SendMessage",1|
00013dd0  37 2c 62 6c 6f 63 6b 25  2c 77 69 25 2c 69 63 25  |7,block%,wi%,ic%|
00013de0  0d 0a d4 16 20 20 20 20  72 61 6d 70 74 72 25 3d  |....    ramptr%=|
00013df0  73 74 61 72 74 25 0d 0a  d5 20 20 20 20 20 c8 99  |start%...     ..|
00013e00  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
00013e10  75 22 2c 2c 2d 31 0d 0a  d6 07 20 20 cd 0d 0a d7  |u",,-1....  ....|
00013e20  05 cd 0d 0a d8 05 e1 0d  0a d9 05 3a 0d 0a da 15  |...........:....|
00013e30  dd 20 a4 65 6e 63 72 79  70 74 28 53 24 2c 5a 25  |. .encrypt(S$,Z%|
00013e40  29 0d 0a db 0b ea 20 49  25 2c 52 25 0d 0a dc 10  |)..... I%,R%....|
00013e50  52 25 3d b3 28 2d 31 32  38 31 37 29 0d 0a dd 12  |R%=.(-12817)....|
00013e60  e3 20 49 25 3d 31 20 b8  20 a9 28 53 24 29 0d 0a  |. I%=1 . .(S$)..|
00013e70  de 10 20 20 52 25 3d b3  28 35 38 29 2d 31 0d 0a  |..  R%=.(58)-1..|
00013e80  df 17 20 20 e7 20 ac 20  5a 25 20 8c 20 52 25 3d  |..  . . Z% . R%=|
00013e90  35 38 2d 52 25 0d 0a e0  2f 20 20 c1 53 24 2c 49  |58-R%.../  .S$,I|
00013ea0  25 2c 31 29 3d bd 28 28  97 28 c1 53 24 2c 49 25  |%,1)=.((.(.S$,I%|
00013eb0  2c 31 29 29 2d 36 35 2b  52 25 29 20 83 20 35 38  |,1))-65+R%) . 58|
00013ec0  2b 36 35 29 0d 0a e1 08  ed 20 49 25 0d 0a e2 07  |+65)..... I%....|
00013ed0  3d 53 24 0d 0a e3 05 3a  0d 0a e4 0f dd 20 a4 6c  |=S$....:..... .l|
00013ee0  65 61 66 28 73 24 29 0d  0a e5 0a 73 32 24 3d 22  |eaf(s$)....s2$="|
00013ef0  22 0d 0a e6 19 c8 95 20  c2 73 24 29 3c 3e 22 2e  |"...... .s$)<>".|
00013f00  22 20 80 20 73 24 3c 3e  22 22 0d 0a e7 12 20 20  |" . s$<>""....  |
00013f10  73 32 24 3d c2 73 24 29  2b 73 32 24 0d 0a e8 0d  |s2$=.s$)+s2$....|
00013f20  20 20 73 24 3d c0 73 24  29 0d 0a e9 05 ce 0d 0a  |  s$=.s$).......|
00013f30  ea 13 64 62 61 73 65 70  61 74 68 24 3d c0 73 24  |..dbasepath$=.s$|
00013f40  29 0d 0a eb 08 3d 73 32  24 0d 0a ec 05 3a 0d 0a  |)....=s2$....:..|
00013f50  ed 4b f4 20 4d 65 73 73  61 67 65 20 68 61 6e 64  |.K. Message hand|
00013f60  6c 69 6e 67 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ling -----------|
00013f70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00013f90  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 0a ee 05 3a 0d 0a  |---------....:..|
00013fa0  ef 17 dd 20 f2 6e 6f 74  5f 61 63 6b 6e 6f 77 6c  |... .not_acknowl|
00013fb0  65 64 67 65 64 0d 0a f0  12 c8 8e 20 62 6c 6f 63  |edged...... bloc|
00013fc0  6b 25 21 31 36 20 ca 0d  0a f1 0a 20 20 c9 20 35  |k%!16 .....  . 5|
00013fd0  3a 0d 0a f2 24 20 20 f4  20 44 61 74 61 4f 70 65  |:...$  . DataOpe|
00013fe0  6e 20 66 61 69 6c 65 64  2c 20 73 6f 20 72 75 6e  |n failed, so run|
00013ff0  20 66 69 6c 65 0d 0a f3  26 20 20 e7 20 62 6c 6f  | file...&  . blo|
00014000  63 6b 25 21 38 3d 49 6d  70 72 65 66 25 20 8c 20  |ck%!8=Impref% . |
00014010  49 6d 70 5f 77 61 69 74  25 3d b9 0d 0a f4 26 20  |Imp_wait%=....& |
00014020  20 c8 99 20 22 57 69 6d  70 5f 53 74 61 72 74 54  | .. "Wimp_StartT|
00014030  61 73 6b 22 2c 24 28 62  6c 6f 63 6b 25 2b 34 34  |ask",$(block%+44|
00014040  29 0d 0a f5 0a 20 20 c9  20 37 3a 0d 0a f6 1a 20  |)....  . 7:.... |
00014050  20 f4 20 52 41 4d 54 72  61 6e 73 6d 69 74 20 66  | . RAMTransmit f|
00014060  61 69 6c 65 64 0d 0a f7  29 20 20 e7 20 ac 20 6d  |ailed...)  . . m|
00014070  65 72 67 69 6e 67 25 20  8c 20 85 20 6d 6f 61 6e  |erging% . . moan|
00014080  5f 65 72 72 25 2c a4 6d  73 67 28 33 39 29 0d 0a  |_err%,.msg(39)..|
00014090  f8 0a 20 20 c9 20 33 3a  0d 0a f9 36 20 20 f4 20  |..  . 3:...6  . |
000140a0  44 61 74 61 4c 6f 61 64  20 66 61 69 6c 65 64 2c  |DataLoad failed,|
000140b0  20 73 6f 20 64 65 6c 65  74 65 20 73 63 72 61 70  | so delete scrap|
000140c0  66 69 6c 65 20 28 69 66  20 6f 75 72 73 29 0d 0a  |file (if ours)..|
000140d0  fa 31 20 20 e7 20 62 6c  6f 63 6b 25 21 38 3d 6d  |.1  . block%!8=m|
000140e0  79 72 65 66 25 20 8c 20  c8 99 20 22 4f 53 5f 46  |yref% . .. "OS_F|
000140f0  69 6c 65 22 2c 36 2c 62  6c 6f 63 6b 2b 34 34 0d  |ile",6,block+44.|
00014100  0a fb 1a 20 20 85 20 6d  6f 61 6e 5f 65 72 72 25  |...  . moan_err%|
00014110  2c a4 6d 73 67 28 33 39  29 0d 0a fc 23 20 20 c9  |,.msg(39)...#  .|
00014120  20 26 38 30 31 34 32 3a  85 20 6d 6f 61 6e 5f 65  | &80142:. moan_e|
00014130  72 72 25 2c a4 6d 73 67  28 39 30 29 0d 0a fd 05  |rr%,.msg(90)....|
00014140  cb 0d 0a fe 05 e1 0d 0a  ff 05 3a 0d 0b 00 0e dd  |..........:.....|
00014150  20 f2 6d 65 73 73 61 67  65 0d 0b 01 17 ea 20 74  | .message..... t|
00014160  61 73 6b 25 2c 72 65 66  25 2c 6d 79 72 65 66 25  |ask%,ref%,myref%|
00014170  0d 0b 02 20 74 61 73 6b  25 3d 62 6c 6f 63 6b 25  |... task%=block%|
00014180  21 34 3a 72 65 66 25 3d  62 6c 6f 63 6b 25 21 38  |!4:ref%=block%!8|
00014190  0d 0b 03 12 c8 8e 20 62  6c 6f 63 6b 25 21 31 36  |...... block%!16|
000141a0  20 ca 0d 0b 04 11 20 20  c9 20 30 3a 71 75 69 74  | .....  . 0:quit|
000141b0  25 3d b9 0d 0b 05 1c 20  20 c9 20 31 3a f4 20 23  |%=.....  . 1:. #|
000141c0  23 23 20 44 61 74 61 53  61 76 65 20 23 23 23 0d  |## DataSave ###.|
000141d0  0b 06 25 20 20 e7 20 74  61 73 6b 25 3c 3e 6d 79  |..%  . task%<>my|
000141e0  74 61 73 6b 25 20 80 20  70 72 65 73 65 6e 74 25  |task% . present%|
000141f0  3d 37 20 8c 0d 0b 07 1b  20 20 20 20 64 61 74 61  |=7 .....    data|
00014200  73 69 7a 65 25 3d 62 6c  6f 63 6b 25 21 33 36 0d  |size%=block%!36.|
00014210  0b 08 16 20 20 20 20 c8  8e 20 62 6c 6f 63 6b 25  |...    .. block%|
00014220  21 34 30 20 ca 0d 0b 09  20 20 20 20 20 20 20 c9  |!40 ....       .|
00014230  20 26 66 66 66 2c 26 66  66 39 2c 26 61 66 66 2c  | &fff,&ff9,&aff,|
00014240  26 64 66 65 3a 0d 0b 0a  15 20 20 20 20 20 20 6d  |&dfe:....      m|
00014250  79 72 65 66 25 3d 72 65  66 25 0d 0b 0b 3e 20 20  |yref%=ref%...>  |
00014260  20 20 20 20 62 6c 6f 63  6b 25 21 30 3d 32 35 36  |    block%!0=256|
00014270  3a 62 6c 6f 63 6b 25 21  31 32 3d 72 65 66 25 3a  |:block%!12=ref%:|
00014280  62 6c 6f 63 6b 25 21 31  36 3d 32 3a 62 6c 6f 63  |block%!16=2:bloc|
00014290  6b 25 21 33 36 3d 2d 31  0d 0b 0c 2a 20 20 20 20  |k%!36=-1...*    |
000142a0  20 20 24 28 62 6c 6f 63  6b 25 2b 34 34 29 3d 22  |  $(block%+44)="|
000142b0  3c 57 69 6d 70 24 53 63  72 61 70 3e 22 2b bd 28  |<Wimp$Scrap>"+.(|
000142c0  30 29 0d 0b 0d 2f 20 20  20 20 20 20 c8 99 20 22  |0).../      .. "|
000142d0  57 69 6d 70 5f 53 65 6e  64 4d 65 73 73 61 67 65  |Wimp_SendMessage|
000142e0  22 2c 31 37 2c 62 6c 6f  63 6b 25 2c 74 61 73 6b  |",17,block%,task|
000142f0  25 0d 0b 0e 09 20 20 20  20 cb 0d 0b 0f 07 20 20  |%....    .....  |
00014300  cd 0d 0b 10 1f 20 20 c9  20 32 3a f4 20 23 23 23  |.....  . 2:. ###|
00014310  20 44 61 74 61 53 61 76  65 41 63 6b 20 23 23 23  | DataSaveAck ###|
00014320  0d 0b 11 31 20 20 f2 73  61 76 65 28 a4 67 65 74  |...1  .save(.get|
00014330  73 74 72 28 62 6c 6f 63  6b 25 2b 34 34 29 2c 54  |str(block%+44),T|
00014340  79 70 65 25 2c 53 74 61  72 74 25 2c 45 6e 64 25  |ype%,Start%,End%|
00014350  29 0d 0b 12 38 20 20 6d  79 72 65 66 25 3d 72 65  |)...8  myref%=re|
00014360  66 25 3a 62 6c 6f 63 6b  25 21 31 32 3d 72 65 66  |f%:block%!12=ref|
00014370  25 3a 62 6c 6f 63 6b 25  21 31 36 3d 33 3a 21 62  |%:block%!16=3:!b|
00014380  6c 6f 63 6b 25 3d 32 35  36 0d 0b 13 2b 20 20 c8  |lock%=256...+  .|
00014390  99 20 22 57 69 6d 70 5f  53 65 6e 64 4d 65 73 73  |. "Wimp_SendMess|
000143a0  61 67 65 22 2c 31 38 2c  62 6c 6f 63 6b 25 2c 74  |age",18,block%,t|
000143b0  61 73 6b 25 0d 0b 14 1e  20 20 c8 99 20 22 57 69  |ask%....  .. "Wi|
000143c0  6d 70 5f 43 72 65 61 74  65 4d 65 6e 75 22 2c 2c  |mp_CreateMenu",,|
000143d0  2d 31 0d 0b 15 1c 20 20  c9 20 33 3a f4 20 23 23  |-1....  . 3:. ##|
000143e0  23 20 44 61 74 61 4c 6f  61 64 20 23 23 23 0d 0b  |# DataLoad ###..|
000143f0  16 2c 20 20 6d 79 72 65  66 25 3d 62 6c 6f 63 6b  |.,  myref%=block|
00014400  25 21 31 32 3a 66 24 3d  a4 67 65 74 73 74 72 28  |%!12:f$=.getstr(|
00014410  62 6c 6f 63 6b 25 2b 34  34 29 0d 0b 17 14 20 20  |block%+44)....  |
00014420  f2 67 65 74 5f 69 74 5f  69 6e 28 66 24 29 0d 0b  |.get_it_in(f$)..|
00014430  18 35 20 20 e7 20 6d 79  72 65 66 25 3c 3e 30 20  |.5  . myref%<>0 |
00014440  8c 20 c8 99 20 22 4f 53  5f 43 4c 49 22 2c 22 52  |. .. "OS_CLI","R|
00014450  65 6d 6f 76 65 20 3c 57  69 6d 70 24 53 63 72 61  |emove <Wimp$Scra|
00014460  70 3e 22 0d 0b 19 1f 20  20 c9 20 34 3a f4 20 23  |p>"....  . 4:. #|
00014470  23 23 20 44 61 74 61 4c  6f 61 64 41 63 6b 20 23  |## DataLoadAck #|
00014480  23 23 0d 0b 1a 38 20 20  e7 20 62 6c 6f 63 6b 25  |##...8  . block%|
00014490  21 31 32 3d 49 6d 70 72  65 66 25 20 80 20 ac 20  |!12=Impref% . . |
000144a0  6d 65 72 67 69 6e 67 25  20 8c 20 f2 72 65 61 64  |merging% . .read|
000144b0  79 5f 74 6f 5f 6d 65 72  67 65 0d 0b 1b 3c 20 20  |y_to_merge...<  |
000144c0  c9 20 35 3a f4 20 23 23  23 20 44 61 74 61 4f 70  |. 5:. ### DataOp|
000144d0  65 6e 20 2d 20 72 65 73  70 6f 6e 73 65 20 74 6f  |en - response to|
000144e0  20 66 69 6c 65 20 64 6f  75 62 6c 65 20 63 6c 69  | file double cli|
000144f0  63 6b 20 23 23 23 0d 0b  1c 14 20 20 c8 8e 20 62  |ck ###....  .. b|
00014500  6c 6f 63 6b 25 21 34 30  20 ca 0d 0b 1d 1e 20 20  |lock%!40 .....  |
00014510  20 20 c9 20 26 37 66 31  2c 26 37 66 33 2c 26 37  |  . &7f1,&7f3,&7|
00014520  66 34 2c 26 37 66 35 3a  0d 0b 1e 16 20 20 20 20  |f4,&7f5:....    |
00014530  e7 20 70 72 65 73 65 6e  74 25 3d 37 20 8c 0d 0b  |. present%=7 ...|
00014540  1f 30 20 20 20 20 20 20  62 6c 6f 63 6b 25 21 30  |.0      block%!0|
00014550  3d 32 30 3a 62 6c 6f 63  6b 25 21 31 32 3d 72 65  |=20:block%!12=re|
00014560  66 25 3a 62 6c 6f 63 6b  25 21 31 36 3d 34 0d 0b  |f%:block%!16=4..|
00014570  20 29 20 20 20 20 20 20  c8 99 20 22 57 69 6d 70  | )      .. "Wimp|
00014580  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 31 37  |_SendMessage",17|
00014590  2c 62 6c 6f 63 6b 25 0d  0b 21 28 20 20 20 20 20  |,block%..!(     |
000145a0  20 f2 67 65 74 5f 69 74  5f 69 6e 28 a4 67 65 74  | .get_it_in(.get|
000145b0  73 74 72 28 62 6c 6f 63  6b 25 2b 34 34 29 29 0d  |str(block%+44)).|
000145c0  0b 22 09 20 20 20 20 cd  0d 0b 23 10 20 20 20 20  |.".    ...#.    |
000145d0  c9 20 26 32 30 30 30 3a  0d 0b 24 1e 20 20 20 20  |. &2000:..$.    |
000145e0  e7 20 6b 69 6c 6c 25 20  84 20 70 72 65 73 65 6e  |. kill% . presen|
000145f0  74 25 3d 30 20 8c 0d 0b  25 2a 20 20 20 20 20 20  |t%=0 ...%*      |
00014600  66 24 3d a4 67 65 74 73  74 72 28 62 6c 6f 63 6b  |f$=.getstr(block|
00014610  25 2b 34 34 29 2b 22 2e  49 6e 64 69 63 65 73 22  |%+44)+".Indices"|
00014620  0d 0b 26 20 20 20 20 20  20 20 c8 99 20 22 4f 53  |..&       .. "OS|
00014630  5f 46 69 6c 65 22 2c 35  2c 66 24 20 b8 20 64 25  |_File",5,f$ . d%|
00014640  0d 0b 27 12 20 20 20 20  20 20 e7 20 64 25 3d 32  |..'.      . d%=2|
00014650  20 8c 0d 0b 28 32 20 20  20 20 20 20 20 20 62 6c  | ...(2        bl|
00014660  6f 63 6b 25 21 30 3d 32  30 3a 62 6c 6f 63 6b 25  |ock%!0=20:block%|
00014670  21 31 32 3d 72 65 66 25  3a 62 6c 6f 63 6b 25 21  |!12=ref%:block%!|
00014680  31 36 3d 34 0d 0b 29 2b  20 20 20 20 20 20 20 20  |16=4..)+        |
00014690  c8 99 20 22 57 69 6d 70  5f 53 65 6e 64 4d 65 73  |.. "Wimp_SendMes|
000146a0  73 61 67 65 22 2c 31 37  2c 62 6c 6f 63 6b 25 0d  |sage",17,block%.|
000146b0  0b 2a 2a 20 20 20 20 20  20 20 20 f2 67 65 74 5f  |.**        .get_|
000146c0  69 74 5f 69 6e 28 a4 67  65 74 73 74 72 28 62 6c  |it_in(.getstr(bl|
000146d0  6f 63 6b 25 2b 34 34 29  29 0d 0b 2b 0b 20 20 20  |ock%+44))..+.   |
000146e0  20 20 20 cd 0d 0b 2c 09  20 20 20 20 cd 0d 0b 2d  |   ...,.    ...-|
000146f0  07 20 20 cb 0d 0b 2e 4c  20 20 c9 20 36 3a e7 20  |.  ....L  . 6:. |
00014700  73 61 76 65 66 75 6e 63  24 3c 3e 22 53 61 76 65  |savefunc$<>"Save|
00014710  20 6c 69 73 74 22 20 80  20 73 61 76 65 66 75 6e  | list" . savefun|
00014720  63 24 3c 3e 22 45 78 70  6f 72 74 20 43 53 56 22  |c$<>"Export CSV"|
00014730  20 8c 20 f2 72 61 6d 5f  74 72 61 6e 73 6d 69 74  | . .ram_transmit|
00014740  0d 0b 2f 2f 20 20 c9 20  26 35 30 32 3a f2 68 65  |..//  . &502:.he|
00014750  6c 70 5f 6d 65 73 73 61  67 65 28 62 6c 6f 63 6b  |lp_message(block|
00014760  25 21 33 32 2c 62 6c 6f  63 6b 25 21 33 36 29 0d  |%!32,block%!36).|
00014770  0b 30 39 20 20 c9 20 26  34 30 30 43 32 3a f2 67  |.09  . &400C2:.g|
00014780  65 74 73 63 72 65 65 6e  73 69 7a 65 28 53 63 72  |etscreensize(Scr|
00014790  65 65 6e 57 69 64 74 68  25 2c 53 63 72 65 65 6e  |eenWidth%,Screen|
000147a0  48 65 69 67 68 74 25 29  0d 0b 31 23 20 20 c9 20  |Height%)..1#  . |
000147b0  26 34 30 30 43 30 3a f2  6d 65 73 73 61 67 65 5f  |&400C0:.message_|
000147c0  6d 65 6e 75 5f 73 65 6c  65 63 74 0d 0b 32 2b 20  |menu_select..2+ |
000147d0  20 c9 20 26 38 30 31 34  30 3a f4 20 23 23 23 20  | . &80140:. ### |
000147e0  50 72 69 6e 74 46 69 6c  65 20 2d 20 69 67 6e 6f  |PrintFile - igno|
000147f0  72 65 20 23 23 23 0d 0b  33 05 cb 0d 0b 34 05 e1  |re ###..3....4..|
00014800  0d 0b 35 05 3a 0d 0b 36  13 dd 20 f2 72 61 6d 5f  |..5.:..6.. .ram_|
00014810  74 72 61 6e 73 6d 69 74  0d 0b 37 41 e7 20 64 61  |transmit..7A. da|
00014820  74 61 73 69 7a 65 25 3e  62 6c 6f 63 6b 25 21 32  |tasize%>block%!2|
00014830  34 20 8c 20 74 6f 73 65  6e 64 25 3d 62 6c 6f 63  |4 . tosend%=bloc|
00014840  6b 25 21 32 34 20 8b 20  74 6f 73 65 6e 64 25 3d  |k%!24 . tosend%=|
00014850  64 61 74 61 73 69 7a 65  25 0d 0b 38 46 c8 99 20  |datasize%..8F.. |
00014860  22 57 69 6d 70 5f 54 72  61 6e 73 66 65 72 42 6c  |"Wimp_TransferBl|
00014870  6f 63 6b 22 2c 6d 79 74  61 73 6b 25 2c 72 61 6d  |ock",mytask%,ram|
00014880  70 74 72 25 2c 62 6c 6f  63 6b 25 21 34 2c 62 6c  |ptr%,block%!4,bl|
00014890  6f 63 6b 25 21 32 30 2c  74 6f 73 65 6e 64 25 0d  |ock%!20,tosend%.|
000148a0  0b 39 15 62 6c 6f 63 6b  25 21 32 34 3d 74 6f 73  |.9.block%!24=tos|
000148b0  65 6e 64 25 0d 0b 3a 16  64 61 74 61 73 69 7a 65  |end%..:.datasize|
000148c0  25 2d 3d 74 6f 73 65 6e  64 25 0d 0b 3b 14 72 61  |%-=tosend%..;.ra|
000148d0  6d 70 74 72 25 2b 3d 74  6f 73 65 6e 64 25 0d 0b  |mptr%+=tosend%..|
000148e0  3c 16 62 6c 6f 63 6b 25  21 31 32 3d 62 6c 6f 63  |<.block%!12=bloc|
000148f0  6b 25 21 38 0d 0b 3d 0f  62 6c 6f 63 6b 25 21 31  |k%!8..=.block%!1|
00014900  36 3d 37 0d 0b 3e 3a c8  99 20 22 57 69 6d 70 5f  |6=7..>:.. "Wimp_|
00014910  53 65 6e 64 4d 65 73 73  61 67 65 22 2c 31 38 2b  |SendMessage",18+|
00014920  28 64 61 74 61 73 69 7a  65 25 3d 30 29 2c 62 6c  |(datasize%=0),bl|
00014930  6f 63 6b 25 2c 62 6c 6f  63 6b 25 21 34 0d 0b 3f  |ock%,block%!4..?|
00014940  05 e1 0d 0b 40 05 3a 0d  0b 41 1a dd 20 f2 6d 65  |....@.:..A.. .me|
00014950  73 73 61 67 65 5f 6d 65  6e 75 5f 73 65 6c 65 63  |ssage_menu_selec|
00014960  74 0d 0b 42 0e ea 20 50  25 2c 51 25 2c 49 25 0d  |t..B.. P%,Q%,I%.|
00014970  0b 43 1c 6b 65 79 66 75  6e 63 24 3d 22 22 3a 73  |.C.keyfunc$="":s|
00014980  61 76 65 66 75 6e 63 24  3d 22 22 0d 0b 44 35 68  |avefunc$=""..D5h|
00014990  61 6e 64 6c 65 25 3d 62  6c 6f 63 6b 25 21 32 30  |andle%=block%!20|
000149a0  3a 78 6d 69 6e 25 3d 62  6c 6f 63 6b 25 21 32 34  |:xmin%=block%!24|
000149b0  3a 79 6d 61 78 25 3d 62  6c 6f 63 6b 25 21 32 38  |:ymax%=block%!28|
000149c0  0d 0b 45 08 50 25 3d 31  0d 0b 46 38 c8 99 20 22  |..E.P%=1..F8.. "|
000149d0  57 69 6d 70 5f 44 65 63  6f 64 65 4d 65 6e 75 22  |Wimp_DecodeMenu"|
000149e0  2c 2c 6d 65 6e 75 68 61  6e 64 6c 65 25 2c 62 6c  |,,menuhandle%,bl|
000149f0  6f 63 6b 25 2b 33 32 2c  63 68 6f 69 63 65 73 25  |ock%+32,choices%|
00014a00  0d 0b 47 0e e3 20 49 25  3d 31 20 b8 20 34 0d 0b  |..G.. I%=1 . 4..|
00014a10  48 1d 20 20 51 25 3d a7  24 63 68 6f 69 63 65 73  |H.  Q%=.$choices|
00014a20  25 2c 22 2e 22 2c 50 25  2b 31 29 0d 0b 49 26 20  |%,".",P%+1)..I& |
00014a30  20 63 68 6f 69 63 65 24  28 49 25 29 3d c1 24 63  | choice$(I%)=.$c|
00014a40  68 6f 69 63 65 73 25 2c  50 25 2c 51 25 2d 50 25  |hoices%,P%,Q%-P%|
00014a50  29 0d 0b 4a 0d 20 20 50  25 3d 51 25 2b 31 0d 0b  |)..J.  P%=Q%+1..|
00014a60  4b 08 ed 20 49 25 0d 0b  4c 14 c8 8e 20 6d 65 6e  |K.. I%..L... men|
00014a70  75 68 61 6e 64 6c 65 25  20 ca 0d 0b 4d 11 20 20  |uhandle% ...M.  |
00014a80  c9 20 6d 65 6e 75 25 28  30 29 3a 0d 0b 4e 15 20  |. menu%(0):..N. |
00014a90  20 c8 8e 20 63 68 6f 69  63 65 24 28 31 29 20 ca  | .. choice$(1) .|
00014aa0  0d 0b 4f 19 20 20 20 20  c9 20 22 4e 65 77 20 64  |..O.    . "New d|
00014ab0  61 74 61 62 61 73 65 22  3a 0d 0b 50 1e 20 20 20  |atabase":..P.   |
00014ac0  20 24 53 61 76 65 4e 61  6d 65 25 3d 22 21 44 61  | $SaveName%="!Da|
00014ad0  74 61 42 61 73 65 22 0d  0b 51 32 20 20 20 20 24  |taBase"..Q2    $|
00014ae0  53 61 76 65 53 70 72 69  74 65 25 3d 22 73 6e 65  |SaveSprite%="sne|
00014af0  77 5f 61 70 70 6c 3b 50  70 74 72 5f 68 61 6e 64  |w_appl;Pptr_hand|
00014b00  2c 31 32 2c 38 3b 42 33  22 0d 0b 52 1c 20 20 20  |,12,8;B3"..R.   |
00014b10  20 73 61 76 65 66 75 6e  63 24 3d 63 68 6f 69 63  | savefunc$=choic|
00014b20  65 24 28 31 29 0d 0b 53  07 20 20 cb 0d 0b 54 11  |e$(1)..S.  ...T.|
00014b30  20 20 c9 20 6d 65 6e 75  25 28 31 29 3a 0d 0b 55  |  . menu%(1):..U|
00014b40  15 20 20 c8 8e 20 63 68  6f 69 63 65 24 28 31 29  |.  .. choice$(1)|
00014b50  20 ca 0d 0b 56 36 20 20  20 20 c9 20 22 49 6e 66  | ...V6    . "Inf|
00014b60  6f 72 6d 61 74 69 6f 6e  22 3a f2 63 6f 75 6e 74  |ormation":.count|
00014b70  28 6b 65 79 25 2c 52 55  25 29 3a f2 75 70 64 61  |(key%,RU%):.upda|
00014b80  74 65 5f 73 74 61 74 73  0d 0b 57 12 20 20 20 20  |te_stats..W.    |
00014b90  c9 20 22 50 72 69 6e 74  22 3a 0d 0b 58 17 20 20  |. "Print":..X.  |
00014ba0  20 20 c8 8e 20 63 68 6f  69 63 65 24 28 32 29 20  |  .. choice$(2) |
00014bb0  ca 0d 0b 59 1b 20 20 20  20 20 20 c9 20 22 53 61  |...Y.      . "Sa|
00014bc0  76 65 20 6f 70 74 69 6f  6e 73 22 3a 0d 0b 5a 35  |ve options":..Z5|
00014bd0  20 20 20 20 20 20 24 53  61 76 65 4e 61 6d 65 25  |      $SaveName%|
00014be0  3d 24 64 61 74 61 62 61  73 65 25 2b 22 2e 50 72  |=$database%+".Pr|
00014bf0  69 6e 74 52 65 73 2e 50  72 69 6e 74 4f 70 74 73  |intRes.PrintOpts|
00014c00  22 0d 0b 5b 34 20 20 20  20 20 20 24 53 61 76 65  |"..[4      $Save|
00014c10  53 70 72 69 74 65 25 3d  22 73 66 69 6c 65 5f 37  |Sprite%="sfile_7|
00014c20  66 35 3b 50 70 74 72 5f  68 61 6e 64 2c 31 32 2c  |f5;Pptr_hand,12,|
00014c30  38 3b 42 33 22 0d 0b 5c  19 20 20 20 20 20 20 c9  |8;B3"..\.      .|
00014c40  20 22 53 61 76 65 20 71  75 65 72 79 22 3a 0d 0b  | "Save query":..|
00014c50  5d 31 20 20 20 20 20 20  24 53 61 76 65 4e 61 6d  |]1      $SaveNam|
00014c60  65 25 3d 24 64 61 74 61  62 61 73 65 25 2b 22 2e  |e%=$database%+".|
00014c70  50 72 69 6e 74 52 65 73  2e 51 75 65 72 79 22 0d  |PrintRes.Query".|
00014c80  0b 5e 34 20 20 20 20 20  20 24 53 61 76 65 53 70  |.^4      $SaveSp|
00014c90  72 69 74 65 25 3d 22 73  66 69 6c 65 5f 37 66 34  |rite%="sfile_7f4|
00014ca0  3b 50 70 74 72 5f 68 61  6e 64 2c 31 32 2c 38 3b  |;Pptr_hand,12,8;|
00014cb0  42 33 22 0d 0b 5f 1d 20  20 20 20 20 20 c9 20 22  |B3".._.      . "|
00014cc0  53 61 76 65 20 73 65 6c  65 63 74 69 6f 6e 22 3a  |Save selection":|
00014cd0  0d 0b 60 35 20 20 20 20  20 20 24 53 61 76 65 4e  |..`5      $SaveN|
00014ce0  61 6d 65 25 3d 24 64 61  74 61 62 61 73 65 25 2b  |ame%=$database%+|
00014cf0  22 2e 50 72 69 6e 74 52  65 73 2e 53 65 6c 65 63  |".PrintRes.Selec|
00014d00  74 69 6f 6e 22 0d 0b 61  34 20 20 20 20 20 20 24  |tion"..a4      $|
00014d10  53 61 76 65 53 70 72 69  74 65 25 3d 22 73 66 69  |SaveSprite%="sfi|
00014d20  6c 65 5f 37 66 33 3b 50  70 74 72 5f 68 61 6e 64  |le_7f3;Pptr_hand|
00014d30  2c 31 32 2c 38 3b 42 33  22 0d 0b 62 09 20 20 20  |,12,8;B3"..b.   |
00014d40  20 cb 0d 0b 63 1c 20 20  20 20 73 61 76 65 66 75  | ...c.    savefu|
00014d50  6e 63 24 3d 63 68 6f 69  63 65 24 28 32 29 0d 0b  |nc$=choice$(2)..|
00014d60  64 1a 20 20 20 20 c9 20  22 4d 69 73 63 65 6c 6c  |d.    . "Miscell|
00014d70  61 6e 65 6f 75 73 22 3a  0d 0b 65 17 20 20 20 20  |aneous":..e.    |
00014d80  c8 8e 20 63 68 6f 69 63  65 24 28 32 29 20 ca 0d  |.. choice$(2) ..|
00014d90  0b 66 1b 20 20 20 20 20  20 c9 20 22 42 61 74 63  |.f.      . "Batc|
00014da0  68 20 64 65 6c 65 74 65  22 3a 0d 0b 67 43 20 20  |h delete":..gC  |
00014db0  20 20 20 20 f2 73 65 6c  65 63 74 28 6d 6f 76 65  |    .select(move|
00014dc0  57 25 2c 32 29 3a f2 64  65 73 65 6c 65 63 74 28  |W%,2):.deselect(|
00014dd0  6d 6f 76 65 57 25 2c 31  29 3a f2 64 65 73 65 6c  |moveW%,1):.desel|
00014de0  65 63 74 28 6d 6f 76 65  57 25 2c 30 29 0d 0b 68  |ect(moveW%,0)..h|
00014df0  2b 20 20 20 20 20 20 e7  20 ac 20 63 6f 6d 6d 6f  |+      . . commo|
00014e00  6e 25 20 8c 20 24 a4 74  65 78 74 28 6d 6f 76 65  |n% . $.text(move|
00014e10  57 25 2c 37 29 3d 22 22  0d 0b 69 16 20 20 20 20  |W%,7)=""..i.    |
00014e20  20 20 c9 20 22 43 6f 6c  6f 75 72 73 22 3a 0d 0b  |  . "Colours":..|
00014e30  6a 19 20 20 20 20 20 20  6e 63 6f 6c 25 28 29 3d  |j.      ncol%()=|
00014e40  66 63 6f 6c 25 28 29 0d  0b 6b 14 20 20 20 20 20  |fcol%()..k.     |
00014e50  20 e3 20 49 25 3d 30 20  b8 20 36 0d 0b 6c 2e 20  | . I%=0 . 6..l. |
00014e60  20 20 20 20 20 20 20 f2  73 65 74 5f 69 63 6f 6e  |       .set_icon|
00014e70  5f 63 6f 6c 73 28 63 6f  6c 57 25 2c 49 25 2c 6e  |_cols(colW%,I%,n|
00014e80  63 6f 6c 25 28 49 25 29  29 0d 0b 6d 0e 20 20 20  |col%(I%))..m.   |
00014e90  20 20 20 ed 20 49 25 0d  0b 6e 38 20 20 20 20 20  |   . I%..n8     |
00014ea0  20 21 62 6c 6f 63 6b 25  3d 63 6f 6c 57 25 3a c8  | !block%=colW%:.|
00014eb0  99 20 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |. "Wimp_GetWindo|
00014ec0  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
00014ed0  0b 6f 23 20 20 20 20 20  20 77 69 64 74 68 25 3d  |.o#      width%=|
00014ee0  62 6c 6f 63 6b 25 21 31  32 2d 62 6c 6f 63 6b 25  |block%!12-block%|
00014ef0  21 34 0d 0b 70 2f 20 20  20 20 20 20 62 6c 6f 63  |!4..p/      bloc|
00014f00  6b 25 21 34 3d 78 6d 69  6e 25 3a 62 6c 6f 63 6b  |k%!4=xmin%:block|
00014f10  25 21 31 32 3d 78 6d 69  6e 25 2b 77 69 64 74 68  |%!12=xmin%+width|
00014f20  25 0d 0b 71 30 20 20 20  20 20 20 62 6c 6f 63 6b  |%..q0      block|
00014f30  25 21 38 3d 79 6d 61 78  25 2d 68 65 69 67 68 74  |%!8=ymax%-height|
00014f40  25 3a 62 6c 6f 63 6b 25  21 31 36 3d 79 6d 61 78  |%:block%!16=ymax|
00014f50  25 0d 0b 72 09 20 20 20  20 cb 0d 0b 73 1a 20 20  |%..r.    ...s.  |
00014f60  20 20 c9 20 22 45 78 70  6f 72 74 20 73 75 62 73  |  . "Export subs|
00014f70  65 74 22 3a 0d 0b 74 41  20 20 20 20 65 78 70 6f  |et":..tA    expo|
00014f80  72 74 25 3d b9 3a 24 53  75 62 54 69 74 6c 65 25  |rt%=.:$SubTitle%|
00014f90  3d 22 45 78 70 6f 72 74  20 73 75 62 73 65 74 22  |="Export subset"|
00014fa0  3a 73 61 76 65 66 75 6e  63 24 3d 63 68 6f 69 63  |:savefunc$=choic|
00014fb0  65 24 28 31 29 0d 0b 75  56 20 20 20 20 24 53 75  |e$(1)..uV    $Su|
00014fc0  62 4e 61 6d 65 25 3d 24  64 61 74 61 62 61 73 65  |bName%=$database|
00014fd0  25 2b 22 2e 50 72 69 6e  74 4a 6f 62 73 2e 21 53  |%+".PrintJobs.!S|
00014fe0  75 62 73 65 74 22 3a e7  20 ac 20 63 6f 6d 6d 6f  |ubset":. . commo|
00014ff0  6e 25 20 8c 20 24 a4 74  65 78 74 28 73 61 76 65  |n% . $.text(save|
00015000  73 75 62 57 25 2c 30 29  3d 22 22 0d 0b 76 31 20  |subW%,0)=""..v1 |
00015010  20 20 20 24 53 75 62 53  70 72 69 74 65 25 3d 22  |   $SubSprite%="|
00015020  73 6e 65 77 5f 61 70 70  6c 3b 50 70 74 72 5f 68  |snew_appl;Pptr_h|
00015030  61 6e 64 2c 31 32 2c 38  3b 42 33 22 0d 0b 77 17  |and,12,8;B3"..w.|
00015040  20 20 20 20 c9 20 22 45  78 70 6f 72 74 20 43 53  |    . "Export CS|
00015050  56 22 3a 0d 0b 78 39 20  20 20 20 24 53 75 62 54  |V":..x9    $SubT|
00015060  69 74 6c 65 25 3d 22 45  78 70 6f 72 74 20 43 53  |itle%="Export CS|
00015070  56 20 66 69 6c 65 22 3a  73 61 76 65 66 75 6e 63  |V file":savefunc|
00015080  24 3d 63 68 6f 69 63 65  24 28 31 29 0d 0b 79 3a  |$=choice$(1)..y:|
00015090  20 20 20 20 e7 20 73 65  70 24 3d 22 2c 22 20 8c  |    . sep$="," .|
000150a0  20 74 24 3d 22 64 66 65  22 3a 66 24 3d 22 43 53  | t$="dfe":f$="CS|
000150b0  56 22 20 8b 20 74 24 3d  22 66 66 66 22 3a 66 24  |V" . t$="fff":f$|
000150c0  3d 22 53 65 70 22 0d 0b  7a 59 20 20 20 20 24 53  |="Sep"..zY    $S|
000150d0  75 62 4e 61 6d 65 25 3d  24 64 61 74 61 62 61 73  |ubName%=$databas|
000150e0  65 25 2b 22 2e 50 72 69  6e 74 4a 6f 62 73 2e 22  |e%+".PrintJobs."|
000150f0  2b 66 24 2b 22 66 69 6c  65 22 3a e7 20 ac 20 63  |+f$+"file":. . c|
00015100  6f 6d 6d 6f 6e 25 20 8c  20 24 a4 74 65 78 74 28  |ommon% . $.text(|
00015110  73 61 76 65 73 75 62 57  25 2c 30 29 3d 22 22 0d  |savesubW%,0)="".|
00015120  0b 7b 34 20 20 20 20 24  53 75 62 53 70 72 69 74  |.{4    $SubSprit|
00015130  65 25 3d 22 73 66 69 6c  65 5f 22 2b 74 24 2b 22  |e%="sfile_"+t$+"|
00015140  3b 50 70 74 72 5f 68 61  6e 64 2c 31 32 2c 38 3b  |;Pptr_hand,12,8;|
00015150  42 33 22 0d 0b 7c 07 20  20 cb 0d 0b 7d 11 20 20  |B3"..|.  ...}.  |
00015160  c9 20 6d 65 6e 75 25 28  39 29 3a 0d 0b 7e 15 20  |. menu%(9):..~. |
00015170  20 c8 8e 20 63 68 6f 69  63 65 24 28 31 29 20 ca  | .. choice$(1) .|
00015180  0d 0b 7f 1b 20 20 20 20  c9 20 22 53 61 76 65 20  |....    . "Save |
00015190  66 6f 72 6d 20 66 69 6c  65 22 3a 0d 0b 80 25 20  |form file":...% |
000151a0  20 20 20 24 53 61 76 65  4e 61 6d 65 25 3d 24 64  |   $SaveName%=$d|
000151b0  61 74 61 62 61 73 65 25  2b 22 2e 46 6f 72 6d 22  |atabase%+".Form"|
000151c0  0d 0b 81 32 20 20 20 20  24 53 61 76 65 53 70 72  |...2    $SaveSpr|
000151d0  69 74 65 25 3d 22 73 66  69 6c 65 5f 37 66 32 3b  |ite%="sfile_7f2;|
000151e0  50 70 74 72 5f 68 61 6e  64 2c 31 32 2c 38 3b 42  |Pptr_hand,12,8;B|
000151f0  33 22 0d 0b 82 1c 20 20  20 20 73 61 76 65 66 75  |3"....    savefu|
00015200  6e 63 24 3d 63 68 6f 69  63 65 24 28 31 29 0d 0b  |nc$=choice$(1)..|
00015210  83 07 20 20 cb 0d 0b 84  12 20 20 c9 20 6d 65 6e  |..  .....  . men|
00015220  75 25 28 31 37 29 3a 0d  0b 85 15 20 20 c8 8e 20  |u%(17):....  .. |
00015230  63 68 6f 69 63 65 24 28  31 29 20 ca 0d 0b 86 11  |choice$(1) .....|
00015240  20 20 20 20 c9 20 22 53  61 76 65 22 3a 0d 0b 87  |    . "Save":...|
00015250  26 20 20 20 20 54 25 3d  a4 74 61 62 6c 65 5f 6e  |&    T%=.table_n|
00015260  75 6d 62 65 72 28 24 6d  65 6e 75 68 61 6e 64 6c  |umber($menuhandl|
00015270  65 25 29 0d 0b 88 36 20  20 20 20 24 53 61 76 65  |e%)...6    $Save|
00015280  4e 61 6d 65 25 3d 24 64  61 74 61 62 61 73 65 25  |Name%=$database%|
00015290  2b 22 2e 56 61 6c 54 61  62 6c 65 73 2e 22 2b 74  |+".ValTables."+t|
000152a0  61 62 6c 65 24 28 54 25  29 0d 0b 89 32 20 20 20  |able$(T%)...2   |
000152b0  20 24 53 61 76 65 53 70  72 69 74 65 25 3d 22 73  | $SaveSprite%="s|
000152c0  66 69 6c 65 5f 37 66 31  3b 50 70 74 72 5f 68 61  |file_7f1;Pptr_ha|
000152d0  6e 64 2c 31 32 2c 38 3b  42 33 22 0d 0b 8a 1e 20  |nd,12,8;B3".... |
000152e0  20 20 20 73 61 76 65 66  75 6e 63 24 3d 22 53 61  |   savefunc$="Sa|
000152f0  76 65 20 74 61 62 6c 65  22 0d 0b 8b 07 20 20 cb  |ve table"....  .|
00015300  0d 0b 8c 12 20 20 c9 20  6d 65 6e 75 25 28 31 38  |....  . menu%(18|
00015310  29 3a 0d 0b 8d 15 20 20  c8 8e 20 63 68 6f 69 63  |):....  .. choic|
00015320  65 24 28 31 29 20 ca 0d  0b 8e 19 20 20 20 20 c9  |e$(1) .....    .|
00015330  20 22 53 61 76 65 20 61  73 20 74 65 78 74 22 3a  | "Save as text":|
00015340  0d 0b 8f 2f 20 20 20 20  24 53 61 76 65 4e 61 6d  |.../    $SaveNam|
00015350  65 25 3d 24 64 61 74 61  62 61 73 65 25 2b 22 2e  |e%=$database%+".|
00015360  50 72 69 6e 74 4a 6f 62  73 2e 4c 69 73 74 22 0d  |PrintJobs.List".|
00015370  0b 90 32 20 20 20 20 24  53 61 76 65 53 70 72 69  |..2    $SaveSpri|
00015380  74 65 25 3d 22 73 66 69  6c 65 5f 66 66 66 3b 50  |te%="sfile_fff;P|
00015390  70 74 72 5f 68 61 6e 64  2c 31 32 2c 38 3b 42 33  |ptr_hand,12,8;B3|
000153a0  22 0d 0b 91 07 20 20 cb  0d 0b 92 1a 20 20 73 61  |"....  .....  sa|
000153b0  76 65 66 75 6e 63 24 3d  63 68 6f 69 63 65 24 28  |vefunc$=choice$(|
000153c0  31 29 0d 0b 93 05 cb 0d  0b 94 30 c8 99 20 22 57  |1)........0.. "W|
000153d0  69 6d 70 5f 43 72 65 61  74 65 53 75 62 4d 65 6e  |imp_CreateSubMen|
000153e0  75 22 2c 2c 68 61 6e 64  6c 65 25 2c 78 6d 69 6e  |u",,handle%,xmin|
000153f0  25 2c 79 6d 61 78 25 0d  0b 95 05 e1 0d 0b 96 05  |%,ymax%.........|
00015400  3a 0d 0b 97 1c dd 20 f2  68 65 6c 70 5f 6d 65 73  |:..... .help_mes|
00015410  73 61 67 65 28 77 69 25  2c 69 63 25 29 0d 0b 98  |sage(wi%,ic%)...|
00015420  0c c8 8e 20 77 69 25 20  ca 0d 0b 99 19 20 20 c9  |... wi% .....  .|
00015430  20 2d 32 3a f2 73 65 6e  64 5f 68 65 6c 70 28 37  | -2:.send_help(7|
00015440  35 29 0d 0b 9a 1d 20 20  c9 20 69 6e 66 6f 57 25  |5)....  . infoW%|
00015450  3a f2 73 65 6e 64 5f 68  65 6c 70 28 37 36 29 0d  |:.send_help(76).|
00015460  0b 9b 1d 20 20 c9 20 6d  69 73 63 57 25 3a f2 73  |...  . miscW%:.s|
00015470  65 6e 64 5f 68 65 6c 70  28 37 37 29 0d 0b 9c 0f  |end_help(77)....|
00015480  20 20 c9 20 6d 61 69 6e  57 25 3a 0d 0b 9d 1c 20  |  . mainW%:.... |
00015490  20 e7 20 ac 20 64 65 73  69 67 6e 25 20 80 20 69  | . . design% . i|
000154a0  63 25 3e 3d 30 20 8c 0d  0b 9e 16 20 20 20 20 46  |c%>=0 .....    F|
000154b0  25 3d 28 69 63 25 2b 31  29 20 81 20 32 0d 0b 9f  |%=(ic%+1) . 2...|
000154c0  1a 20 20 20 20 c8 8e 20  63 68 61 72 74 79 70 65  |.    .. chartype|
000154d0  25 28 46 25 29 20 ca 0d  0b a0 41 20 20 20 20 20  |%(F%) ....A     |
000154e0  20 c9 20 30 2c 31 2c 32  2c 33 2c 34 2c 35 2c 36  | . 0,1,2,3,4,5,6|
000154f0  2c 37 2c 38 2c 33 36 2c  33 39 2c 34 31 2c 34 32  |,7,8,36,39,41,42|
00015500  2c 34 33 2c 34 34 2c 34  35 3a f2 73 65 6e 64 5f  |,43,44,45:.send_|
00015510  68 65 6c 70 28 37 38 29  0d 0b a1 2b 20 20 20 20  |help(78)...+    |
00015520  20 20 7f 3a c8 99 20 22  49 6e 74 65 72 66 61 63  |  .:.. "Interfac|
00015530  65 5f 53 65 6e 64 48 65  6c 70 22 2c 2c 62 6c 6f  |e_SendHelp",,blo|
00015540  63 6b 25 0d 0b a2 09 20  20 20 20 cb 0d 0b a3 07  |ck%....    .....|
00015550  20 20 cd 0d 0b a4 20 20  20 c9 20 70 73 65 6c 65  |  ....   . psele|
00015560  63 74 57 25 3a f2 73 65  6e 64 5f 68 65 6c 70 28  |ctW%:.send_help(|
00015570  37 39 29 0d 0b a5 1f 20  20 c9 20 72 65 6c 61 74  |79)....  . relat|
00015580  65 57 25 3a f2 73 65 6e  64 5f 68 65 6c 70 28 38  |eW%:.send_help(8|
00015590  30 29 0d 0b a6 1d 20 20  c9 20 6c 69 73 74 57 25  |0)....  . listW%|
000155a0  3a f2 73 65 6e 64 5f 68  65 6c 70 28 38 31 29 0d  |:.send_help(81).|
000155b0  0b a7 20 20 20 c9 20 64  61 74 61 64 69 63 57 25  |..   . datadicW%|
000155c0  3a f2 73 65 6e 64 5f 68  65 6c 70 28 38 32 29 0d  |:.send_help(82).|
000155d0  0b a8 1d 20 20 c9 20 73  61 76 65 57 25 3a f2 73  |...  . saveW%:.s|
000155e0  65 6e 64 5f 68 65 6c 70  28 38 33 29 0d 0b a9 20  |end_help(83)... |
000155f0  20 20 c9 20 73 61 76 65  73 75 62 57 25 3a f2 73  |  . savesubW%:.s|
00015600  65 6e 64 5f 68 65 6c 70  28 38 34 29 0d 0b aa 1f  |end_help(84)....|
00015610  20 20 c9 20 61 63 63 65  73 73 57 25 3a f2 73 65  |  . accessW%:.se|
00015620  6e 64 5f 68 65 6c 70 28  38 35 29 0d 0b ab 1e 20  |nd_help(85).... |
00015630  20 c9 20 6d 65 72 67 65  57 25 3a f2 73 65 6e 64  | . mergeW%:.send|
00015640  5f 68 65 6c 70 28 38 36  29 0d 0b ac 27 20 20 7f  |_help(86)...'  .|
00015650  3a c8 99 20 22 49 6e 74  65 72 66 61 63 65 5f 53  |:.. "Interface_S|
00015660  65 6e 64 48 65 6c 70 22  2c 2c 62 6c 6f 63 6b 25  |endHelp",,block%|
00015670  0d 0b ad 05 cb 0d 0b ae  05 e1 0d 0b af 05 3a 0d  |..............:.|
00015680  0b b0 14 dd 20 f2 73 65  6e 64 5f 68 65 6c 70 28  |.... .send_help(|
00015690  4d 25 29 0d 0b b1 0f 21  62 6c 6f 63 6b 25 3d 32  |M%)....!block%=2|
000156a0  35 36 0d 0b b2 12 62 6c  6f 63 6b 25 21 31 32 3d  |56....block%!12=|
000156b0  72 65 66 25 0d 0b b3 12  62 6c 6f 63 6b 25 21 31  |ref%....block%!1|
000156c0  36 3d 26 35 30 33 0d 0b  b4 19 24 28 62 6c 6f 63  |6=&503....$(bloc|
000156d0  6b 25 2b 32 30 29 3d a4  6d 73 67 28 4d 25 29 0d  |k%+20)=.msg(M%).|
000156e0  0b b5 2c c8 99 20 22 57  69 6d 70 5f 53 65 6e 64  |..,.. "Wimp_Send|
000156f0  4d 65 73 73 61 67 65 22  2c 31 37 2c 62 6c 6f 63  |Message",17,bloc|
00015700  6b 25 2c 62 6c 6f 63 6b  25 21 34 0d 0b b6 05 e1  |k%,block%!4.....|
00015710  0d 0b b7 05 3a 0d 0b b8  05 3a 0d 0b b9 4a f4 20  |....:....:...J. |
00015720  46 69 6c 65 20 73 61 76  69 6e 67 20 2d 2d 2d 2d  |File saving ----|
00015730  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00015760  2d 2d 2d 2d 0d 0b ba 05  3a 0d 0b bb 16 dd 20 f2  |----....:..... .|
00015770  73 61 76 65 5f 61 6c 6c  5f 74 61 62 6c 65 73 0d  |save_all_tables.|
00015780  0b bc 08 ea 20 54 25 0d  0b bd 15 c8 99 20 22 48  |.... T%...... "H|
00015790  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 0b be 15  |ourglass_On"....|
000157a0  c8 95 20 54 25 3c 3d 4c  61 73 74 54 61 62 6c 65  |.. T%<=LastTable|
000157b0  25 0d 0b bf 2c 20 20 66  24 3d 24 64 61 74 61 62  |%...,  f$=$datab|
000157c0  61 73 65 25 2b 22 2e 56  61 6c 54 61 62 6c 65 73  |ase%+".ValTables|
000157d0  2e 22 2b 74 61 62 6c 65  24 28 54 25 29 0d 0b c0  |."+table$(T%)...|
000157e0  45 20 20 24 54 61 62 54  69 74 6c 65 25 3d a4 74  |E  $TabTitle%=.t|
000157f0  61 62 6c 65 5f 69 6e 66  6f 28 54 25 2c 52 6f 77  |able_info(T%,Row|
00015800  73 25 2c 54 61 62 46 69  65 6c 64 73 25 2c 52 65  |s%,TabFields%,Re|
00015810  63 25 2c 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |c%,tabfieldlen%(|
00015820  29 29 0d 0b c1 37 20 20  53 74 61 72 74 25 3d 21  |))...7  Start%=!|
00015830  74 61 62 61 6e 63 68 6f  72 25 28 54 25 29 3a 45  |tabanchor%(T%):E|
00015840  6e 64 25 3d 53 74 61 72  74 25 2b 31 36 30 2b 52  |nd%=Start%+160+R|
00015850  6f 77 73 25 2a 52 65 63  25 0d 0b c2 20 20 20 f2  |ows%*Rec%...   .|
00015860  73 61 76 65 28 66 24 2c  26 37 66 31 2c 53 74 61  |save(f$,&7f1,Sta|
00015870  72 74 25 2c 45 6e 64 25  29 0d 0b c3 0b 20 20 54  |rt%,End%)....  T|
00015880  25 2b 3d 31 0d 0b c4 37  20 20 c8 99 20 22 48 6f  |%+=1...7  .. "Ho|
00015890  75 72 67 6c 61 73 73 5f  50 65 72 63 65 6e 74 61  |urglass_Percenta|
000158a0  67 65 22 2c 54 25 2a 31  30 30 20 81 20 28 4c 61  |ge",T%*100 . (La|
000158b0  73 74 54 61 62 6c 65 25  2b 31 29 0d 0b c5 05 ce  |stTable%+1).....|
000158c0  0d 0b c6 16 c8 99 20 22  48 6f 75 72 67 6c 61 73  |...... "Hourglas|
000158d0  73 5f 4f 66 66 22 0d 0b  c7 05 e1 0d 0b c8 05 3a  |s_Off".........:|
000158e0  0d 0b c9 13 dd 20 f2 73  61 76 65 5f 6f 70 74 69  |..... .save_opti|
000158f0  6f 6e 73 0d 0b ca 0e ea  20 46 2c 49 25 2c 69 63  |ons..... F,I%,ic|
00015900  25 0d 0b cb 0b 46 3d ae  28 66 24 29 0d 0b cc 08  |%....F=.(f$)....|
00015910  f7 20 2b 30 0d 0b cd 0f  e3 20 49 25 3d 31 20 b8  |. +0..... I%=1 .|
00015920  20 31 33 0d 0b ce 0b 20  20 f3 20 69 63 25 0d 0b  | 13....  . ic%..|
00015930  cf 20 20 20 f1 23 46 2c  a4 73 65 6c 65 63 74 65  |.   .#F,.selecte|
00015940  64 28 70 72 69 6e 74 57  25 2c 69 63 25 29 0d 0b  |d(printW%,ic%)..|
00015950  d0 08 ed 20 49 25 0d 0b  d1 0e e3 20 49 25 3d 31  |... I%..... I%=1|
00015960  20 b8 20 39 0d 0b d2 0b  20 20 f3 20 69 63 25 0d  | . 9....  . ic%.|
00015970  0b d3 1d 20 20 f1 23 46  2c 24 a4 74 65 78 74 28  |...  .#F,$.text(|
00015980  70 72 69 6e 74 57 25 2c  69 63 25 29 0d 0b d4 08  |printW%,ic%)....|
00015990  ed 20 49 25 0d 0b d5 0e  e3 20 49 25 3d 31 20 b8  |. I%..... I%=1 .|
000159a0  20 37 0d 0b d6 0b 20 20  f3 20 69 63 25 0d 0b d7  | 7....  . ic%...|
000159b0  20 20 20 f1 23 46 2c a4  73 65 6c 65 63 74 65 64  |   .#F,.selected|
000159c0  28 70 72 69 6e 74 57 25  2c 69 63 25 29 0d 0b d8  |(printW%,ic%)...|
000159d0  08 ed 20 49 25 0d 0b d9  0e e3 20 49 25 3d 31 20  |.. I%..... I%=1 |
000159e0  b8 20 33 0d 0b da 0b 20  20 f3 20 69 63 25 0d 0b  |. 3....  . ic%..|
000159f0  db 20 20 20 f1 23 46 2c  a4 73 65 6c 65 63 74 65  |.   .#F,.selecte|
00015a00  64 28 6c 61 62 65 6c 57  25 2c 69 63 25 29 0d 0b  |d(labelW%,ic%)..|
00015a10  dc 08 ed 20 49 25 0d 0b  dd 0e e3 20 49 25 3d 31  |... I%..... I%=1|
00015a20  20 b8 20 34 0d 0b de 0b  20 20 f3 20 69 63 25 0d  | . 4....  . ic%.|
00015a30  0b df 1d 20 20 f1 23 46  2c 24 a4 74 65 78 74 28  |...  .#F,$.text(|
00015a40  6c 61 62 65 6c 57 25 2c  69 63 25 29 0d 0b e0 08  |labelW%,ic%)....|
00015a50  ed 20 49 25 0d 0b e1 0e  e3 20 49 25 3d 31 20 b8  |. I%..... I%=1 .|
00015a60  20 33 0d 0b e2 0b 20 20  f3 20 69 63 25 0d 0b e3  | 3....  . ic%...|
00015a70  20 20 20 f1 23 46 2c a4  73 65 6c 65 63 74 65 64  |   .#F,.selected|
00015a80  28 6c 61 62 65 6c 57 25  2c 69 63 25 29 0d 0b e4  |(labelW%,ic%)...|
00015a90  08 ed 20 49 25 0d 0b e5  12 f2 63 6c 6f 73 65 5f  |.. I%.....close_|
00015aa0  66 69 6c 65 28 46 29 0d  0b e6 1b c8 99 20 22 4f  |file(F)...... "O|
00015ab0  53 5f 46 69 6c 65 22 2c  31 38 2c 66 24 2c 26 37  |S_File",18,f$,&7|
00015ac0  66 35 0d 0b e7 05 3a 0d  0b e8 38 dc 20 31 2c 32  |f5....:...8. 1,2|
00015ad0  2c 34 2c 36 2c 37 2c 38  2c 32 33 2c 32 34 2c 32  |,4,6,7,8,23,24,2|
00015ae0  35 2c 32 36 2c 33 38 2c  33 39 2c 34 31 3a 52 45  |5,26,38,39,41:RE|
00015af0  4d 20 52 61 64 69 6f 20  62 75 74 74 6f 6e 73 0d  |M Radio buttons.|
00015b00  0b e9 34 dc 20 31 35 2c  31 36 2c 31 37 2c 31 38  |..4. 15,16,17,18|
00015b10  2c 33 30 2c 33 32 2c 33  34 2c 34 33 2c 34 35 3a  |,30,32,34,43,45:|
00015b20  52 45 4d 20 57 72 69 74  61 62 6c 65 20 66 69 65  |REM Writable fie|
00015b30  6c 64 73 0d 0b ea 2e dc  20 31 30 2c 31 31 2c 31  |lds..... 10,11,1|
00015b40  32 2c 31 39 2c 32 39 2c  34 30 2c 34 32 3a 52 45  |2,19,29,40,42:RE|
00015b50  4d 20 4f 70 74 69 6f 6e  20 73 77 69 74 63 68 65  |M Option switche|
00015b60  73 0d 0b eb 20 f4 20 49  6e 20 4c 61 62 65 6c 20  |s... . In Label |
00015b70  44 65 66 69 6e 69 74 69  6f 6e 20 77 69 6e 64 6f  |Definition windo|
00015b80  77 0d 0b ec 1d dc 20 30  2c 31 2c 32 3a 52 45 4d  |w..... 0,1,2:REM|
00015b90  20 52 61 64 69 6f 20 62  75 74 74 6f 6e 73 0d 0b  | Radio buttons..|
00015ba0  ed 24 dc 20 34 2c 36 2c  31 30 2c 31 32 3a 52 45  |.$. 4,6,10,12:RE|
00015bb0  4d 20 57 72 69 74 65 61  62 6c 65 20 66 69 65 6c  |M Writeable fiel|
00015bc0  64 73 0d 0b ee 22 dc 20  31 31 2c 31 33 2c 31 36  |ds...". 11,13,16|
00015bd0  3a 52 45 4d 20 4f 70 74  69 6f 6e 20 73 77 69 74  |:REM Option swit|
00015be0  63 68 65 73 0d 0b ef 05  3a 0d 0b f0 05 e1 0d 0b  |ches....:.......|
00015bf0  f1 05 3a 0d 0b f2 1f dd  20 f2 73 61 76 65 28 66  |..:..... .save(f|
00015c00  24 2c 66 74 25 2c 73 74  61 72 74 25 2c 65 6e 64  |$,ft%,start%,end|
00015c10  25 29 0d 0b f3 0c c8 8e  20 66 74 25 20 ca 0d 0b  |%)...... ft% ...|
00015c20  f4 0a 20 20 c9 20 30 3a  0d 0b f5 15 20 20 6c 65  |..  . 0:....  le|
00015c30  61 66 24 3d a4 6c 65 61  66 28 66 24 29 0d 0b f6  |af$=.leaf(f$)...|
00015c40  44 20 20 e7 20 c0 6c 65  61 66 24 2c 31 29 3c 3e  |D  . .leaf$,1)<>|
00015c50  22 21 22 20 8c 20 6c 65  61 66 24 3d 22 21 22 2b  |"!" . leaf$="!"+|
00015c60  c0 6c 65 61 66 24 2c 39  29 3a 66 24 3d 64 62 61  |.leaf$,9):f$=dba|
00015c70  73 65 70 61 74 68 24 2b  22 2e 22 2b 6c 65 61 66  |sepath$+"."+leaf|
00015c80  24 0d 0b f7 17 20 20 c8  99 20 22 4f 53 5f 46 69  |$....  .. "OS_Fi|
00015c90  6c 65 22 2c 38 2c 66 24  0d 0b f8 22 20 20 c8 99  |le",8,f$..."  ..|
00015ca0  20 22 4f 53 5f 46 69 6c  65 22 2c 38 2c 66 24 2b  | "OS_File",8,f$+|
00015cb0  22 2e 49 6e 64 69 63 65  73 22 0d 0b f9 24 20 20  |".Indices"...$  |
00015cc0  c8 99 20 22 4f 53 5f 46  69 6c 65 22 2c 38 2c 66  |.. "OS_File",8,f|
00015cd0  24 2b 22 2e 56 61 6c 54  61 62 6c 65 73 22 0d 0b  |$+".ValTables"..|
00015ce0  fa 23 20 20 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |.#  .. "OS_File"|
00015cf0  2c 38 2c 66 24 2b 22 2e  50 72 69 6e 74 52 65 73  |,8,f$+".PrintRes|
00015d00  22 0d 0b fb 24 20 20 c8  99 20 22 4f 53 5f 46 69  |"...$  .. "OS_Fi|
00015d10  6c 65 22 2c 38 2c 66 24  2b 22 2e 50 72 69 6e 74  |le",8,f$+".Print|
00015d20  4a 6f 62 73 22 0d 0b fc  49 20 20 c8 99 20 22 4f  |Jobs"...I  .. "O|
00015d30  53 5f 43 4c 49 22 2c 22  43 6f 70 79 20 3c 50 42  |S_CLI","Copy <PB|
00015d40  61 73 65 24 44 69 72 3e  2e 52 65 73 6f 75 72 63  |ase$Dir>.Resourc|
00015d50  65 73 2e 54 65 6d 70 2e  21 52 75 6e 20 22 2b 66  |es.Temp.!Run "+f|
00015d60  24 2b 22 2e 21 52 75 6e  20 7e 43 7e 56 22 0d 0b  |$+".!Run ~C~V"..|
00015d70  fd 4b 20 20 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |.K  .. "OS_CLI",|
00015d80  22 43 6f 70 79 20 3c 50  42 61 73 65 24 44 69 72  |"Copy <PBase$Dir|
00015d90  3e 2e 52 65 73 6f 75 72  63 65 73 2e 54 65 6d 70  |>.Resources.Temp|
00015da0  2e 21 42 6f 6f 74 20 22  2b 66 24 2b 22 2e 21 42  |.!Boot "+f$+".!B|
00015db0  6f 6f 74 20 7e 43 7e 56  22 0d 0b fe 48 20 20 c8  |oot ~C~V"...H  .|
00015dc0  99 20 22 4f 53 5f 43 4c  49 22 2c 22 43 6f 70 79  |. "OS_CLI","Copy|
00015dd0  20 3c 50 42 61 73 65 24  44 69 72 3e 2e 52 65 73  | <PBase$Dir>.Res|
00015de0  6f 75 72 63 65 73 2e 63  68 6b 73 70 72 20 22 2b  |ources.chkspr "+|
00015df0  66 24 2b 22 2e 63 68 6b  73 70 72 20 7e 43 7e 56  |f$+".chkspr ~C~V|
00015e00  22 0d 0b ff 4a 20 20 c8  99 20 22 4f 53 5f 43 4c  |"...J  .. "OS_CL|
00015e10  49 22 2c 22 43 6f 70 79  20 3c 50 42 61 73 65 24  |I","Copy <PBase$|
00015e20  44 69 72 3e 2e 52 65 73  6f 75 72 63 65 73 2e 43  |Dir>.Resources.C|
00015e30  6f 6c 6f 75 72 73 20 22  2b 66 24 2b 22 2e 43 6f  |olours "+f$+".Co|
00015e40  6c 6f 75 72 73 20 7e 43  7e 56 22 0d 0c 00 2d 20  |lours ~C~V"...- |
00015e50  20 f2 63 6f 70 79 5f 64  61 74 61 62 61 73 65 5f  | .copy_database_|
00015e60  73 70 72 69 74 65 66 69  6c 65 28 66 24 2c a4 6c  |spritefile(f$,.l|
00015e70  65 61 66 28 66 24 29 29  0d 0c 01 0c 20 20 c8 8e  |eaf(f$))....  ..|
00015e80  20 b9 20 ca 0d 0c 02 24  20 20 20 20 c9 20 65 78  | . ....$    . ex|
00015e90  70 6f 72 74 25 3a f2 65  78 70 6f 72 74 5f 73 75  |port%:.export_su|
00015ea0  62 73 65 74 28 66 24 29  0d 0c 03 13 20 20 20 20  |bset(f$)....    |
00015eb0  c9 20 63 73 76 63 6f 6e  76 25 3a 0d 0c 04 1a 20  |. csvconv%:.... |
00015ec0  20 20 20 e7 20 21 66 6f  72 6d 61 6e 63 68 6f 72  |   . !formanchor|
00015ed0  25 3d 30 20 8c 0d 0c 05  34 20 20 20 20 20 20 f2  |%=0 ....4      .|
00015ee0  65 78 74 65 6e 64 5f 6e  61 6d 65 64 5f 73 6c 69  |extend_named_sli|
00015ef0  64 69 6e 67 5f 62 6c 6f  63 6b 28 66 6f 72 6d 61  |ding_block(forma|
00015f00  6e 63 68 6f 72 25 2c 30  29 0d 0c 06 1c 20 20 20  |nchor%,0)....   |
00015f10  20 20 20 46 70 74 72 25  3d 21 66 6f 72 6d 61 6e  |   Fptr%=!forman|
00015f20  63 68 6f 72 25 0d 0c 07  22 20 20 20 20 20 20 66  |chor%..."      f|
00015f30  69 65 6c 64 73 25 3d 30  3a 46 69 65 6c 64 6e 75  |ields%=0:Fieldnu|
00015f40  6d 62 65 72 25 3d 30 0d  0c 08 22 20 20 20 20 20  |mber%=0..."     |
00015f50  20 66 69 65 6c 64 73 25  3d a4 67 65 74 5f 66 6f  | fields%=.get_fo|
00015f60  72 6d 28 46 70 74 72 25  29 0d 0c 09 09 20 20 20  |rm(Fptr%)....   |
00015f70  20 cd 0d 0c 0a 0a 20 20  20 20 7f 3a 0d 0c 0b 1a  | .....    .:....|
00015f80  20 20 20 20 f2 6c 69 74  28 6d 65 6e 75 25 28 30  |    .lit(menu%(0|
00015f90  29 2c 31 2c a3 29 0d 0c  0c 16 20 20 20 20 f2 67  |),1,.)....    .g|
00015fa0  65 74 5f 69 74 5f 69 6e  28 66 24 29 0d 0c 0d 1c  |et_it_in(f$)....|
00015fb0  20 20 20 20 f2 6f 70 65  6e 5f 77 69 6e 64 6f 77  |    .open_window|
00015fc0  28 6d 61 69 6e 57 25 29  0d 0c 0e 1a 20 20 20 20  |(mainW%)....    |
00015fd0  e7 20 21 66 6f 72 6d 61  6e 63 68 6f 72 25 3d 30  |. !formanchor%=0|
00015fe0  20 8c 0d 0c 0f 34 20 20  20 20 20 20 f2 65 78 74  | ....4      .ext|
00015ff0  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
00016000  67 5f 62 6c 6f 63 6b 28  66 6f 72 6d 61 6e 63 68  |g_block(formanch|
00016010  6f 72 25 2c 30 29 0d 0c  10 1c 20 20 20 20 20 20  |or%,0)....      |
00016020  46 70 74 72 25 3d 21 66  6f 72 6d 61 6e 63 68 6f  |Fptr%=!formancho|
00016030  72 25 0d 0c 11 22 20 20  20 20 20 20 66 69 65 6c  |r%..."      fiel|
00016040  64 73 25 3d 30 3a 46 69  65 6c 64 6e 75 6d 62 65  |ds%=0:Fieldnumbe|
00016050  72 25 3d 30 0d 0c 12 09  20 20 20 20 cd 0d 0c 13  |r%=0....    ....|
00016060  07 20 20 cb 0d 0c 14 0a  20 20 c9 20 31 3a 0d 0c  |.  .....  . 1:..|
00016070  15 1d 20 20 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |..  .. "OS_CLI",|
00016080  22 43 44 69 72 20 22 2b  66 24 3a 0d 0c 16 11 20  |"CDir "+f$:.... |
00016090  20 6c 6f 67 70 61 74 68  24 3d 66 24 0d 0c 17 1b  | logpath$=f$....|
000160a0  20 20 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |  .close_window(|
000160b0  73 61 76 65 57 25 29 0d  0c 18 32 20 20 c9 20 26  |saveW%)...2  . &|
000160c0  37 66 32 3a f2 73 61 76  65 5f 66 6f 72 6d 28 66  |7f2:.save_form(f|
000160d0  24 29 3a f2 67 65 74 5f  69 74 5f 69 6e 28 24 64  |$):.get_it_in($d|
000160e0  61 74 61 62 61 73 65 25  29 0d 0c 19 1a 20 20 c9  |atabase%)....  .|
000160f0  20 26 37 66 35 3a f2 73  61 76 65 5f 6f 70 74 69  | &7f5:.save_opti|
00016100  6f 6e 73 0d 0c 1a 1b 20  20 c9 20 26 64 66 65 3a  |ons....  . &dfe:|
00016110  f2 77 72 69 74 65 5f 63  73 76 28 66 24 29 0d 0c  |.write_csv(f$)..|
00016120  1b 08 20 20 7f 3a 0d 0c  1c 0c 20 20 c8 8e 20 b9  |..  .:....  .. .|
00016130  20 ca 0d 0c 1d 14 20 20  20 20 c9 20 73 74 61 72  | .....    . star|
00016140  74 6c 6f 67 25 3a 0d 0c  1e 12 20 20 20 20 f2 63  |tlog%:....    .c|
00016150  6c 6f 73 65 5f 6c 6f 67  0d 0c 1f 13 20 20 20 20  |lose_log....    |
00016160  6c 6f 67 70 61 74 68 24  3d 66 24 0d 0c 20 1e 20  |logpath$=f$.. . |
00016170  20 20 20 6c 6f 67 68 61  6e 64 6c 65 25 3d ae 28  |   loghandle%=.(|
00016180  6c 6f 67 70 61 74 68 24  29 0d 0c 21 1f 20 20 20  |logpath$)..!.   |
00016190  20 d5 23 6c 6f 67 68 61  6e 64 6c 65 25 2c 24 64  | .#loghandle%,$d|
000161a0  61 74 61 62 61 73 65 25  0d 0c 22 33 20 20 20 20  |atabase%.."3    |
000161b0  d5 23 6c 6f 67 68 61 6e  64 6c 65 25 2c 22 50 61  |.#loghandle%,"Pa|
000161c0  73 73 77 6f 72 64 20 6c  65 76 65 6c 20 75 73 65  |ssword level use|
000161d0  64 3a 20 22 2b c3 28 70  77 25 29 0d 0c 23 26 20  |d: "+.(pw%)..#& |
000161e0  20 20 20 d5 23 6c 6f 67  68 61 6e 64 6c 65 25 2c  |   .#loghandle%,|
000161f0  22 4c 6f 67 20 73 74 61  72 74 65 64 20 22 2b 91  |"Log started "+.|
00016200  24 0d 0c 24 1d 20 20 20  20 d5 23 6c 6f 67 68 61  |$..$.    .#logha|
00016210  6e 64 6c 65 25 2c c4 33  36 2c 22 3d 22 29 0d 0c  |ndle%,.36,"=")..|
00016220  25 13 20 20 20 20 73 74  61 72 74 6c 6f 67 25 3d  |%.    startlog%=|
00016230  a3 0d 0c 26 16 20 20 20  20 c9 20 73 61 76 65 74  |...&.    . savet|
00016240  6f 66 69 6c 65 25 3a 0d  0c 27 19 20 20 20 20 74  |ofile%:..'.    t|
00016250  65 78 74 68 61 6e 64 6c  65 25 3d ae 28 66 24 29  |exthandle%=.(f$)|
00016260  0d 0c 28 22 20 20 20 20  f2 64 6f 5f 69 74 28 53  |..("    .do_it(S|
00016270  65 61 72 63 68 24 2c 64  69 73 70 6c 61 79 65 64  |earch$,displayed|
00016280  25 29 0d 0c 29 0a 20 20  20 20 7f 3a 0d 0c 2a 2b  |%)..).    .:..*+|
00016290  20 20 20 20 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |    .. "OS_File"|
000162a0  2c 31 30 2c 66 24 2c 66  74 25 2c 2c 73 74 61 72  |,10,f$,ft%,,star|
000162b0  74 25 2c 65 6e 64 25 0d  0c 2b 29 20 20 20 20 f2  |t%,end%..+)    .|
000162c0  73 63 72 61 70 5f 73 6c  69 64 69 6e 67 5f 62 6c  |scrap_sliding_bl|
000162d0  6f 63 6b 28 73 61 76 65  61 6e 63 68 6f 72 25 29  |ock(saveanchor%)|
000162e0  0d 0c 2c 07 20 20 cb 0d  0c 2d 05 cb 0d 0c 2e 0b  |..,.  ...-......|
000162f0  77 61 72 6e 25 3d b9 0d  0c 2f 05 e1 0d 0c 30 05  |warn%=.../....0.|
00016300  3a 0d 0c 31 11 dd 20 a4  67 65 74 73 74 72 28 70  |:..1.. .getstr(p|
00016310  25 29 0d 0c 32 08 ea 20  70 24 0d 0c 33 0d c8 95  |%)..2.. p$..3...|
00016320  20 3f 70 25 3e 33 31 0d  0c 34 10 20 20 70 24 2b  | ?p%>31..4.  p$+|
00016330  3d bd 28 3f 70 25 29 0d  0c 35 0b 20 20 70 25 2b  |=.(?p%)..5.  p%+|
00016340  3d 31 0d 0c 36 05 ce 0d  0c 37 07 3d 70 24 0d 0c  |=1..6....7.=p$..|
00016350  38 05 3a 0d 0c 39 4c f4  20 56 61 6c 69 64 61 74  |8.:..9L. Validat|
00016360  69 6f 6e 20 74 61 62 6c  65 73 20 2d 2d 2d 2d 2d  |ion tables -----|
00016370  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00016390  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000163a0  0c 3a 05 3a 0d 0c 3b 13  dd 20 f2 63 72 65 61 74  |.:.:..;.. .creat|
000163b0  65 5f 74 61 62 6c 65 0d  0c 3c 14 ea 20 49 25 2c  |e_table..<.. I%,|
000163c0  74 69 74 6c 65 24 2c 52  65 63 25 0d 0c 3d 12 c8  |title$,Rec%..=..|
000163d0  8e 20 62 25 20 80 20 25  31 31 31 20 ca 0d 0c 3e  |. b% . %111 ...>|
000163e0  0a 20 20 c9 20 34 3a 0d  0c 3f 0e 20 20 c8 8e 20  |.  . 4:..?.  .. |
000163f0  69 63 25 20 ca 0d 0c 40  0d 20 20 20 20 c9 20 32  |ic% ...@.    . 2|
00016400  36 3a 0d 0c 41 1f 20 20  20 20 e7 20 4c 61 73 74  |6:..A.    . Last|
00016410  54 61 62 6c 65 25 3d 4d  61 78 54 61 62 73 25 20  |Table%=MaxTabs% |
00016420  8c 0d 0c 42 26 20 20 20  20 20 20 f2 73 6f 66 74  |...B&      .soft|
00016430  65 72 72 6f 72 28 c3 28  4d 61 78 54 61 62 73 25  |error(.(MaxTabs%|
00016440  2b 31 29 2c 33 32 29 0d  0c 43 0b 20 20 20 20 20  |+1),32)..C.     |
00016450  20 cc 0d 0c 44 17 20 20  20 20 20 20 4c 61 73 74  | ...D.      Last|
00016460  54 61 62 6c 65 25 2b 3d  31 0d 0c 45 21 20 20 20  |Table%+=1..E!   |
00016470  20 20 20 54 61 62 6c 65  6e 75 6d 62 65 72 25 3d  |   Tablenumber%=|
00016480  4c 61 73 74 54 61 62 6c  65 25 0d 0c 46 21 20 20  |LastTable%..F!  |
00016490  20 20 20 20 6e 61 6d 65  24 3d 24 a4 74 65 78 74  |    name$=$.text|
000164a0  28 74 61 62 6c 65 57 25  2c 30 29 0d 0c 47 22 20  |(tableW%,0)..G" |
000164b0  20 20 20 20 20 74 61 62  6c 65 24 28 4c 61 73 74  |     table$(Last|
000164c0  54 61 62 6c 65 25 29 3d  6e 61 6d 65 24 0d 0c 48  |Table%)=name$..H|
000164d0  24 20 20 20 20 20 20 52  6f 77 73 25 3d bb 28 24  |$      Rows%=.($|
000164e0  a4 74 65 78 74 28 74 61  62 6c 65 57 25 2c 31 29  |.text(tableW%,1)|
000164f0  29 0d 0c 49 29 20 20 20  20 20 20 54 61 62 46 69  |)..I)      TabFi|
00016500  65 6c 64 73 25 3d bb 28  24 a4 74 65 78 74 28 74  |elds%=.($.text(t|
00016510  61 62 6c 65 57 25 2c 32  29 29 0d 0c 4a 1d 20 20  |ableW%,2))..J.  |
00016520  20 20 20 20 e3 20 49 25  3d 30 20 b8 20 54 61 62  |    . I%=0 . Tab|
00016530  46 69 65 6c 64 73 25 0d  0c 4b 36 20 20 20 20 20  |Fields%..K6     |
00016540  20 20 20 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |   tabfieldlen%(|
00016550  49 25 29 3d bb 28 24 a4  74 65 78 74 28 74 61 62  |I%)=.($.text(tab|
00016560  6c 65 57 25 2c 49 25 2a  32 2b 34 29 29 0d 0c 4c  |leW%,I%*2+4))..L|
00016570  24 20 20 20 20 20 20 20  20 52 65 63 25 2b 3d 74  |$        Rec%+=t|
00016580  61 62 66 69 65 6c 64 6c  65 6e 25 28 49 25 29 2b  |abfieldlen%(I%)+|
00016590  31 0d 0c 4d 0e 20 20 20  20 20 20 ed 20 49 25 0d  |1..M.      . I%.|
000165a0  0c 4e 20 20 20 20 20 20  20 74 61 62 6c 65 6e 25  |.N       tablen%|
000165b0  3d 31 36 30 2b 52 6f 77  73 25 2a 52 65 63 25 0d  |=160+Rows%*Rec%.|
000165c0  0c 4f 4f 20 20 20 20 20  20 f2 63 72 65 61 74 65  |.OO      .create|
000165d0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
000165e0  6c 6f 63 6b 28 74 61 62  61 6e 63 68 6f 72 25 28  |lock(tabanchor%(|
000165f0  4c 61 73 74 54 61 62 6c  65 25 29 2c 28 74 61 62  |LastTable%),(tab|
00016600  6c 65 6e 25 2b 33 29 20  80 20 ac 20 33 29 0d 0c  |len%+3) . . 3)..|
00016610  50 29 20 20 20 20 20 20  74 61 62 70 74 72 25 3d  |P)      tabptr%=|
00016620  21 74 61 62 61 6e 63 68  6f 72 25 28 4c 61 73 74  |!tabanchor%(Last|
00016630  54 61 62 6c 65 25 29 0d  0c 51 32 20 20 20 20 20  |Table%)..Q2     |
00016640  20 24 74 61 62 70 74 72  25 3d c3 28 52 6f 77 73  | $tabptr%=.(Rows|
00016650  25 29 3a 74 61 62 70 74  72 25 2b 3d a9 28 24 74  |%):tabptr%+=.($t|
00016660  61 62 70 74 72 25 29 2b  31 0d 0c 52 37 20 20 20  |abptr%)+1..R7   |
00016670  20 20 20 24 74 61 62 70  74 72 25 3d c3 28 54 61  |   $tabptr%=.(Ta|
00016680  62 46 69 65 6c 64 73 25  29 3a 74 61 62 70 74 72  |bFields%):tabptr|
00016690  25 2b 3d a9 28 24 74 61  62 70 74 72 25 29 2b 31  |%+=.($tabptr%)+1|
000166a0  0d 0c 53 1d 20 20 20 20  20 20 e3 20 49 25 3d 30  |..S.      . I%=0|
000166b0  20 b8 20 54 61 62 46 69  65 6c 64 73 25 0d 0c 54  | . TabFields%..T|
000166c0  3f 20 20 20 20 20 20 20  20 24 74 61 62 70 74 72  |?        $tabptr|
000166d0  25 3d c3 28 74 61 62 66  69 65 6c 64 6c 65 6e 25  |%=.(tabfieldlen%|
000166e0  28 49 25 29 29 3a 74 61  62 70 74 72 25 2b 3d a9  |(I%)):tabptr%+=.|
000166f0  28 24 74 61 62 70 74 72  25 29 2b 31 0d 0c 55 28  |($tabptr%)+1..U(|
00016700  20 20 20 20 20 20 20 20  68 65 61 64 24 3d 24 a4  |        head$=$.|
00016710  74 65 78 74 28 74 61 62  6c 65 57 25 2c 49 25 2a  |text(tableW%,I%*|
00016720  32 2b 33 29 0d 0c 56 3b  20 20 20 20 20 20 20 20  |2+3)..V;        |
00016730  74 69 74 6c 65 24 2b 3d  68 65 61 64 24 2b c4 74  |title$+=head$+.t|
00016740  61 62 66 69 65 6c 64 6c  65 6e 25 28 49 25 29 2d  |abfieldlen%(I%)-|
00016750  a9 28 68 65 61 64 24 29  2b 32 2c 22 20 22 29 0d  |.(head$)+2," ").|
00016760  0c 57 0e 20 20 20 20 20  20 ed 20 49 25 0d 0c 58  |.W.      . I%..X|
00016770  3d 20 20 20 20 20 20 24  74 61 62 70 74 72 25 3d  |=      $tabptr%=|
00016780  74 69 74 6c 65 24 3a 74  61 62 70 74 72 25 3d 21  |title$:tabptr%=!|
00016790  74 61 62 61 6e 63 68 6f  72 25 28 4c 61 73 74 54  |tabanchor%(LastT|
000167a0  61 62 6c 65 25 29 2b 31  36 30 0d 0c 59 1a 20 20  |able%)+160..Y.  |
000167b0  20 20 20 20 e3 20 72 6f  77 25 3d 31 20 b8 20 52  |    . row%=1 . R|
000167c0  6f 77 73 25 0d 0c 5a 1f  20 20 20 20 20 20 20 20  |ows%..Z.        |
000167d0  e3 20 49 25 3d 30 20 b8  20 54 61 62 46 69 65 6c  |. I%=0 . TabFiel|
000167e0  64 73 25 0d 0c 5b 35 20  20 20 20 20 20 20 20 20  |ds%..[5         |
000167f0  20 24 74 61 62 70 74 72  25 3d 22 22 3a 74 61 62  | $tabptr%="":tab|
00016800  70 74 72 25 2b 3d 74 61  62 66 69 65 6c 64 6c 65  |ptr%+=tabfieldle|
00016810  6e 25 28 49 25 29 2b 31  0d 0c 5c 10 20 20 20 20  |n%(I%)+1..\.    |
00016820  20 20 20 20 ed 20 49 25  0d 0c 5d 10 20 20 20 20  |    . I%..].    |
00016830  20 20 ed 20 72 6f 77 25  0d 0c 5e 21 20 20 20 20  |  . row%..^!    |
00016840  20 20 f2 73 68 6f 77 5f  74 61 62 6c 65 28 4c 61  |  .show_table(La|
00016850  73 74 54 61 62 6c 65 25  29 0d 0c 5f 21 20 20 20  |stTable%).._!   |
00016860  20 20 20 54 61 62 6c 65  6e 75 6d 62 65 72 25 3d  |   Tablenumber%=|
00016870  4c 61 73 74 54 61 62 6c  65 25 0d 0c 60 20 20 20  |LastTable%..`   |
00016880  20 20 20 20 54 61 62 73  4c 6f 61 64 65 64 24 2b  |    TabsLoaded$+|
00016890  3d 22 2c 22 2b 6e 61 6d  65 24 0d 0c 61 2b 20 20  |=","+name$..a+  |
000168a0  20 20 20 20 e7 20 6d 65  6e 75 25 28 35 29 3e 30  |    . menu%(5)>0|
000168b0  20 8c 20 6d 65 6e 75 5f  70 74 72 25 3d 6d 65 6e  | . menu_ptr%=men|
000168c0  75 25 28 35 29 0d 0c 62  3a 20 20 20 20 20 20 6d  |u%(5)..b:      m|
000168d0  65 6e 75 25 28 35 29 3d  a4 63 72 65 61 74 65 5f  |enu%(5)=.create_|
000168e0  6d 65 6e 75 28 6d 65 6e  75 5f 70 74 72 25 2c 31  |menu(menu_ptr%,1|
000168f0  34 30 2c 54 61 62 73 4c  6f 61 64 65 64 24 29 0d  |40,TabsLoaded$).|
00016900  0c 63 3d 20 20 20 20 20  20 70 74 72 25 3d 6d 65  |.c=      ptr%=me|
00016910  6e 75 25 28 32 29 2b 35  32 3a 70 74 72 25 21 34  |nu%(2)+52:ptr%!4|
00016920  3d 6d 65 6e 75 25 28 35  29 3a f2 6c 69 74 28 6d  |=menu%(5):.lit(m|
00016930  65 6e 75 25 28 32 29 2c  31 2c b9 29 0d 0c 64 09  |enu%(2),1,.)..d.|
00016940  20 20 20 20 cd 0d 0c 65  1e 20 20 20 20 f2 63 6c  |    ...e.    .cl|
00016950  6f 73 65 5f 77 69 6e 64  6f 77 28 74 61 62 6c 65  |ose_window(table|
00016960  57 25 29 0d 0c 66 07 20  20 cb 0d 0c 67 05 cb 0d  |W%)..f.  ...g...|
00016970  0c 68 05 e1 0d 0c 69 05  3a 0d 0c 6a 16 dd 20 f2  |.h....i.:..j.. .|
00016980  63 6c 65 61 72 5f 74 61  62 6c 65 28 54 25 29 0d  |clear_table(T%).|
00016990  0c 6b 1e e7 20 a4 63 6f  6e 66 69 72 6d 28 a4 6d  |.k.. .confirm(.m|
000169a0  73 67 28 34 37 29 29 3d  a3 20 8c 20 e1 0d 0c 6c  |sg(47))=. . ...l|
000169b0  2d ea 20 52 25 2c 46 25  2c 69 6e 64 25 2c 52 6f  |-. R%,F%,ind%,Ro|
000169c0  77 73 25 2c 54 61 62 46  69 65 6c 64 73 25 2c 73  |ws%,TabFields%,s|
000169d0  74 61 72 74 25 2c 52 65  63 25 0d 0c 6d 3b 54 24  |tart%,Rec%..m;T$|
000169e0  3d a4 74 61 62 6c 65 5f  69 6e 66 6f 28 54 25 2c  |=.table_info(T%,|
000169f0  52 6f 77 73 25 2c 54 61  62 46 69 65 6c 64 73 25  |Rows%,TabFields%|
00016a00  2c 52 65 63 25 2c 74 61  62 66 69 65 6c 64 6c 65  |,Rec%,tabfieldle|
00016a10  6e 25 28 29 29 0d 0c 6e  23 73 74 61 72 74 25 3d  |n%())..n#start%=|
00016a20  21 74 61 62 61 6e 63 68  6f 72 25 28 54 25 29 2b  |!tabanchor%(T%)+|
00016a30  31 36 30 2d 52 65 63 25  0d 0c 6f 12 e3 20 52 25  |160-Rec%..o.. R%|
00016a40  3d 31 20 b8 20 52 6f 77  73 25 0d 0c 70 19 20 20  |=1 . Rows%..p.  |
00016a50  69 6e 64 25 3d 73 74 61  72 74 25 2b 52 25 2a 52  |ind%=start%+R%*R|
00016a60  65 63 25 0d 0c 71 19 20  20 e3 20 46 25 3d 30 20  |ec%..q.  . F%=0 |
00016a70  b8 20 54 61 62 46 69 65  6c 64 73 25 0d 0c 72 29  |. TabFields%..r)|
00016a80  20 20 20 20 24 69 6e 64  25 3d 22 22 3a 69 6e 64  |    $ind%="":ind|
00016a90  25 2b 3d 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |%+=tabfieldlen%(|
00016aa0  46 25 29 2b 31 0d 0c 73  0a 20 20 ed 20 46 25 0d  |F%)+1..s.  . F%.|
00016ab0  0c 74 08 ed 20 52 25 0d  0c 75 13 f2 73 68 6f 77  |.t.. R%..u..show|
00016ac0  5f 74 61 62 6c 65 28 54  25 29 0d 0c 76 05 e1 0d  |_table(T%)..v...|
00016ad0  0c 77 05 3a 0d 0c 78 15  dd 20 f2 73 68 6f 77 5f  |.w.:..x.. .show_|
00016ae0  74 61 62 6c 65 28 54 25  29 0d 0c 79 24 ea 20 69  |table(T%)..y$. i|
00016af0  6e 64 25 2c 73 74 61 72  74 25 2c 69 66 6c 61 67  |nd%,start%,iflag|
00016b00  73 25 2c 49 25 2c 70 6f  73 25 2c 70 24 0d 0c 7a  |s%,I%,pos%,p$..z|
00016b10  0e e7 20 54 25 3c 30 20  8c 20 e1 0d 0c 7b 1e f2  |.. T%<0 . ...{..|
00016b20  64 65 6c 65 74 65 5f 69  63 6f 6e 73 28 64 61 74  |delete_icons(dat|
00016b30  61 64 69 63 57 25 2c 30  29 0d 0c 7c 14 6e 61 6d  |adicW%,0)..|.nam|
00016b40  65 24 3d 74 61 62 6c 65  24 28 54 25 29 0d 0c 7d  |e$=table$(T%)..}|
00016b50  15 24 54 61 62 6c 65 6e  61 6d 65 25 3d 6e 61 6d  |.$Tablename%=nam|
00016b60  65 24 0d 0c 7e 14 24 6d  65 6e 75 25 28 31 37 29  |e$..~.$menu%(17)|
00016b70  3d 6e 61 6d 65 24 0d 0c  7f 41 c8 99 20 22 4f 53  |=name$...A.. "OS|
00016b80  5f 46 69 6c 65 22 2c 35  2c 24 64 61 74 61 62 61  |_File",5,$databa|
00016b90  73 65 25 2b 22 2e 56 61  6c 54 61 62 6c 65 73 2e  |se%+".ValTables.|
00016ba0  22 2b 6e 61 6d 65 24 20  b8 20 64 25 2c 2c 2c 2c  |"+name$ . d%,,,,|
00016bb0  74 61 62 6c 65 6e 25 0d  0c 80 36 f2 65 78 74 65  |tablen%...6.exte|
00016bc0  6e 64 5f 6e 61 6d 65 64  5f 73 6c 69 64 69 6e 67  |nd_named_sliding|
00016bd0  5f 62 6c 6f 63 6b 28 75  6e 64 6f 61 6e 63 68 6f  |_block(undoancho|
00016be0  72 25 2c 74 61 62 6c 65  6e 25 2b 31 29 0d 0c 81  |r%,tablen%+1)...|
00016bf0  52 c8 99 20 22 57 69 6d  70 5f 54 72 61 6e 73 66  |R.. "Wimp_Transf|
00016c00  65 72 42 6c 6f 63 6b 22  2c 6d 79 74 61 73 6b 25  |erBlock",mytask%|
00016c10  2c 21 74 61 62 61 6e 63  68 6f 72 25 28 54 25 29  |,!tabanchor%(T%)|
00016c20  2c 6d 79 74 61 73 6b 25  2c 21 75 6e 64 6f 61 6e  |,mytask%,!undoan|
00016c30  63 68 6f 72 25 2c 74 61  62 6c 65 6e 25 2b 31 0d  |chor%,tablen%+1.|
00016c40  0c 82 43 24 54 61 62 54  69 74 6c 65 25 3d a4 74  |..C$TabTitle%=.t|
00016c50  61 62 6c 65 5f 69 6e 66  6f 28 54 25 2c 52 6f 77  |able_info(T%,Row|
00016c60  73 25 2c 54 61 62 46 69  65 6c 64 73 25 2c 52 65  |s%,TabFields%,Re|
00016c70  63 25 2c 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |c%,tabfieldlen%(|
00016c80  29 29 0d 0c 83 1c 69 6e  64 25 3d 21 74 61 62 61  |))....ind%=!taba|
00016c90  6e 63 68 6f 72 25 28 54  25 29 2b 31 36 30 0d 0c  |nchor%(T%)+160..|
00016ca0  84 15 69 66 6c 61 67 73  25 3d 26 30 37 30 30 33  |..iflags%=&07003|
00016cb0  35 33 31 0d 0c 85 15 c8  99 20 22 48 6f 75 72 67  |531...... "Hourg|
00016cc0  6c 61 73 73 5f 4f 6e 22  0d 0c 86 14 e3 20 72 6f  |lass_On"..... ro|
00016cd0  77 25 3d 31 20 b8 20 52  6f 77 73 25 0d 0c 87 0d  |w%=1 . Rows%....|
00016ce0  20 20 70 6f 73 25 3d 38  30 0d 0c 88 19 20 20 e3  |  pos%=80....  .|
00016cf0  20 49 25 3d 30 20 b8 20  54 61 62 46 69 65 6c 64  | I%=0 . TabField|
00016d00  73 25 0d 0c 89 76 20 20  20 20 52 25 3d a4 63 72  |s%...v    R%=.cr|
00016d10  65 61 74 65 5f 69 63 6f  6e 28 64 61 74 61 64 69  |eate_icon(datadi|
00016d20  63 57 25 2c 70 6f 73 25  2c 2d 72 6f 77 25 2a 33  |cW%,pos%,-row%*3|
00016d30  36 2c 28 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |6,(tabfieldlen%(|
00016d40  49 25 29 2b 31 29 2a 31  36 2c 33 32 2c 69 66 6c  |I%)+1)*16,32,ifl|
00016d50  61 67 73 25 2c 22 22 2c  69 6e 64 25 2c 77 72 69  |ags%,"",ind%,wri|
00016d60  74 65 70 25 2c 74 61 62  66 69 65 6c 64 6c 65 6e  |tep%,tabfieldlen|
00016d70  25 28 49 25 29 2b 31 29  0d 0c 8a 25 20 20 20 20  |%(I%)+1)...%    |
00016d80  70 6f 73 25 2b 3d 28 74  61 62 66 69 65 6c 64 6c  |pos%+=(tabfieldl|
00016d90  65 6e 25 28 49 25 29 2b  32 29 2a 31 36 0d 0c 8b  |en%(I%)+2)*16...|
00016da0  20 20 20 20 20 69 6e 64  25 2b 3d 74 61 62 66 69  |     ind%+=tabfi|
00016db0  65 6c 64 6c 65 6e 25 28  49 25 29 2b 31 0d 0c 8c  |eldlen%(I%)+1...|
00016dc0  0a 20 20 ed 20 49 25 0d  0c 8d 30 20 20 c8 99 20  |.  . I%...0  .. |
00016dd0  22 48 6f 75 72 67 6c 61  73 73 5f 50 65 72 63 65  |"Hourglass_Perce|
00016de0  6e 74 61 67 65 22 2c 72  6f 77 25 2a 31 30 30 20  |ntage",row%*100 |
00016df0  81 20 52 6f 77 73 25 0d  0c 8e 0a ed 20 72 6f 77  |. Rows%..... row|
00016e00  25 0d 0c 8f 16 c8 99 20  22 48 6f 75 72 67 6c 61  |%...... "Hourgla|
00016e10  73 73 5f 4f 66 66 22 0d  0c 90 14 70 24 3d 70 72  |ss_Off"....p$=pr|
00016e20  69 6e 74 72 65 6c 24 28  54 25 29 0d 0c 91 0e e7  |intrel$(T%).....|
00016e30  20 70 24 3c 3e 22 22 20  8c 0d 0c 92 14 20 20 e3  | p$<>"" .....  .|
00016e40  20 49 25 3d 31 20 b8 20  a9 28 70 24 29 0d 0c 93  | I%=1 . .(p$)...|
00016e50  27 20 20 20 20 f2 73 65  6c 65 63 74 28 64 61 74  |'    .select(dat|
00016e60  61 64 69 63 57 25 2c bb  28 c1 70 24 2c 49 25 2c  |adicW%,.(.p$,I%,|
00016e70  31 29 29 29 0d 0c 94 0a  20 20 ed 20 49 25 0d 0c  |1)))....  . I%..|
00016e80  95 05 cd 0d 0c 96 22 21  62 6c 6f 63 6b 25 3d 30  |......"!block%=0|
00016e90  3a 62 6c 6f 63 6b 25 21  34 3d 2d 52 6f 77 73 25  |:block%!4=-Rows%|
00016ea0  2a 33 36 2d 34 0d 0c 97  25 62 6c 6f 63 6b 25 21  |*36-4...%block%!|
00016eb0  38 3d 28 52 65 63 25 2b  31 30 29 2a 31 36 3a 62  |8=(Rec%+10)*16:b|
00016ec0  6c 6f 63 6b 25 21 31 32  3d 30 0d 0c 98 28 c8 99  |lock%!12=0...(..|
00016ed0  20 22 57 69 6d 70 5f 53  65 74 45 78 74 65 6e 74  | "Wimp_SetExtent|
00016ee0  22 2c 64 61 74 61 64 69  63 57 25 2c 62 6c 6f 63  |",datadicW%,bloc|
00016ef0  6b 25 0d 0c 99 15 21 62  6c 6f 63 6b 25 3d 64 61  |k%....!block%=da|
00016f00  74 61 64 69 63 57 25 0d  0c 9a 24 c8 99 20 22 57  |tadicW%...$.. "W|
00016f10  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
00016f20  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 0c 9b 23 62  |te",,block%...#b|
00016f30  6c 6f 63 6b 25 21 31 32  3d 62 6c 6f 63 6b 25 21  |lock%!12=block%!|
00016f40  34 2b 28 52 65 63 25 2b  31 30 29 2a 31 36 0d 0c  |4+(Rec%+10)*16..|
00016f50  9c 10 e7 20 52 6f 77 73  25 3c 32 30 20 8c 0d 0c  |... Rows%<20 ...|
00016f60  9d 23 20 20 62 6c 6f 63  6b 25 21 31 36 3d 62 6c  |.#  block%!16=bl|
00016f70  6f 63 6b 25 21 38 2b 52  6f 77 73 25 2a 33 36 2b  |ock%!8+Rows%*36+|
00016f80  34 0d 0c 9e 07 20 20 cc  0d 0c 9f 20 20 20 62 6c  |4....  ....   bl|
00016f90  6f 63 6b 25 21 31 36 3d  62 6c 6f 63 6b 25 21 38  |ock%!16=block%!8|
00016fa0  2b 33 36 2a 32 30 2b 34  0d 0c a0 05 cd 0d 0c a1  |+36*20+4........|
00016fb0  20 c8 99 20 22 57 69 6d  70 5f 4f 70 65 6e 57 69  | .. "Wimp_OpenWi|
00016fc0  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 0d 0c a2  |ndow",,block%...|
00016fd0  16 f2 72 65 64 72 61 77  28 64 61 74 61 64 69 63  |..redraw(datadic|
00016fe0  57 25 29 0d 0c a3 27 e7  20 41 63 63 65 73 73 25  |W%)...'. Access%|
00016ff0  20 8c 20 f2 73 65 74 5f  63 61 72 65 74 28 64 61  | . .set_caret(da|
00017000  74 61 64 69 63 57 25 2c  30 29 0d 0c a4 05 e1 0d  |tadicW%,0)......|
00017010  0c a5 05 3a 0d 0c a6 1b  dd 20 f2 72 65 73 74 6f  |...:..... .resto|
00017020  72 65 5f 74 61 62 6c 65  28 54 25 2c 4c 25 29 0d  |re_table(T%,L%).|
00017030  0c a7 4d c8 99 20 22 57  69 6d 70 5f 54 72 61 6e  |..M.. "Wimp_Tran|
00017040  73 66 65 72 42 6c 6f 63  6b 22 2c 6d 79 74 61 73  |sferBlock",mytas|
00017050  6b 25 2c 21 75 6e 64 6f  61 6e 63 68 6f 72 25 2c  |k%,!undoanchor%,|
00017060  6d 79 74 61 73 6b 25 2c  21 74 61 62 61 6e 63 68  |mytask%,!tabanch|
00017070  6f 72 25 28 54 25 29 2c  4c 25 2b 31 0d 0c a8 16  |or%(T%),L%+1....|
00017080  f2 72 65 64 72 61 77 28  64 61 74 61 64 69 63 57  |.redraw(datadicW|
00017090  25 29 0d 0c a9 05 e1 0d  0c aa 05 3a 0d 0c ab 17  |%).........:....|
000170a0  dd 20 f2 72 65 73 74 6f  72 65 5f 74 61 62 66 69  |. .restore_tabfi|
000170b0  65 6c 64 0d 0c ac 13 ea  20 73 6f 75 72 63 65 25  |eld..... source%|
000170c0  2c 64 65 73 74 25 0d 0c  ad 3f c8 99 20 22 57 69  |,dest%...?.. "Wi|
000170d0  6d 70 5f 47 65 74 43 61  72 65 74 50 6f 73 69 74  |mp_GetCaretPosit|
000170e0  69 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 3a 77 69 25  |ion",,block%:wi%|
000170f0  3d 21 62 6c 6f 63 6b 25  3a 69 63 25 3d 62 6c 6f  |=!block%:ic%=blo|
00017100  63 6b 25 21 34 0d 0c ae  15 e7 20 77 69 25 3d 64  |ck%!4..... wi%=d|
00017110  61 74 61 64 69 63 57 25  20 8c 0d 0c af 20 20 20  |atadicW% ....   |
00017120  64 65 73 74 25 3d a4 74  65 78 74 28 64 61 74 61  |dest%=.text(data|
00017130  64 69 63 57 25 2c 69 63  25 29 0d 0c b0 3a 20 20  |dicW%,ic%)...:  |
00017140  73 6f 75 72 63 65 25 3d  21 75 6e 64 6f 61 6e 63  |source%=!undoanc|
00017150  68 6f 72 25 2b 64 65 73  74 25 2d 21 74 61 62 61  |hor%+dest%-!taba|
00017160  6e 63 68 6f 72 25 28 54  61 62 6c 65 6e 75 6d 62  |nchor%(Tablenumb|
00017170  65 72 25 29 0d 0c b1 15  20 20 24 64 65 73 74 25  |er%)....  $dest%|
00017180  3d 24 73 6f 75 72 63 65  25 0d 0c b2 21 20 20 f2  |=$source%...!  .|
00017190  72 65 64 72 61 77 5f 69  63 6f 6e 28 64 61 74 61  |redraw_icon(data|
000171a0  64 69 63 57 25 2c 69 63  25 29 0d 0c b3 05 cd 0d  |dicW%,ic%)......|
000171b0  0c b4 05 e1 0d 0c b5 05  3a 0d 0c b6 15 dd 20 f2  |........:..... .|
000171c0  73 6f 72 74 5f 74 61 62  6c 65 28 54 25 29 0d 0c  |sort_table(T%)..|
000171d0  b7 3f 74 69 74 6c 65 24  3d a4 74 61 62 6c 65 5f  |.?title$=.table_|
000171e0  69 6e 66 6f 28 54 25 2c  52 6f 77 73 25 2c 54 61  |info(T%,Rows%,Ta|
000171f0  62 46 69 65 6c 64 73 25  2c 52 65 63 25 2c 74 61  |bFields%,Rec%,ta|
00017200  62 66 69 65 6c 64 6c 65  6e 25 28 29 29 0d 0c b8  |bfieldlen%())...|
00017210  21 69 6e 64 25 3d 21 74  61 62 61 6e 63 68 6f 72  |!ind%=!tabanchor|
00017220  25 28 54 25 29 2b 31 36  30 2d 52 65 63 25 0d 0c  |%(T%)+160-Rec%..|
00017230  b9 16 e3 20 72 6f 77 25  3d 30 20 b8 20 52 6f 77  |... row%=0 . Row|
00017240  73 25 2d 31 0d 0c ba 10  20 20 69 6e 64 25 2b 3d  |s%-1....  ind%+=|
00017250  52 65 63 25 0d 0c bb 1a  20 20 62 6c 6f 63 6b 25  |Rec%....  block%|
00017260  21 28 72 6f 77 25 2a 34  29 3d 69 6e 64 25 0d 0c  |!(row%*4)=ind%..|
00017270  bc 1c 20 20 e7 20 24 69  6e 64 25 3d 22 22 20 8c  |..  . $ind%="" .|
00017280  20 24 69 6e 64 25 3d 22  7e 22 0d 0c bd 0a ed 20  | $ind%="~"..... |
00017290  72 6f 77 25 0d 0c be 53  c8 99 20 22 4f 53 5f 48  |row%...S.. "OS_H|
000172a0  65 61 70 53 6f 72 74 22  2c 52 6f 77 73 25 2c 28  |eapSort",Rows%,(|
000172b0  62 6c 6f 63 6b 25 20 84  20 28 31 3c 3c 33 30 29  |block% . (1<<30)|
000172c0  20 84 20 28 31 3c 3c 33  31 29 29 2c 34 2c 2c 21  | . (1<<31)),4,,!|
000172d0  74 61 62 61 6e 63 68 6f  72 25 28 54 25 29 2b 31  |tabanchor%(T%)+1|
000172e0  36 30 2c 52 65 63 25 0d  0c bf 21 69 6e 64 25 3d  |60,Rec%...!ind%=|
000172f0  21 74 61 62 61 6e 63 68  6f 72 25 28 54 25 29 2b  |!tabanchor%(T%)+|
00017300  31 36 30 2d 52 65 63 25  0d 0c c0 16 e3 20 72 6f  |160-Rec%..... ro|
00017310  77 25 3d 30 20 b8 20 52  6f 77 73 25 2d 31 0d 0c  |w%=0 . Rows%-1..|
00017320  c1 10 20 20 69 6e 64 25  2b 3d 52 65 63 25 0d 0c  |..  ind%+=Rec%..|
00017330  c2 1c 20 20 e7 20 24 69  6e 64 25 3d 22 7e 22 20  |..  . $ind%="~" |
00017340  8c 20 24 69 6e 64 25 3d  22 22 0d 0c c3 0a ed 20  |. $ind%=""..... |
00017350  72 6f 77 25 0d 0c c4 16  f2 72 65 64 72 61 77 28  |row%.....redraw(|
00017360  64 61 74 61 64 69 63 57  25 29 0d 0c c5 05 e1 0d  |datadicW%)......|
00017370  0c c6 05 3a 0d 0c c7 16  dd 20 f2 70 72 69 6e 74  |...:..... .print|
00017380  5f 74 61 62 6c 65 28 54  25 29 0d 0c c8 1f e7 20  |_table(T%)..... |
00017390  70 72 69 6e 74 69 6e 67  25 20 84 20 69 6e 64 65  |printing% . inde|
000173a0  78 69 6e 67 25 20 8c 20  e1 0d 0c c9 28 ea 20 73  |xing% . ....(. s|
000173b0  74 61 72 74 25 2c 70 74  72 25 2c 4c 69 6e 65 24  |tart%,ptr%,Line$|
000173c0  2c 74 69 74 6c 65 24 2c  72 6f 77 73 75 73 65 64  |,title$,rowsused|
000173d0  25 0d 0c ca 17 f2 72 65  61 64 5f 70 72 69 6e 74  |%.....read_print|
000173e0  5f 6f 70 74 69 6f 6e 73  0d 0c cb 13 66 6f 72 6d  |_options....form|
000173f0  61 74 24 3d 22 68 6f 72  69 7a 22 0d 0c cc 3f 74  |at$="horiz"...?t|
00017400  69 74 6c 65 24 3d a4 74  61 62 6c 65 5f 69 6e 66  |itle$=.table_inf|
00017410  6f 28 54 25 2c 52 6f 77  73 25 2c 54 61 62 46 69  |o(T%,Rows%,TabFi|
00017420  65 6c 64 73 25 2c 52 65  63 25 2c 74 61 62 66 69  |elds%,Rec%,tabfi|
00017430  65 6c 64 6c 65 6e 25 28  29 29 0d 0c cd 21 4c 65  |eldlen%())...!Le|
00017440  6e 4c 69 6e 65 25 3d 4c  6d 61 72 67 69 6e 25 2b  |nLine%=Lmargin%+|
00017450  a9 28 74 69 74 6c 65 24  29 2b 32 0d 0c ce 30 48  |.(title$)+2...0H|
00017460  65 61 64 69 6e 67 24 3d  6d 61 72 67 69 6e 24 2b  |eading$=margin$+|
00017470  74 69 74 6c 65 24 2b c4  52 65 63 25 2d a9 28 74  |title$+.Rec%-.(t|
00017480  69 74 6c 65 24 29 2c 22  20 22 29 0d 0c cf 37 f2  |itle$)," ")...7.|
00017490  65 78 74 65 6e 64 5f 6e  61 6d 65 64 5f 73 6c 69  |extend_named_sli|
000174a0  64 69 6e 67 5f 62 6c 6f  63 6b 28 6c 69 6e 65 61  |ding_block(linea|
000174b0  6e 63 68 6f 72 25 2c 4c  65 6e 4c 69 6e 65 25 2b  |nchor%,LenLine%+|
000174c0  34 29 0d 0c d0 49 f2 65  78 74 65 6e 64 5f 6e 61  |4)...I.extend_na|
000174d0  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
000174e0  6b 28 68 65 61 64 61 6e  63 68 6f 72 25 2c 4c 65  |k(headanchor%,Le|
000174f0  6e 4c 69 6e 65 25 2b 34  29 3a 70 6f 73 25 3d 21  |nLine%+4):pos%=!|
00017500  68 65 61 64 61 6e 63 68  6f 72 25 0d 0c d1 37 f2  |headanchor%...7.|
00017510  68 65 61 70 5f 73 74 6f  72 65 28 68 65 61 64 61  |heap_store(heada|
00017520  6e 63 68 6f 72 25 2c 4c  65 6e 4c 69 6e 65 25 2c  |nchor%,LenLine%,|
00017530  30 2c 70 6f 73 25 2c 30  2c 48 65 61 64 69 6e 67  |0,pos%,0,Heading|
00017540  24 29 0d 0c d2 1d 54 69  74 6c 65 24 3d 22 56 61  |$)....Title$="Va|
00017550  6c 69 64 61 74 69 6f 6e  20 74 61 62 6c 65 22 0d  |lidation table".|
00017560  0c d3 16 54 69 74 6c 65  31 24 3d 74 61 62 6c 65  |...Title1$=table|
00017570  24 28 54 25 29 0d 0c d4  0e 54 69 74 6c 65 32 24  |$(T%)....Title2$|
00017580  3d 22 22 0d 0c d5 18 72  65 70 6f 72 74 64 65 73  |=""....reportdes|
00017590  74 24 3d 22 57 69 6e 64  6f 77 22 0d 0c d6 1c f2  |t$="Window".....|
000175a0  63 6c 6f 73 65 5f 77 69  6e 64 6f 77 28 64 61 74  |close_window(dat|
000175b0  61 64 69 63 57 25 29 0d  0c d7 0c 43 6f 75 6e 74  |adicW%)....Count|
000175c0  25 3d 30 0d 0c d8 11 f2  6c 69 73 74 5f 68 65 61  |%=0.....list_hea|
000175d0  64 28 30 29 0d 0c d9 15  c8 99 20 22 48 6f 75 72  |d(0)...... "Hour|
000175e0  67 6c 61 73 73 5f 4f 6e  22 0d 0c da 12 e3 20 49  |glass_On"..... I|
000175f0  25 3d 31 20 b8 20 52 6f  77 73 25 0d 0c db 25 20  |%=1 . Rows%...% |
00017600  20 73 74 61 72 74 25 3d  21 74 61 62 61 6e 63 68  | start%=!tabanch|
00017610  6f 72 25 28 54 25 29 2b  31 36 30 2d 52 65 63 25  |or%(T%)+160-Rec%|
00017620  0d 0c dc 13 20 20 4c 69  6e 65 24 3d 6d 61 72 67  |....  Line$=marg|
00017630  69 6e 24 0d 0c dd 19 20  20 70 74 72 25 3d 73 74  |in$....  ptr%=st|
00017640  61 72 74 25 2b 49 25 2a  52 65 63 25 0d 0c de 19  |art%+I%*Rec%....|
00017650  20 20 e3 20 4a 25 3d 30  20 b8 20 54 61 62 46 69  |  . J%=0 . TabFi|
00017660  65 6c 64 73 25 0d 0c df  44 20 20 20 20 e7 20 24  |elds%...D    . $|
00017670  70 74 72 25 3c 3e 22 22  20 8c 20 4c 69 6e 65 24  |ptr%<>"" . Line$|
00017680  2b 3d 24 70 74 72 25 2b  c4 74 61 62 66 69 65 6c  |+=$ptr%+.tabfiel|
00017690  64 6c 65 6e 25 28 4a 25  29 2d a9 28 24 70 74 72  |dlen%(J%)-.($ptr|
000176a0  25 29 2b 32 2c 22 20 22  29 0d 0c e0 20 20 20 20  |%)+2," ")...    |
000176b0  20 70 74 72 25 2b 3d 74  61 62 66 69 65 6c 64 6c  | ptr%+=tabfieldl|
000176c0  65 6e 25 28 4a 25 29 2b  31 0d 0c e1 0a 20 20 ed  |en%(J%)+1....  .|
000176d0  20 4a 25 0d 0c e2 18 20  20 e7 20 4c 69 6e 65 24  | J%....  . Line$|
000176e0  3c 3e 6d 61 72 67 69 6e  24 20 8c 0d 0c e3 14 20  |<>margin$ ..... |
000176f0  20 20 20 72 6f 77 73 75  73 65 64 25 2b 3d 31 0d  |   rowsused%+=1.|
00017700  0c e4 44 20 20 20 20 24  28 21 6c 69 6e 65 61 6e  |..D    $(!linean|
00017710  63 68 6f 72 25 29 3d 4c  69 6e 65 24 3a f2 6c 69  |chor%)=Line$:.li|
00017720  73 74 5f 6c 69 6e 65 28  2d 31 2c 6c 69 6e 65 61  |st_line(-1,linea|
00017730  6e 63 68 6f 72 25 2c a9  28 4c 69 6e 65 24 29 2c  |nchor%,.(Line$),|
00017740  33 32 29 0d 0c e5 07 20  20 cd 0d 0c e6 2e 20 20  |32)....  .....  |
00017750  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 50 65  |.. "Hourglass_Pe|
00017760  72 63 65 6e 74 61 67 65  22 2c 49 25 2a 31 30 30  |rcentage",I%*100|
00017770  20 81 20 52 6f 77 73 25  0d 0c e7 08 ed 20 49 25  | . Rows%..... I%|
00017780  0d 0c e8 16 c8 99 20 22  48 6f 75 72 67 6c 61 73  |...... "Hourglas|
00017790  73 5f 4f 66 66 22 0d 0c  e9 11 f2 72 75 6c 65 5f  |s_Off".....rule_|
000177a0  6f 66 66 28 34 35 29 0d  0c ea 1f 53 24 3d 6d 61  |off(45)....S$=ma|
000177b0  72 67 69 6e 24 2b c3 28  52 6f 77 73 25 29 2b 22  |rgin$+.(Rows%)+"|
000177c0  20 72 6f 77 73 22 0d 0c  eb 3a 24 28 21 6c 69 6e  | rows"...:$(!lin|
000177d0  65 61 6e 63 68 6f 72 25  29 3d 53 24 3a f2 6c 69  |eanchor%)=S$:.li|
000177e0  73 74 5f 6c 69 6e 65 28  2d 31 2c 6c 69 6e 65 61  |st_line(-1,linea|
000177f0  6e 63 68 6f 72 25 2c a9  28 53 24 29 2c 33 32 29  |nchor%,.(S$),32)|
00017800  0d 0c ec 23 53 24 3d 6d  61 72 67 69 6e 24 2b c3  |...#S$=margin$+.|
00017810  28 72 6f 77 73 75 73 65  64 25 29 2b 22 20 75 73  |(rowsused%)+" us|
00017820  65 64 22 0d 0c ed 3a 24  28 21 6c 69 6e 65 61 6e  |ed"...:$(!linean|
00017830  63 68 6f 72 25 29 3d 53  24 3a f2 6c 69 73 74 5f  |chor%)=S$:.list_|
00017840  6c 69 6e 65 28 2d 31 2c  6c 69 6e 65 61 6e 63 68  |line(-1,lineanch|
00017850  6f 72 25 2c a9 28 53 24  29 2c 33 32 29 0d 0c ee  |or%,.(S$),32)...|
00017860  11 f2 72 75 6c 65 5f 6f  66 66 28 34 35 29 0d 0c  |..rule_off(45)..|
00017870  ef 10 f2 73 63 72 65 65  6e 5f 6c 69 73 74 0d 0c  |...screen_list..|
00017880  f0 16 70 69 74 63 68 24  3d a4 70 69 74 63 68 28  |..pitch$=.pitch(|
00017890  22 30 22 29 0d 0c f1 17  f2 6c 69 74 28 6d 65 6e  |"0").....lit(men|
000178a0  75 25 28 31 38 29 2c 31  2c a3 29 0d 0c f2 05 e1  |u%(18),1,.).....|
000178b0  0d 0c f3 05 3a 0d 0c f4  17 dd 20 a4 74 61 62 6c  |....:..... .tabl|
000178c0  65 5f 6e 75 6d 62 65 72  28 4e 24 29 0d 0c f5 0b  |e_number(N$)....|
000178d0  ea 20 54 25 2c 50 25 0d  0c f6 10 e7 20 4e 24 3d  |. T%,P%..... N$=|
000178e0  22 22 20 8c 3d 2d 31 0d  0c f7 09 54 25 3d 2d 31  |"" .=-1....T%=-1|
000178f0  0d 0c f8 05 f5 0d 0c f9  0b 20 20 54 25 2b 3d 31  |.........  T%+=1|
00017900  0d 0c fa 23 fd 20 74 61  62 6c 65 24 28 54 25 29  |...#. table$(T%)|
00017910  3d 4e 24 20 84 20 54 25  3e 4c 61 73 74 54 61 62  |=N$ . T%>LastTab|
00017920  6c 65 25 0d 0c fb 1d e7  20 54 25 3e 4c 61 73 74  |le%..... T%>Last|
00017930  54 61 62 6c 65 25 20 8c  3d 2d 31 20 8b 3d 54 25  |Table% .=-1 .=T%|
00017940  0d 0c fc 05 3a 0d 0c fd  2a dd 20 a4 74 61 62 6c  |....:...*. .tabl|
00017950  65 5f 69 6e 66 6f 28 54  25 2c f8 20 52 25 2c f8  |e_info(T%,. R%,.|
00017960  20 46 25 2c f8 20 52 4c  25 2c 4c 25 28 29 29 0d  | F%,. RL%,L%()).|
00017970  0c fe 0b ea 20 50 25 2c  49 25 0d 0c ff 16 50 25  |.... P%,I%....P%|
00017980  3d 21 74 61 62 61 6e 63  68 6f 72 25 28 54 25 29  |=!tabanchor%(T%)|
00017990  0d 0d 00 1a 52 25 3d bb  28 24 50 25 29 3a 50 25  |....R%=.($P%):P%|
000179a0  2b 3d a9 28 24 50 25 29  2b 31 0d 0d 01 1a 46 25  |+=.($P%)+1....F%|
000179b0  3d bb 28 24 50 25 29 3a  50 25 2b 3d a9 28 24 50  |=.($P%):P%+=.($P|
000179c0  25 29 2b 31 0d 0d 02 09  52 4c 25 3d 30 0d 0d 03  |%)+1....RL%=0...|
000179d0  0f e3 20 49 25 3d 30 20  b8 20 46 25 0d 0d 04 20  |.. I%=0 . F%... |
000179e0  20 20 4c 25 28 49 25 29  3d bb 28 24 50 25 29 3a  |  L%(I%)=.($P%):|
000179f0  50 25 2b 3d a9 28 24 50  25 29 2b 31 0d 0d 05 13  |P%+=.($P%)+1....|
00017a00  20 20 52 4c 25 2b 3d 4c  25 28 49 25 29 2b 31 0d  |  RL%+=L%(I%)+1.|
00017a10  0d 06 08 ed 20 49 25 0d  0d 07 08 3d 24 50 25 0d  |.... I%....=$P%.|
00017a20  0d 08 05 3a 0d 0d 09 1b  dd 20 a4 74 61 62 6c 65  |...:..... .table|
00017a30  5f 66 69 65 6c 64 28 46  25 2c 4c 25 28 29 29 0d  |_field(F%,L%()).|
00017a40  0d 0a 0b ea 20 49 25 2c  50 25 0d 0d 0b 0c c8 95  |.... I%,P%......|
00017a50  20 49 25 3c 46 25 0d 0d  0c 12 20 20 50 25 2b 3d  | I%<F%....  P%+=|
00017a60  4c 25 28 49 25 29 2b 31  0d 0d 0d 0b 20 20 49 25  |L%(I%)+1....  I%|
00017a70  2b 3d 31 0d 0d 0e 05 ce  0d 0d 0f 07 3d 50 25 0d  |+=1.........=P%.|
00017a80  0d 10 05 3a 0d 0d 11 15  dd 20 f2 64 72 61 67 5f  |...:..... .drag_|
00017a90  74 61 62 6c 65 28 66 24  29 0d 0d 12 13 ea 20 70  |table(f$)..... p|
00017aa0  6f 73 25 2c 6e 61 6d 65  24 2c 64 25 0d 0d 13 13  |os%,name$,d%....|
00017ab0  54 61 62 6c 65 6e 75 6d  62 65 72 25 3d 2d 31 0d  |Tablenumber%=-1.|
00017ac0  0d 14 13 6e 61 6d 65 24  3d a4 6c 65 61 66 28 66  |...name$=.leaf(f|
00017ad0  24 29 0d 0d 15 1f e7 20  a7 54 61 62 73 4c 6f 61  |$)..... .TabsLoa|
00017ae0  64 65 64 24 2c 6e 61 6d  65 24 29 3e 30 20 8c 20  |ded$,name$)>0 . |
00017af0  e1 0d 0d 16 25 c8 99 20  22 4f 53 5f 46 69 6c 65  |....%.. "OS_File|
00017b00  22 2c 35 2c 66 24 20 b8  20 64 25 2c 2c 2c 2c 74  |",5,f$ . d%,,,,t|
00017b10  61 62 6c 65 6e 25 0d 0d  17 1b e7 20 4c 61 73 74  |ablen%..... Last|
00017b20  54 61 62 6c 65 25 3d 4d  61 78 54 61 62 73 25 20  |Table%=MaxTabs% |
00017b30  8c 0d 0d 18 34 20 20 e7  20 a7 65 78 74 72 61 74  |....4  . .extrat|
00017b40  61 62 73 24 2c 6e 61 6d  65 24 29 3d 30 20 8c 20  |abs$,name$)=0 . |
00017b50  65 78 74 72 61 74 61 62  73 24 2b 3d 6e 61 6d 65  |extratabs$+=name|
00017b60  24 2b 22 2c 22 0d 0d 19  07 20 20 cc 0d 0d 1a 13  |$+","....  .....|
00017b70  20 20 4c 61 73 74 54 61  62 6c 65 25 2b 3d 31 0d  |  LastTable%+=1.|
00017b80  0d 1b 4b 20 20 f2 63 72  65 61 74 65 5f 6e 61 6d  |..K  .create_nam|
00017b90  65 64 5f 73 6c 69 64 69  6e 67 5f 62 6c 6f 63 6b  |ed_sliding_block|
00017ba0  28 74 61 62 61 6e 63 68  6f 72 25 28 4c 61 73 74  |(tabanchor%(Last|
00017bb0  54 61 62 6c 65 25 29 2c  28 74 61 62 6c 65 6e 25  |Table%),(tablen%|
00017bc0  2b 33 29 20 80 20 ac 20  33 29 0d 0d 1c 31 20 20  |+3) . . 3)...1  |
00017bd0  c8 99 20 22 4f 53 5f 46  69 6c 65 22 2c 32 35 35  |.. "OS_File",255|
00017be0  2c 66 24 2c 21 74 61 62  61 6e 63 68 6f 72 25 28  |,f$,!tabanchor%(|
00017bf0  4c 61 73 74 54 61 62 6c  65 25 29 0d 0d 1d 1e 20  |LastTable%).... |
00017c00  20 74 61 62 6c 65 24 28  4c 61 73 74 54 61 62 6c  | table$(LastTabl|
00017c10  65 25 29 3d 6e 61 6d 65  24 0d 0d 1e 1d 20 20 54  |e%)=name$....  T|
00017c20  61 62 6c 65 6e 75 6d 62  65 72 25 3d 4c 61 73 74  |ablenumber%=Last|
00017c30  54 61 62 6c 65 25 0d 0d  1f 1c 20 20 54 61 62 73  |Table%....  Tabs|
00017c40  4c 6f 61 64 65 64 24 2b  3d 22 2c 22 2b 6e 61 6d  |Loaded$+=","+nam|
00017c50  65 24 0d 0d 20 27 20 20  e7 20 6d 65 6e 75 25 28  |e$.. '  . menu%(|
00017c60  35 29 3e 30 20 8c 20 6d  65 6e 75 5f 70 74 72 25  |5)>0 . menu_ptr%|
00017c70  3d 6d 65 6e 75 25 28 35  29 0d 0d 21 36 20 20 6d  |=menu%(5)..!6  m|
00017c80  65 6e 75 25 28 35 29 3d  a4 63 72 65 61 74 65 5f  |enu%(5)=.create_|
00017c90  6d 65 6e 75 28 6d 65 6e  75 5f 70 74 72 25 2c 31  |menu(menu_ptr%,1|
00017ca0  34 30 2c 54 61 62 73 4c  6f 61 64 65 64 24 29 0d  |40,TabsLoaded$).|
00017cb0  0d 22 39 20 20 70 74 72  25 3d 6d 65 6e 75 25 28  |."9  ptr%=menu%(|
00017cc0  32 29 2b 35 32 3a 70 74  72 25 21 34 3d 6d 65 6e  |2)+52:ptr%!4=men|
00017cd0  75 25 28 35 29 3a f2 6c  69 74 28 6d 65 6e 75 25  |u%(5):.lit(menu%|
00017ce0  28 32 29 2c 31 2c b9 29  0d 0d 23 07 20 20 cd 0d  |(2),1,.)..#.  ..|
00017cf0  0d 24 05 cd 0d 0d 25 05  e1 0d 0d 26 05 3a 0d 0d  |.$....%....&.:..|
00017d00  27 14 dd 20 f2 6c 69 6e  6b 5f 74 6f 5f 74 61 62  |'.. .link_to_tab|
00017d10  6c 65 0d 0d 28 0b ea 20  69 63 6f 6e 25 0d 0d 29  |le..(.. icon%..)|
00017d20  12 c8 8e 20 62 25 20 80  20 25 31 31 31 20 ca 0d  |... b% . %111 ..|
00017d30  0d 2a 0c 20 20 c9 20 32  2c 34 3a 0d 0d 2b 10 20  |.*.  . 2,4:..+. |
00017d40  20 e7 20 69 63 25 3d 31  33 20 8c 0d 0d 2c 35 20  | . ic%=13 ...,5 |
00017d50  20 20 20 f2 74 69 63 6b  5f 6f 6e 65 28 6d 65 6e  |   .tick_one(men|
00017d60  75 25 28 35 29 2c 30 2c  4c 61 73 74 54 61 62 6c  |u%(5),0,LastTabl|
00017d70  65 25 2c 54 61 62 6c 65  6e 75 6d 62 65 72 25 29  |e%,Tablenumber%)|
00017d80  0d 0d 2d 2b 20 20 20 20  f2 73 68 6f 77 5f 6d 65  |..-+    .show_me|
00017d90  6e 75 28 6d 65 6e 75 25  28 35 29 2c 6f 6c 64 78  |nu(menu%(5),oldx|
00017da0  25 2b 33 32 2c 6f 6c 64  79 25 29 0d 0d 2e 07 20  |%+32,oldy%).... |
00017db0  20 cd 0d 0d 2f 05 cb 0d  0d 30 12 c8 8e 20 62 25  | .../....0... b%|
00017dc0  20 80 20 25 31 31 31 20  ca 0d 0d 31 0c 20 20 c9  | . %111 ...1.  .|
00017dd0  20 31 2c 34 3a 0d 0d 32  24 20 20 e7 20 28 62 25  | 1,4:..2$  . (b%|
00017de0  20 80 20 25 31 31 31 29  3d 34 20 8c 20 7a 25 3d  | . %111)=4 . z%=|
00017df0  31 20 8b 20 7a 25 3d 2d  31 0d 0d 33 0e 20 20 c8  |1 . z%=-1..3.  .|
00017e00  8e 20 69 63 25 20 ca 0d  0d 34 17 20 20 20 20 c9  |. ic% ...4.    .|
00017e10  20 35 3a f2 74 63 79 63  6c 65 28 7a 25 29 0d 0d  | 5:.tcycle(z%)..|
00017e20  35 18 20 20 20 20 c9 20  36 3a f2 74 63 79 63 6c  |5.    . 6:.tcycl|
00017e30  65 28 2d 7a 25 29 0d 0d  36 21 20 20 20 20 c9 20  |e(-z%)..6!    . |
00017e40  37 3a f2 66 63 79 63 6c  65 28 7a 25 2c 66 69 65  |7:.fcycle(z%,fie|
00017e50  6c 64 6e 75 6d 25 29 0d  0d 37 22 20 20 20 20 c9  |ldnum%)..7"    .|
00017e60  20 38 3a f2 66 63 79 63  6c 65 28 2d 7a 25 2c 66  | 8:.fcycle(-z%,f|
00017e70  69 65 6c 64 6e 75 6d 25  29 0d 0d 38 20 20 20 20  |ieldnum%)..8    |
00017e80  20 c9 20 31 31 3a f2 66  63 79 63 6c 65 28 7a 25  | . 11:.fcycle(z%|
00017e90  2c 65 78 70 61 6e 64 25  29 0d 0d 39 21 20 20 20  |,expand%)..9!   |
00017ea0  20 c9 20 31 32 3a f2 66  63 79 63 6c 65 28 2d 7a  | . 12:.fcycle(-z|
00017eb0  25 2c 65 78 70 61 6e 64  25 29 0d 0d 3a 0c 20 20  |%,expand%)..:.  |
00017ec0  20 20 c9 20 39 3a 0d 0d  3b 17 20 20 20 20 e3 20  |  . 9:..;.    . |
00017ed0  69 63 6f 6e 25 3d 31 30  20 b8 20 31 32 0d 0d 3c  |icon%=10 . 12..<|
00017ee0  38 20 20 20 20 20 20 f2  69 63 6f 6e 5f 62 69 74  |8      .icon_bit|
00017ef0  28 32 32 2c 6c 69 6e 6b  57 25 2c 69 63 6f 6e 25  |(22,linkW%,icon%|
00017f00  2c a4 73 65 6c 65 63 74  65 64 28 6c 69 6e 6b 57  |,.selected(linkW|
00017f10  25 2c 39 29 29 0d 0d 3d  0f 20 20 20 20 ed 20 69  |%,9))..=.    . i|
00017f20  63 6f 6e 25 0d 0d 3e 0c  20 20 20 20 c9 20 33 3a  |con%..>.    . 3:|
00017f30  0d 0d 3f 22 20 20 20 20  69 63 6f 6e 25 3d 66 69  |..?"    icon%=fi|
00017f40  65 6c 64 25 28 46 69 65  6c 64 6e 75 6d 62 65 72  |eld%(Fieldnumber|
00017f50  25 29 0d 0d 40 31 20 20  20 20 e7 20 a4 73 65 6c  |%)..@1    . .sel|
00017f60  65 63 74 65 64 28 6c 69  6e 6b 57 25 2c 34 29 20  |ected(linkW%,4) |
00017f70  80 20 24 54 61 62 6c 65  6e 61 6d 65 25 3c 3e 22  |. $Tablename%<>"|
00017f80  22 20 8c 0d 0d 41 34 20  20 20 20 20 20 6c 69 6e  |" ...A4      lin|
00017f90  6b 24 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |k$(Fieldnumber%)|
00017fa0  3d 24 54 61 62 6c 65 6e  61 6d 65 25 2b 24 66 69  |=$Tablename%+$fi|
00017fb0  65 6c 64 6e 75 6d 25 0d  0d 42 2f 20 20 20 20 20  |eldnum%..B/     |
00017fc0  20 f2 73 65 74 5f 69 63  6f 6e 5f 63 6f 6c 73 28  | .set_icon_cols(|
00017fd0  6d 61 69 6e 57 25 2c 69  63 6f 6e 25 2c 66 63 6f  |mainW%,icon%,fco|
00017fe0  6c 25 28 36 29 29 0d 0d  43 52 20 20 20 20 20 20  |l%(6))..CR      |
00017ff0  e7 20 a4 73 65 6c 65 63  74 65 64 28 6c 69 6e 6b  |. .selected(link|
00018000  57 25 2c 39 29 20 8c 20  6c 69 6e 6b 24 28 46 69  |W%,9) . link$(Fi|
00018010  65 6c 64 6e 75 6d 62 65  72 25 29 3d 24 65 78 70  |eldnumber%)=$exp|
00018020  61 6e 64 25 2b 6c 69 6e  6b 24 28 46 69 65 6c 64  |and%+link$(Field|
00018030  6e 75 6d 62 65 72 25 29  0d 0d 44 0b 20 20 20 20  |number%)..D.    |
00018040  20 20 cc 0d 0d 45 20 20  20 20 20 20 20 6c 69 6e  |  ...E       lin|
00018050  6b 24 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |k$(Fieldnumber%)|
00018060  3d 22 22 0d 0d 46 28 20  20 20 20 20 20 f2 73 65  |=""..F(      .se|
00018070  74 5f 69 63 6f 6e 5f 63  6f 6c 73 28 6d 61 69 6e  |t_icon_cols(main|
00018080  57 25 2c 69 63 6f 6e 25  2c 37 29 0d 0d 47 09 20  |W%,icon%,7)..G. |
00018090  20 20 20 cd 0d 0d 48 19  20 20 20 20 6c 69 6e 6b  |   ...H.    link|
000180a0  24 28 30 29 3d 22 4c 4f  41 44 45 44 22 0d 0d 49  |$(0)="LOADED"..I|
000180b0  2f 20 20 20 20 e7 20 28  62 25 20 80 20 25 31 31  |/    . (b% . %11|
000180c0  31 29 3d 34 20 8c 20 f2  63 6c 6f 73 65 5f 77 69  |1)=4 . .close_wi|
000180d0  6e 64 6f 77 28 6c 69 6e  6b 57 25 29 0d 0d 4a 07  |ndow(linkW%)..J.|
000180e0  20 20 cb 0d 0d 4b 05 cb  0d 0d 4c 05 e1 0d 0d 4d  |  ...K....L....M|
000180f0  05 3a 0d 0d 4e 11 dd 20  f2 74 63 79 63 6c 65 28  |.:..N.. .tcycle(|
00018100  7a 25 29 0d 0d 4f 17 e7  20 4c 61 73 74 54 61 62  |z%)..O.. LastTab|
00018110  6c 65 25 3d 2d 31 20 8c  20 e1 0d 0d 50 14 54 61  |le%=-1 . ...P.Ta|
00018120  62 6c 65 6e 75 6d 62 65  72 25 2b 3d 7a 25 0d 0d  |blenumber%+=z%..|
00018130  51 2e e7 20 54 61 62 6c  65 6e 75 6d 62 65 72 25  |Q.. Tablenumber%|
00018140  3e 4c 61 73 74 54 61 62  6c 65 25 20 8c 20 54 61  |>LastTable% . Ta|
00018150  62 6c 65 6e 75 6d 62 65  72 25 3d 30 0d 0d 52 2e  |blenumber%=0..R.|
00018160  e7 20 54 61 62 6c 65 6e  75 6d 62 65 72 25 3c 30  |. Tablenumber%<0|
00018170  20 8c 20 54 61 62 6c 65  6e 75 6d 62 65 72 25 3d  | . Tablenumber%=|
00018180  4c 61 73 74 54 61 62 6c  65 25 0d 0d 53 24 24 54  |LastTable%..S$$T|
00018190  61 62 6c 65 6e 61 6d 65  25 3d 74 61 62 6c 65 24  |ablename%=table$|
000181a0  28 54 61 62 6c 65 6e 75  6d 62 65 72 25 29 0d 0d  |(Tablenumber%)..|
000181b0  54 1a f2 72 65 64 72 61  77 5f 69 63 6f 6e 28 6c  |T..redraw_icon(l|
000181c0  69 6e 6b 57 25 2c 30 29  0d 0d 55 05 e1 0d 0d 56  |inkW%,0)..U....V|
000181d0  05 3a 0d 0d 57 19 dd 20  f2 66 63 79 63 6c 65 28  |.:..W.. .fcycle(|
000181e0  7a 25 2c 63 6f 6c 75 6d  6e 25 29 0d 0d 58 45 54  |z%,column%)..XET|
000181f0  24 3d a4 74 61 62 6c 65  5f 69 6e 66 6f 28 54 61  |$=.table_info(Ta|
00018200  62 6c 65 6e 75 6d 62 65  72 25 2c 52 6f 77 73 25  |blenumber%,Rows%|
00018210  2c 54 61 62 46 69 65 6c  64 73 25 2c 52 65 63 25  |,TabFields%,Rec%|
00018220  2c 74 61 62 66 69 65 6c  64 6c 65 6e 25 28 29 29  |,tabfieldlen%())|
00018230  0d 0d 59 16 66 69 65 6c  64 25 3d bb 28 24 63 6f  |..Y.field%=.($co|
00018240  6c 75 6d 6e 25 29 0d 0d  5a 0e 66 69 65 6c 64 25  |lumn%)..Z.field%|
00018250  2b 3d 7a 25 0d 0d 5b 22  e7 20 66 69 65 6c 64 25  |+=z%..[". field%|
00018260  3e 54 61 62 46 69 65 6c  64 73 25 20 8c 20 66 69  |>TabFields% . fi|
00018270  65 6c 64 25 3d 30 0d 0d  5c 22 e7 20 66 69 65 6c  |eld%=0..\". fiel|
00018280  64 25 3c 30 20 8c 20 66  69 65 6c 64 25 3d 54 61  |d%<0 . field%=Ta|
00018290  62 46 69 65 6c 64 73 25  0d 0d 5d 16 24 63 6f 6c  |bFields%..].$col|
000182a0  75 6d 6e 25 3d c3 28 66  69 65 6c 64 25 29 0d 0d  |umn%=.(field%)..|
000182b0  5e 1a f2 72 65 64 72 61  77 5f 69 63 6f 6e 28 6c  |^..redraw_icon(l|
000182c0  69 6e 6b 57 25 2c 32 29  0d 0d 5f 1b f2 72 65 64  |inkW%,2).._..red|
000182d0  72 61 77 5f 69 63 6f 6e  28 6c 69 6e 6b 57 25 2c  |raw_icon(linkW%,|
000182e0  31 30 29 0d 0d 60 05 e1  0d 0d 61 05 3a 0d 0d 62  |10)..`....a.:..b|
000182f0  12 dd 20 f2 6c 69 6e 6b  5f 73 74 61 74 75 73 0d  |.. .link_status.|
00018300  0d 63 25 ea 20 6e 61 6d  65 24 2c 6e 61 6d 65 31  |.c%. name$,name1|
00018310  24 2c 66 69 65 6c 64 24  2c 65 78 70 61 6e 64 24  |$,field$,expand$|
00018320  2c 69 63 25 0d 0d 64 1d  6e 61 6d 65 24 3d 6c 69  |,ic%..d.name$=li|
00018330  6e 6b 24 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |nk$(Fieldnumber%|
00018340  29 0d 0d 65 44 e7 20 97  28 6e 61 6d 65 24 29 3c  |)..eD. .(name$)<|
00018350  35 38 20 80 20 97 28 6e  61 6d 65 24 29 3c 3e 2d  |58 . .(name$)<>-|
00018360  31 20 8c 20 65 78 70 61  6e 64 24 3d c0 6e 61 6d  |1 . expand$=.nam|
00018370  65 24 2c 31 29 3a 6e 61  6d 65 24 3d c1 6e 61 6d  |e$,1):name$=.nam|
00018380  65 24 2c 32 29 0d 0d 66  21 66 69 65 6c 64 24 3d  |e$,2)..f!field$=|
00018390  c2 6e 61 6d 65 24 29 3a  6e 61 6d 65 31 24 3d c0  |.name$):name1$=.|
000183a0  6e 61 6d 65 24 29 0d 0d  67 2d e7 20 28 6e 61 6d  |name$)..g-. (nam|
000183b0  65 31 24 3c 3e 22 22 20  80 20 a7 54 61 62 73 4c  |e1$<>"" . .TabsL|
000183c0  6f 61 64 65 64 24 2c 6e  61 6d 65 31 24 29 3e 30  |oaded$,name1$)>0|
000183d0  29 20 8c 0d 0d 68 3b 20  20 24 54 61 62 6c 65 6e  |) ...h;  $Tablen|
000183e0  61 6d 65 25 3d 6e 61 6d  65 31 24 3a 24 66 69 65  |ame%=name1$:$fie|
000183f0  6c 64 6e 75 6d 25 3d 66  69 65 6c 64 24 3a 24 65  |ldnum%=field$:$e|
00018400  78 70 61 6e 64 25 3d 65  78 70 61 6e 64 24 0d 0d  |xpand%=expand$..|
00018410  69 28 20 20 54 61 62 6c  65 6e 75 6d 62 65 72 25  |i(  Tablenumber%|
00018420  3d a4 74 61 62 6c 65 5f  6e 75 6d 62 65 72 28 6e  |=.table_number(n|
00018430  61 6d 65 31 24 29 0d 0d  6a 17 20 20 f2 73 65 6c  |ame1$)..j.  .sel|
00018440  65 63 74 28 6c 69 6e 6b  57 25 2c 34 29 0d 0d 6b  |ect(linkW%,4)..k|
00018450  07 20 20 cc 0d 0d 6c 14  20 20 54 61 62 6c 65 6e  |.  ...l.  Tablen|
00018460  75 6d 62 65 72 25 3d 30  0d 0d 6d 26 20 20 24 54  |umber%=0..m&  $T|
00018470  61 62 6c 65 6e 61 6d 65  25 3d 74 61 62 6c 65 24  |ablename%=table$|
00018480  28 54 61 62 6c 65 6e 75  6d 62 65 72 25 29 0d 0d  |(Tablenumber%)..|
00018490  6e 28 20 20 f2 64 65 73  65 6c 65 63 74 28 6c 69  |n(  .deselect(li|
000184a0  6e 6b 57 25 2c 34 29 3a  24 66 69 65 6c 64 6e 75  |nkW%,4):$fieldnu|
000184b0  6d 25 3d 22 30 22 0d 0d  6f 05 cd 0d 0d 70 13 e7  |m%="0"..o....p..|
000184c0  20 65 78 70 61 6e 64 24  3c 3e 22 22 20 8c 0d 0d  | expand$<>"" ...|
000184d0  71 28 20 20 f2 73 65 6c  65 63 74 28 6c 69 6e 6b  |q(  .select(link|
000184e0  57 25 2c 39 29 3a 24 65  78 70 61 6e 64 25 3d 65  |W%,9):$expand%=e|
000184f0  78 70 61 6e 64 24 0d 0d  72 28 20 20 cc 20 f2 64  |xpand$..r(  . .d|
00018500  65 73 65 6c 65 63 74 28  6c 69 6e 6b 57 25 2c 39  |eselect(linkW%,9|
00018510  29 3a 24 65 78 70 61 6e  64 25 3d 22 30 22 0d 0d  |):$expand%="0"..|
00018520  73 05 cd 0d 0d 74 11 e3  20 69 63 25 3d 31 30 20  |s....t.. ic%=10 |
00018530  b8 20 31 32 0d 0d 75 32  20 20 f2 69 63 6f 6e 5f  |. 12..u2  .icon_|
00018540  62 69 74 28 32 32 2c 6c  69 6e 6b 57 25 2c 69 63  |bit(22,linkW%,ic|
00018550  25 2c a4 73 65 6c 65 63  74 65 64 28 6c 69 6e 6b  |%,.selected(link|
00018560  57 25 2c 39 29 29 0d 0d  76 09 ed 20 69 63 25 0d  |W%,9))..v.. ic%.|
00018570  0d 77 49 f2 72 65 64 72  61 77 5f 69 63 6f 6e 28  |.wI.redraw_icon(|
00018580  6c 69 6e 6b 57 25 2c 30  29 3a f2 72 65 64 72 61  |linkW%,0):.redra|
00018590  77 5f 69 63 6f 6e 28 6c  69 6e 6b 57 25 2c 32 29  |w_icon(linkW%,2)|
000185a0  3a f2 72 65 64 72 61 77  5f 69 63 6f 6e 28 6c 69  |:.redraw_icon(li|
000185b0  6e 6b 57 25 2c 31 30 29  0d 0d 78 05 e1 0d 0d 79  |nkW%,10)..x....y|
000185c0  05 3a 0d 0d 7a 4b f4 20  45 6e 64 20 6f 66 20 56  |.:..zK. End of V|
000185d0  61 6c 69 64 61 74 69 6f  6e 20 74 61 62 6c 65 20  |alidation table |
000185e0  72 6f 75 74 69 6e 65 73  20 2d 2d 2d 2d 2d 2d 2d  |routines -------|
000185f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00018600  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 0d 0d 7b  |-------------..{|
00018610  05 3a 0d 0d 7c 14 dd 20  f2 63 68 61 6e 67 65 73  |.:..|.. .changes|
00018620  28 6b 65 79 25 29 0d 0d  7d 12 ea 20 4d 24 2c 4b  |(key%)..}.. M$,K|
00018630  25 2c 69 6e 64 65 78 25  0d 0d 7e 3c 53 65 61 72  |%,index%..~<Sear|
00018640  63 68 24 3d a4 70 61 72  73 65 28 24 a4 74 65 78  |ch$=.parse($.tex|
00018650  74 28 63 68 61 6e 67 65  57 25 2c 33 29 2c a4 73  |t(changeW%,3),.s|
00018660  65 6c 65 63 74 65 64 28  63 68 61 6e 67 65 57 25  |elected(changeW%|
00018670  2c 35 29 29 0d 0d 7f 1b  4e 65 77 24 3d 24 a4 74  |,5))....New$=$.t|
00018680  65 78 74 28 63 68 61 6e  67 65 57 25 2c 31 29 0d  |ext(changeW%,1).|
00018690  0d 80 25 e7 20 4e 65 77  24 3d 22 22 20 8c 20 6e  |..%. New$="" . n|
000186a0  24 3d 22 3c 6e 75 6c 6c  3e 22 20 8b 20 6e 24 3d  |$="<null>" . n$=|
000186b0  4e 65 77 24 0d 0d 81 26  e7 20 4e 65 77 24 3c 3e  |New$...&. New$<>|
000186c0  22 22 20 80 20 a7 22 2b  2d 2a 2f 22 2c c0 4e 65  |"" . ."+-*/",.Ne|
000186d0  77 24 2c 31 29 29 3e 30  20 8c 0d 0d 82 10 20 20  |w$,1))>0 .....  |
000186e0  6e 75 6d 65 72 69 63 25  3d b9 0d 0d 83 12 20 20  |numeric%=.....  |
000186f0  cc 20 6e 75 6d 65 72 69  63 25 3d a3 0d 0d 84 05  |. numeric%=.....|
00018700  cd 0d 0d 85 1e 4b 25 3d  a4 69 73 5f 61 5f 6b 65  |.....K%=.is_a_ke|
00018710  79 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 29 0d  |y(Fieldnumber%).|
00018720  0d 86 3c e7 20 4b 25 3d  6b 65 79 25 20 8c 20 f2  |..<. K%=key% . .|
00018730  73 6f 66 74 65 72 72 6f  72 28 22 22 2c 31 32 29  |softerror("",12)|
00018740  3a c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |:.. "Wimp_Create|
00018750  4d 65 6e 75 22 2c 2c 2d  31 3a e1 0d 0d 87 62 e7  |Menu",,-1:....b.|
00018760  20 4b 25 3e 3d 30 20 8c  20 4d 24 3d 22 20 4e 4f  | K%>=0 . M$=" NO|
00018770  54 45 21 20 49 6e 64 65  78 20 6f 6e 20 74 68 69  |TE! Index on thi|
00018780  73 20 66 69 65 6c 64 20  77 69 6c 6c 20 4e 4f 20  |s field will NO |
00018790  4c 4f 4e 47 45 52 20 42  45 20 56 41 4c 49 44 20  |LONGER BE VALID |
000187a0  61 6e 64 20 77 69 6c 6c  20 62 65 20 64 65 6c 65  |and will be dele|
000187b0  74 65 64 2e 22 20 8b 20  4d 24 3d 22 22 0d 0d 88  |ted." . M$=""...|
000187c0  29 50 25 3d a7 54 69 74  6c 65 24 2c 22 2e 20 22  |)P%=.Title$,". "|
000187d0  29 3a 54 69 74 6c 65 24  3d c1 54 69 74 6c 65 24  |):Title$=.Title$|
000187e0  2c 50 25 2b 32 29 0d 0d  89 4c e7 20 54 69 74 6c  |,P%+2)...L. Titl|
000187f0  65 24 3c 3e 22 41 6c 6c  20 72 65 63 6f 72 64 73  |e$<>"All records|
00018800  22 20 8c 20 54 69 74 6c  65 24 3d 22 20 77 68 65  |" . Title$=" whe|
00018810  6e 20 22 2b 54 69 74 6c  65 24 20 8b 20 54 69 74  |n "+Title$ . Tit|
00018820  6c 65 24 3d 22 20 66 6f  72 20 22 2b 54 69 74 6c  |le$=" for "+Titl|
00018830  65 24 0d 0d 8a 38 54 69  74 6c 65 24 3d 22 43 68  |e$...8Title$="Ch|
00018840  61 6e 67 65 20 22 2b 46  69 65 6c 64 6e 61 6d 65  |ange "+Fieldname|
00018850  24 2b 22 20 74 6f 20 22  2b 6e 24 2b 54 69 74 6c  |$+" to "+n$+Titl|
00018860  65 24 2b 22 2e 20 22 2b  4d 24 0d 0d 8b 1a e7 20  |e$+". "+M$..... |
00018870  a4 63 6f 6e 66 69 72 6d  28 54 69 74 6c 65 24 29  |.confirm(Title$)|
00018880  3d b9 20 8c 0d 0d 8c 27  20 20 73 75 62 74 6f 74  |=. ....'  subtot|
00018890  61 6c 25 3d a4 63 6f 75  6e 74 5f 72 65 63 73 28  |al%=.count_recs(|
000188a0  6b 65 79 25 2c 7a 65 72  6f 25 29 0d 0d 8d 17 20  |key%,zero%).... |
000188b0  20 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 4f  | .. "Hourglass_O|
000188c0  6e 22 0d 0d 8e 2c 20 20  64 62 61 73 65 68 61 6e  |n"...,  dbasehan|
000188d0  64 6c 65 25 3d ad 28 24  64 61 74 61 62 61 73 65  |dle%=.($database|
000188e0  25 2b 22 2e 44 61 74 61  62 61 73 65 22 29 0d 0d  |%+".Database")..|
000188f0  8f 1f 20 20 50 25 3d a4  6e 65 69 67 68 62 6f 75  |..  P%=.neighbou|
00018900  72 28 6b 65 79 25 2c 74  6f 70 2c 31 29 0d 0d 90  |r(key%,top,1)...|
00018910  22 20 20 f2 73 63 61 6e  5f 66 69 6c 65 28 22 50  |"  .scan_file("P|
00018920  25 3c 3e 74 6f 70 22 2c  6b 65 79 25 2c 35 29 0d  |%<>top",key%,5).|
00018930  0d 91 1f 20 20 f2 63 6c  6f 73 65 5f 66 69 6c 65  |...  .close_file|
00018940  28 64 62 61 73 65 68 61  6e 64 6c 65 25 29 0d 0d  |(dbasehandle%)..|
00018950  92 19 20 20 24 44 61 74  65 25 28 66 69 6c 65 25  |..  $Date%(file%|
00018960  29 3d a4 64 61 74 65 0d  0d 93 13 20 20 64 61 74  |)=.date....  dat|
00018970  65 25 3f 66 69 6c 65 25  3d 31 0d 0d 94 19 20 20  |e%?file%=1....  |
00018980  f2 64 69 73 70 6c 61 79  28 6b 65 79 25 2c 61 64  |.display(key%,ad|
00018990  64 72 29 0d 0d 95 18 20  20 c8 99 20 22 48 6f 75  |dr)....  .. "Hou|
000189a0  72 67 6c 61 73 73 5f 4f  66 66 22 0d 0d 96 0f 20  |rglass_Off".... |
000189b0  20 e7 20 4b 25 3e 3d 30  20 8c 0d 0d 97 1b 20 20  | . K%>=0 .....  |
000189c0  20 20 e3 20 69 6e 64 65  78 25 3d 4b 25 20 b8 20  |  . index%=K% . |
000189d0  4b 65 79 73 25 0d 0d 98  21 20 20 20 20 20 20 49  |Keys%...!      I|
000189e0  6e 64 65 78 24 28 4b 25  29 3d 49 6e 64 65 78 24  |ndex$(K%)=Index$|
000189f0  28 4b 25 2b 31 29 0d 0d  99 10 20 20 20 20 ed 20  |(K%+1)....    . |
00018a00  69 6e 64 65 78 25 0d 0d  9a 2c 20 20 20 20 f2 73  |index%...,    .s|
00018a10  63 72 61 70 5f 73 6c 69  64 69 6e 67 5f 62 6c 6f  |crap_sliding_blo|
00018a20  63 6b 28 6b 65 79 61 6e  63 68 6f 72 25 28 4b 25  |ck(keyanchor%(K%|
00018a30  29 29 0d 0d 9b 10 20 20  20 20 4b 65 79 73 25 2d  |))....    Keys%-|
00018a40  3d 31 0d 0d 9c 07 20 20  cd 0d 0d 9d 32 20 20 e7  |=1....  ....2  .|
00018a50  20 a4 73 65 6c 65 63 74  65 64 28 70 61 73 73 57  | .selected(passW|
00018a60  25 2c 31 36 29 20 8c 20  d5 23 6c 6f 67 68 61 6e  |%,16) . .#loghan|
00018a70  64 6c 65 25 2c 54 69 74  6c 65 24 0d 0d 9e 05 cd  |dle%,Title$.....|
00018a80  0d 0d 9f 1c c8 99 20 22  57 69 6d 70 5f 43 72 65  |...... "Wimp_Cre|
00018a90  61 74 65 4d 65 6e 75 22  2c 2c 2d 31 0d 0d a0 05  |ateMenu",,-1....|
00018aa0  e1 0d 0d a1 05 3a 0d 0d  a2 13 dd 20 a4 69 73 5f  |.....:..... .is_|
00018ab0  61 5f 6b 65 79 28 46 25  29 0d 0d a3 10 ea 20 6b  |a_key(F%)..... k|
00018ac0  65 79 25 2c 66 6c 61 67  25 0d 0d a4 0c 66 6c 61  |ey%,flag%....fla|
00018ad0  67 25 3d 2d 31 0d 0d a5  14 e3 20 6b 65 79 25 3d  |g%=-1..... key%=|
00018ae0  30 20 b8 20 4b 65 79 73  25 0d 0d a6 34 20 20 e7  |0 . Keys%...4  .|
00018af0  20 4b 46 25 28 6b 65 79  25 2c 30 29 3d 46 25 20  | KF%(key%,0)=F% |
00018b00  84 20 4b 46 25 28 6b 65  79 25 2c 31 29 3d 46 25  |. KF%(key%,1)=F%|
00018b10  20 8c 20 66 6c 61 67 25  3d 6b 65 79 25 0d 0d a7  | . flag%=key%...|
00018b20  0a ed 20 6b 65 79 25 0d  0d a8 0a 3d 66 6c 61 67  |.. key%....=flag|
00018b30  25 0d 0d a9 05 3a 0d 0d  aa 18 dd 20 f2 72 65 61  |%....:..... .rea|
00018b40  64 28 4e 25 2c 4b 25 2c  52 25 2c 66 24 29 0d 0d  |d(N%,K%,R%,f$)..|
00018b50  ab 1a ea 20 49 25 2c 6b  65 79 25 2c 64 62 61 73  |... I%,key%,dbas|
00018b60  65 68 61 6e 64 6c 65 25  0d 0d ac 22 64 62 61 73  |ehandle%..."dbas|
00018b70  65 68 61 6e 64 6c 65 25  3d 8e 28 66 24 2b 22 2e  |ehandle%=.(f$+".|
00018b80  44 61 74 61 62 61 73 65  22 29 0d 0d ad 25 24 52  |Database")...%$R|
00018b90  66 25 28 30 29 3d 22 22  3a 66 69 65 6c 64 24 28  |f%(0)="":field$(|
00018ba0  30 29 3d 22 22 3a 6b 65  79 24 28 29 3d 22 22 0d  |0)="":key$()="".|
00018bb0  0d ae 20 cf 23 64 62 61  73 65 68 61 6e 64 6c 65  |.. .#dbasehandle|
00018bc0  25 3d 94 28 52 25 29 2a  4c 65 6e 67 74 68 25 0d  |%=.(R%)*Length%.|
00018bd0  0d af 0f e3 20 49 25 3d  31 20 b8 20 4e 25 0d 0d  |.... I%=1 . N%..|
00018be0  b0 1f 20 20 66 69 65 6c  64 24 28 49 25 29 3d be  |..  field$(I%)=.|
00018bf0  23 64 62 61 73 65 68 61  6e 64 6c 65 25 0d 0d b1  |#dbasehandle%...|
00018c00  43 20 20 e7 20 63 68 61  72 74 79 70 65 25 28 49  |C  . chartype%(I|
00018c10  25 29 3c 3e 34 30 20 80  20 63 68 61 72 74 79 70  |%)<>40 . chartyp|
00018c20  65 25 28 49 25 29 3c 3e  35 39 20 8c 20 24 52 66  |e%(I%)<>59 . $Rf|
00018c30  25 28 49 25 29 3d 66 69  65 6c 64 24 28 49 25 29  |%(I%)=field$(I%)|
00018c40  0d 0d b2 18 20 20 c8 8e  20 63 68 61 72 74 79 70  |....  .. chartyp|
00018c50  65 25 28 49 25 29 20 ca  0d 0d b3 38 20 20 20 20  |e%(I%) ....8    |
00018c60  c9 20 33 36 2c 33 37 2c  33 38 3a f2 73 65 74 5f  |. 36,37,38:.set_|
00018c70  62 6c 6f 62 5f 73 70 72  69 74 65 28 52 25 2c 49  |blob_sprite(R%,I|
00018c80  25 2c 63 68 61 72 74 79  70 65 25 28 49 25 29 29  |%,chartype%(I%))|
00018c90  0d 0d b4 21 20 20 20 20  c9 20 33 39 3a f2 73 68  |...!    . 39:.sh|
00018ca0  6f 77 5f 74 65 78 74 5f  62 6c 6f 63 6b 28 49 25  |ow_text_block(I%|
00018cb0  29 0d 0d b5 1e 20 20 20  20 c9 20 34 30 3a f2 73  |)....    . 40:.s|
00018cc0  68 6f 77 5f 70 69 63 74  75 72 65 28 49 25 29 0d  |how_picture(I%).|
00018cd0  0d b6 19 20 20 20 20 c9  20 34 31 2c 34 32 2c 34  |...    . 41,42,4|
00018ce0  33 2c 34 34 2c 34 35 3a  0d 0d b7 54 20 20 20 20  |3,44,45:...T    |
00018cf0  e7 20 66 69 65 6c 64 24  28 49 25 29 3d 22 20 22  |. field$(I%)=" "|
00018d00  20 8c 20 f2 73 65 6c 65  63 74 28 6d 61 69 6e 57  | . .select(mainW|
00018d10  25 2c 66 69 65 6c 64 25  28 49 25 29 29 20 8b 20  |%,field%(I%)) . |
00018d20  f2 64 65 73 65 6c 65 63  74 28 6d 61 69 6e 57 25  |.deselect(mainW%|
00018d30  2c 66 69 65 6c 64 25 28  49 25 29 29 0d 0d b8 2c  |,field%(I%))...,|
00018d40  20 20 20 20 c9 20 34 36  3a e7 20 52 25 3d 52 41  |    . 46:. R%=RA|
00018d50  25 20 8c 20 24 52 66 25  28 49 25 29 3d c3 28 6e  |% . $Rf%(I%)=.(n|
00018d60  65 78 74 72 65 63 25 29  0d 0d b9 39 20 20 20 20  |extrec%)...9    |
00018d70  c9 20 34 37 3a e7 20 52  25 3d 52 41 25 20 8c 20  |. 47:. R%=RA% . |
00018d80  f2 73 70 6c 69 74 5f 6c  69 6e 6b 28 49 25 2c 52  |.split_link(I%,R|
00018d90  24 2c 56 24 29 3a 24 52  66 25 28 49 25 29 3d 52  |$,V$):$Rf%(I%)=R|
00018da0  24 0d 0d ba 27 20 20 20  20 c9 20 34 38 3a e7 20  |$...'    . 48:. |
00018db0  52 25 3d 52 41 25 20 8c  20 24 52 66 25 28 49 25  |R%=RA% . $Rf%(I%|
00018dc0  29 3d c2 91 24 2c 38 29  0d 0d bb 28 20 20 20 20  |)=..$,8)...(    |
00018dd0  c9 20 34 39 3a e7 20 52  25 3d 52 41 25 20 8c 20  |. 49:. R%=RA% . |
00018de0  24 52 66 25 28 49 25 29  3d c0 91 24 2c 31 35 29  |$Rf%(I%)=..$,15)|
00018df0  0d 0d bc 31 20 20 20 20  c9 20 35 30 3a e7 20 52  |...1    . 50:. R|
00018e00  25 3d 52 41 25 20 8c 20  24 52 66 25 28 49 25 29  |%=RA% . $Rf%(I%)|
00018e10  3d a4 63 6f 6e 76 65 72  74 5f 64 61 74 65 28 32  |=.convert_date(2|
00018e20  29 0d 0d bd 31 20 20 20  20 c9 20 35 31 3a e7 20  |)...1    . 51:. |
00018e30  52 25 3d 52 41 25 20 8c  20 24 52 66 25 28 49 25  |R%=RA% . $Rf%(I%|
00018e40  29 3d a4 63 6f 6e 76 65  72 74 5f 64 61 74 65 28  |)=.convert_date(|
00018e50  34 29 0d 0d be 23 20 20  20 20 c9 20 35 32 3a e7  |4)...#    . 52:.|
00018e60  20 52 25 3d 52 41 25 20  8c 20 24 52 66 25 28 49  | R%=RA% . $Rf%(I|
00018e70  25 29 3d 91 24 0d 0d bf  27 20 20 20 20 c9 20 35  |%)=.$...'    . 5|
00018e80  33 3a e7 20 52 25 3d 52  41 25 20 8c 20 24 52 66  |3:. R%=RA% . $Rf|
00018e90  25 28 49 25 29 3d c0 91  24 2c 33 29 0d 0d c0 29  |%(I%)=..$,3)...)|
00018ea0  20 20 20 20 c9 20 35 34  3a e7 20 52 25 3d 52 41  |    . 54:. R%=RA|
00018eb0  25 20 8c 20 24 52 66 25  28 49 25 29 3d c1 91 24  |% . $Rf%(I%)=..$|
00018ec0  2c 35 2c 32 29 0d 0d c1  29 20 20 20 20 c9 20 35  |,5,2)...)    . 5|
00018ed0  35 3a e7 20 52 25 3d 52  41 25 20 8c 20 24 52 66  |5:. R%=RA% . $Rf|
00018ee0  25 28 49 25 29 3d c1 91  24 2c 38 2c 33 29 0d 0d  |%(I%)=..$,8,3)..|
00018ef0  c2 4a 20 20 20 20 c9 20  35 36 3a e7 20 52 25 3d  |.J    . 56:. R%=|
00018f00  52 41 25 20 8c 20 4d 24  3d c1 91 24 2c 38 2c 33  |RA% . M$=..$,8,3|
00018f10  29 3a 50 25 3d a7 6d 6f  6e 74 68 73 24 2c 4d 24  |):P%=.months$,M$|
00018f20  29 3a 24 52 66 25 28 49  25 29 3d c3 28 28 50 25  |):$Rf%(I%)=.((P%|
00018f30  2b 32 29 20 81 20 33 29  0d 0d c3 2a 20 20 20 20  |+2) . 3)...*    |
00018f40  c9 20 35 37 3a e7 20 52  25 3d 52 41 25 20 8c 20  |. 57:. R%=RA% . |
00018f50  24 52 66 25 28 49 25 29  3d c1 91 24 2c 31 32 2c  |$Rf%(I%)=..$,12,|
00018f60  34 29 0d 0d c4 07 20 20  cb 0d 0d c5 08 ed 20 49  |4)....  ...... I|
00018f70  25 0d 0d c6 0a e7 20 4b  25 20 8c 0d 0d c7 16 20  |%..... K% ..... |
00018f80  20 e3 20 6b 65 79 25 3d  30 20 b8 20 4b 65 79 73  | . key%=0 . Keys|
00018f90  25 0d 0d c8 1d 20 20 20  20 6b 65 79 24 28 6b 65  |%....    key$(ke|
00018fa0  79 25 29 3d a4 6b 65 79  28 6b 65 79 25 29 0d 0d  |y%)=.key(key%)..|
00018fb0  c9 0c 20 20 ed 20 6b 65  79 25 0d 0d ca 05 cd 0d  |..  . key%......|
00018fc0  0d cb 1d f2 63 6c 6f 73  65 5f 66 69 6c 65 28 64  |....close_file(d|
00018fd0  62 61 73 65 68 61 6e 64  6c 65 25 29 0d 0d cc 05  |basehandle%)....|
00018fe0  e1 0d 0d cd 05 3a 0d 0d  ce 17 dd 20 f2 75 70 64  |.....:..... .upd|
00018ff0  61 74 65 5f 63 61 6c 63  73 28 4e 25 29 0d 0d cf  |ate_calcs(N%)...|
00019000  11 e7 20 64 65 73 69 67  6e 25 20 8c 20 e1 0d 0d  |.. design% . ...|
00019010  d0 20 ea 20 49 25 2c 43  25 2c 4c 25 2c 46 2c 46  |. . I%,C%,L%,F,F|
00019020  24 2c 46 6f 72 6d 24 2c  53 24 2c 53 46 24 0d 0d  |$,Form$,S$,SF$..|
00019030  d1 15 46 6f 72 6d 24 3d  75 70 64 61 74 65 24 28  |..Form$=update$(|
00019040  4e 25 29 0d 0d d2 13 e7  20 a9 20 46 6f 72 6d 24  |N%)..... . Form$|
00019050  3d 30 20 8c 20 e1 0d 0d  d3 1b e3 20 49 25 3d 31  |=0 . ...... I%=1|
00019060  20 b8 20 a9 28 46 6f 72  6d 24 29 2d 31 20 88 20  | . .(Form$)-1 . |
00019070  32 0d 0d d4 1c 20 20 46  25 3d a4 66 6e 75 6d 28  |2....  F%=.fnum(|
00019080  c1 46 6f 72 6d 24 2c 49  25 2c 32 29 29 0d 0d d5  |.Form$,I%,2))...|
00019090  24 20 20 f2 73 70 6c 69  74 5f 6c 69 6e 6b 28 46  |$  .split_link(F|
000190a0  25 2c 72 65 61 6c 24 2c  76 69 73 69 62 6c 65 24  |%,real$,visible$|
000190b0  29 0d 0d d6 09 20 20 ea  20 85 0d 0d d7 1d 20 20  |)....  . .....  |
000190c0  ee 20 85 20 ea 3a f7 20  85 3a f2 63 61 6c 63 5f  |. . .:. .:.calc_|
000190d0  65 72 72 6f 72 3a e1 0d  0d d8 18 20 20 c8 8e 20  |error:.....  .. |
000190e0  63 68 61 72 74 79 70 65  25 28 46 25 29 20 ca 0d  |chartype%(F%) ..|
000190f0  0d d9 0c 20 20 20 20 c9  20 36 3a 0d 0d da 3e 20  |...    . 6:...> |
00019100  20 20 20 46 3d a0 28 72  65 61 6c 24 29 3a 46 24  |   F=.(real$):F$|
00019110  3d c3 28 46 29 3a e7 20  66 69 78 25 28 46 25 29  |=.(F):. fix%(F%)|
00019120  3e 30 20 8c 20 46 24 3d  a4 66 69 78 5f 70 6f 69  |>0 . F$=.fix_poi|
00019130  6e 74 28 46 24 2c 46 25  29 0d 0d db 0c 20 20 20  |nt(F$,F%)....   |
00019140  20 c9 20 37 3a 0d 0d dc  13 20 20 20 20 46 24 3d  | . 7:....    F$=|
00019150  a0 28 72 65 61 6c 24 29  0d 0d dd 37 20 20 20 20  |.(real$)...7    |
00019160  e7 20 4e 25 3d 30 20 8c  20 53 24 3d a4 65 78 70  |. N%=0 . S$=.exp|
00019170  61 6e 64 28 46 24 2c 6c  69 6e 6b 24 28 46 25 29  |and(F$,link$(F%)|
00019180  2c 4c 25 2c 53 46 24 29  3a 46 24 3d 53 46 24 0d  |,L%,SF$):F$=SF$.|
00019190  0d de 07 20 20 cb 0d 0d  df 09 20 20 f7 20 85 0d  |...  .....  . ..|
000191a0  0d e0 45 20 20 e7 20 a9  28 46 24 29 3c 3d 6c 65  |..E  . .(F$)<=le|
000191b0  6e 25 28 46 25 29 20 8c  20 24 52 66 25 28 46 25  |n%(F%) . $Rf%(F%|
000191c0  29 3d 46 24 3a f2 72 65  64 72 61 77 5f 69 63 6f  |)=F$:.redraw_ico|
000191d0  6e 28 6d 61 69 6e 57 25  2c 66 69 65 6c 64 25 28  |n(mainW%,field%(|
000191e0  46 25 29 29 0d 0d e1 17  20 20 f2 75 70 64 61 74  |F%))....  .updat|
000191f0  65 5f 63 61 6c 63 73 28  46 25 29 0d 0d e2 08 ed  |e_calcs(F%).....|
00019200  20 49 25 0d 0d e3 05 e1  0d 0d e4 05 3a 0d 0d e5  | I%.........:...|
00019210  11 dd 20 f2 63 61 6c 63  5f 65 72 72 6f 72 0d 0d  |.. .calc_error..|
00019220  e6 14 e7 20 63 61 6c 63  65 72 72 6f 72 25 3d a3  |... calcerror%=.|
00019230  20 8c 0d 0d e7 1b 20 20  f2 77 69 6d 70 5f 65 72  | .....  .wimp_er|
00019240  72 6f 72 28 b9 2c 9f 2c  9e 2c f6 24 29 0d 0d e8  |ror(.,.,.,.$)...|
00019250  23 20 20 f4 20 50 52 4f  43 73 6f 66 74 65 72 72  |#  . PROCsofterr|
00019260  6f 72 28 63 61 6c 63 24  28 49 25 29 2c 37 33 29  |or(calc$(I%),73)|
00019270  0d 0d e9 12 20 20 63 61  6c 63 65 72 72 6f 72 25  |....  calcerror%|
00019280  3d b9 0d 0d ea 13 20 20  cc 20 63 61 6c 63 65 72  |=.....  . calcer|
00019290  72 6f 72 3d a3 0d 0d eb  05 cd 0d 0d ec 05 e1 0d  |ror=............|
000192a0  0d ed 05 3b 0d 0d ee 13  dd 20 f2 63 68 65 63 6b  |...;..... .check|
000192b0  5f 63 68 61 6e 67 65 0d  0d ef 0e ea 20 46 25 2c  |_change..... F%,|
000192c0  66 6c 61 67 25 0d 0d f0  1b c8 95 20 46 25 3c 66  |flag%...... F%<f|
000192d0  69 65 6c 64 73 25 20 80  20 66 6c 61 67 25 3d a3  |ields% . flag%=.|
000192e0  0d 0d f1 0b 20 20 46 25  2b 3d 31 0d 0d f2 18 20  |....  F%+=1.... |
000192f0  20 c8 8e 20 63 68 61 72  74 79 70 65 25 28 46 25  | .. chartype%(F%|
00019300  29 20 ca 0d 0d f3 2b 20  20 20 20 c9 20 30 2c 31  |) ....+    . 0,1|
00019310  2c 32 2c 33 2c 34 2c 35  2c 36 2c 37 2c 38 2c 34  |,2,3,4,5,6,7,8,4|
00019320  31 2c 34 32 2c 34 33 2c  34 34 2c 34 35 3a 0d 0d  |1,42,43,44,45:..|
00019330  f4 28 20 20 20 20 e7 20  24 52 66 25 28 46 25 29  |.(    . $Rf%(F%)|
00019340  3c 3e 66 69 65 6c 64 24  28 46 25 29 20 8c 20 66  |<>field$(F%) . f|
00019350  6c 61 67 25 3d b9 0d 0d  f5 07 20 20 cb 0d 0d f6  |lag%=.....  ....|
00019360  05 ce 0d 0d f7 2a e7 20  66 6c 61 67 25 20 8c 20  |.....*. flag% . |
00019370  f2 77 72 69 74 65 28 66  69 65 6c 64 73 25 2c 6b  |.write(fields%,k|
00019380  65 79 25 29 3a 77 61 72  6e 25 3d b9 0d 0d f8 05  |ey%):warn%=.....|
00019390  e1 0d 0d f9 05 3a 0d 0d  fa 13 dd 20 f2 77 72 69  |.....:..... .wri|
000193a0  74 65 28 4e 25 2c 6b 25  29 0d 0d fb 19 ea 20 6b  |te(N%,k%)..... k|
000193b0  65 79 25 2c 6e 65 77 72  65 63 25 2c 61 6c 74 65  |ey%,newrec%,alte|
000193c0  72 25 0d 0d fc 25 e7 20  ac 20 41 63 63 65 73 73  |r%...%. . Access|
000193d0  25 20 8c 20 f2 73 6f 66  74 65 72 72 6f 72 28 22  |% . .softerror("|
000193e0  22 2c 31 34 29 3a e1 0d  0d fd 1d f2 63 6c 6f 73  |",14):......clos|
000193f0  65 5f 66 69 6c 65 28 64  62 61 73 65 68 61 6e 64  |e_file(dbasehand|
00019400  6c 65 25 29 0d 0d fe 36  e7 20 74 65 6d 70 6c 61  |le%)...6. templa|
00019410  74 65 25 3d 32 20 8c 20  f2 77 72 69 74 65 5f 64  |te%=2 . .write_d|
00019420  62 61 73 65 28 52 41 25  2c 4e 25 29 3a 74 65 6d  |base(RA%,N%):tem|
00019430  70 6c 61 74 65 25 3d 30  3a e1 0d 0d ff 10 50 52  |plate%=0:.....PR|
00019440  49 24 3d a4 6b 65 79 28  30 29 0d 0e 00 10 e7 20  |I$=.key(0)..... |
00019450  50 52 49 24 3c 3e 22 22  20 8c 0d 0e 01 1e 20 20  |PRI$<>"" .....  |
00019460  6b 6c 25 3d 4b 4c 25 28  30 29 3a 76 61 6c 24 3d  |kl%=KL%(0):val$=|
00019470  a4 74 79 70 65 28 30 29  0d 0e 02 14 20 20 e7 20  |.type(0)....  . |
00019480  6b 65 79 24 28 30 29 3d  22 22 20 8c 0d 0e 03 19  |key$(0)="" .....|
00019490  20 20 20 20 f2 69 6e 73  65 72 74 28 b9 2c 50 52  |    .insert(.,PR|
000194a0  49 24 2c 30 29 0d 0e 04  1c 20 20 20 20 e7 20 50  |I$,0)....    . P|
000194b0  52 49 24 3c 3e 22 2a 46  61 69 6c 65 64 2a 22 20  |RI$<>"*Failed*" |
000194c0  8c 0d 0e 05 13 20 20 20  20 20 20 6e 65 77 72 65  |.....      newre|
000194d0  63 25 3d b9 0d 0e 06 1a  20 20 20 20 20 20 e7 20  |c%=.....      . |
000194e0  6b 25 3d 30 20 8c 20 61  64 64 72 3d 46 25 0d 0e  |k%=0 . addr=F%..|
000194f0  07 09 20 20 20 20 cd 0d  0e 08 09 20 20 20 20 cc  |..    .....    .|
00019500  0d 0e 09 18 20 20 20 20  e7 20 50 52 49 24 3d 6b  |....    . PRI$=k|
00019510  65 79 24 28 30 29 20 8c  0d 0e 0a 12 20 20 20 20  |ey$(0) .....    |
00019520  20 20 61 6c 74 65 72 25  3d b9 0d 0e 0b 0b 20 20  |  alter%=.....  |
00019530  20 20 20 20 cc 0d 0e 0c  22 20 20 20 20 20 20 e7  |    ...."      .|
00019540  20 a4 63 6f 6e 66 69 72  6d 28 a4 6d 73 67 28 34  | .confirm(.msg(4|
00019550  38 29 29 3d b9 20 8c 0d  0e 0d 14 20 20 20 20 20  |8))=. .....     |
00019560  20 20 20 61 6c 74 65 72  25 3d b9 0d 0e 0e 1e 20  |   alter%=..... |
00019570  20 20 20 20 20 20 20 f2  64 65 6c 65 74 65 28 6b  |       .delete(k|
00019580  65 79 24 28 30 29 2c 30  29 0d 0e 0f 1d 20 20 20  |ey$(0),0)....   |
00019590  20 20 20 20 20 f2 69 6e  73 65 72 74 28 b9 2c 50  |     .insert(.,P|
000195a0  52 49 24 2c 30 29 0d 0e  10 1c 20 20 20 20 20 20  |RI$,0)....      |
000195b0  20 20 e7 20 6b 25 3d 30  20 8c 20 61 64 64 72 3d  |  . k%=0 . addr=|
000195c0  46 25 0d 0e 11 0b 20 20  20 20 20 20 cd 0d 0e 12  |F%....      ....|
000195d0  09 20 20 20 20 cd 0d 0e  13 07 20 20 cd 0d 0e 14  |.    .....  ....|
000195e0  05 cd 0d 0e 15 1e e7 20  ac 20 6e 65 77 72 65 63  |....... . newrec|
000195f0  25 20 80 20 ac 20 61 6c  74 65 72 25 20 8c 20 e1  |% . . alter% . .|
00019600  0d 0e 16 11 c8 95 20 6b  65 79 25 3c 4b 65 79 73  |...... key%<Keys|
00019610  25 0d 0e 17 0d 20 20 6b  65 79 25 2b 3d 31 0d 0e  |%....  key%+=1..|
00019620  18 15 20 20 4b 45 59 24  3d a4 6b 65 79 28 6b 65  |..  KEY$=.key(ke|
00019630  79 25 29 0d 0e 19 2a 20  20 e7 20 4b 45 59 24 3c  |y%)...*  . KEY$<|
00019640  3e 6b 65 79 24 28 6b 65  79 25 29 20 84 20 6b 65  |>key$(key%) . ke|
00019650  79 24 28 6b 65 79 25 29  3d 22 22 20 8c 0d 0e 1a  |y$(key%)="" ....|
00019660  26 20 20 20 20 6b 6c 25  3d 4b 4c 25 28 6b 65 79  |&    kl%=KL%(key|
00019670  25 29 3a 76 61 6c 24 3d  a4 74 79 70 65 28 6b 65  |%):val$=.type(ke|
00019680  79 25 29 0d 0e 1b 2e 20  20 20 20 e7 20 ac 20 6e  |y%)....    . . n|
00019690  65 77 72 65 63 25 20 8c  20 f2 64 65 6c 65 74 65  |ewrec% . .delete|
000196a0  28 6b 65 79 24 28 6b 65  79 25 29 2c 6b 65 79 25  |(key$(key%),key%|
000196b0  29 0d 0e 1c 1c 20 20 20  20 f2 69 6e 73 65 72 74  |)....    .insert|
000196c0  28 a3 2c 4b 45 59 24 2c  6b 65 79 25 29 0d 0e 1d  |(.,KEY$,key%)...|
000196d0  1b 20 20 20 20 e7 20 6b  65 79 25 3d 6b 25 20 8c  |.    . key%=k% .|
000196e0  20 61 64 64 72 3d 46 25  0d 0e 1e 07 20 20 cd 0d  | addr=F%....  ..|
000196f0  0e 1f 05 ce 0d 0e 20 17  24 44 61 74 65 25 28 66  |...... .$Date%(f|
00019700  69 6c 65 25 29 3d a4 64  61 74 65 0d 0e 21 11 64  |ile%)=.date..!.d|
00019710  61 74 65 25 3f 66 69 6c  65 25 3d 31 0d 0e 22 28  |ate%?file%=1.."(|
00019720  e7 20 ac 20 6e 65 77 74  72 65 65 25 20 8c 20 f2  |. . newtree% . .|
00019730  77 72 69 74 65 5f 64 62  61 73 65 28 52 45 43 25  |write_dbase(REC%|
00019740  2c 4e 25 29 0d 0e 23 1e  e7 20 6e 65 77 72 65 63  |,N%)..#.. newrec|
00019750  25 20 80 20 61 75 74 6f  62 61 6c 61 6e 63 65 25  |% . autobalance%|
00019760  20 8c 0d 0e 24 0f 20 20  61 64 64 65 64 25 2b 3d  | ...$.  added%+=|
00019770  31 0d 0e 25 18 20 20 e7  20 61 64 64 65 64 25 3d  |1..%.  . added%=|
00019780  62 61 6c 69 6e 74 25 20  8c 0d 0e 26 18 20 20 20  |balint% ...&.   |
00019790  20 e3 20 6b 65 79 25 3d  30 20 b8 20 4b 65 79 73  | . key%=0 . Keys|
000197a0  25 0d 0e 27 18 20 20 20  20 20 20 f2 62 61 6c 61  |%..'.      .bala|
000197b0  6e 63 65 28 6b 65 79 25  29 0d 0e 28 0e 20 20 20  |nce(key%)..(.   |
000197c0  20 ed 20 6b 65 79 25 0d  0e 29 10 20 20 20 20 61  | . key%..).    a|
000197d0  64 64 65 64 25 3d 30 0d  0e 2a 07 20 20 cd 0d 0e  |dded%=0..*.  ...|
000197e0  2b 05 cd 0d 0e 2c 05 e1  0d 0e 2d 05 3a 0d 0e 2e  |+....,....-.:...|
000197f0  19 dd 20 f2 77 72 69 74  65 5f 64 62 61 73 65 28  |.. .write_dbase(|
00019800  52 25 2c 4e 25 29 0d 0e  2f 1e ea 20 49 25 2c 46  |R%,N%)../.. I%,F|
00019810  24 2c 64 62 61 73 65 68  61 6e 64 6c 65 25 2c 66  |$,dbasehandle%,f|
00019820  6c 61 67 25 0d 0e 30 2a  64 62 61 73 65 68 61 6e  |lag%..0*dbasehan|
00019830  64 6c 65 25 3d ad 28 24  64 61 74 61 62 61 73 65  |dle%=.($database|
00019840  25 2b 22 2e 44 61 74 61  62 61 73 65 22 29 0d 0e  |%+".Database")..|
00019850  31 1d cf 23 64 62 61 73  65 68 61 6e 64 6c 65 25  |1..#dbasehandle%|
00019860  3d 52 25 2a 4c 65 6e 67  74 68 25 0d 0e 32 1c e7  |=R%*Length%..2..|
00019870  20 a4 73 65 6c 65 63 74  65 64 28 70 61 73 73 57  | .selected(passW|
00019880  25 2c 31 36 29 20 8c 0d  0e 33 11 20 20 e7 20 6e  |%,16) ...3.  . n|
00019890  65 77 72 65 63 25 20 8c  0d 0e 34 5b 20 20 20 20  |ewrec% ...4[    |
000198a0  d5 23 6c 6f 67 68 61 6e  64 6c 65 25 2c 22 4e 65  |.#loghandle%,"Ne|
000198b0  77 20 72 65 63 6f 72 64  3a 20 53 75 62 66 69 6c  |w record: Subfil|
000198c0  65 20 22 2b c3 28 66 69  6c 65 25 29 2b 22 20 20  |e "+.(file%)+"  |
000198d0  22 2b 24 52 66 25 28 4b  46 25 28 30 2c 30 29 29  |"+$Rf%(KF%(0,0))|
000198e0  2b 22 20 22 2b 24 52 66  25 28 4b 46 25 28 30 2c  |+" "+$Rf%(KF%(0,|
000198f0  31 29 29 0d 0e 35 28 20  20 20 20 cc 20 d5 23 6c  |1))..5(    . .#l|
00019900  6f 67 68 61 6e 64 6c 65  25 2c 6c 6f 67 65 6e 74  |oghandle%,logent|
00019910  72 79 24 3a 66 6c 61 67  25 3d b9 0d 0e 36 07 20  |ry$:flag%=...6. |
00019920  20 cd 0d 0e 37 05 cd 0d  0e 38 0f e3 20 49 25 3d  | ...7....8.. I%=|
00019930  31 20 b8 20 4e 25 0d 0e  39 18 20 20 c8 8e 20 63  |1 . N%..9.  .. c|
00019940  68 61 72 74 79 70 65 25  28 49 25 29 20 ca 0d 0e  |hartype%(I%) ...|
00019950  3a 15 20 20 20 20 c9 20  33 39 2c 34 30 3a 46 24  |:.    . 39,40:F$|
00019960  3d 22 22 0d 0e 3b 54 20  20 20 20 c9 20 34 37 3a  |=""..;T    . 47:|
00019970  46 24 3d 24 52 66 25 28  49 25 29 3a f2 73 70 6c  |F$=$Rf%(I%):.spl|
00019980  69 74 5f 6c 69 6e 6b 28  49 25 2c 52 24 2c 56 24  |it_link(I%,R$,V$|
00019990  29 3a 53 25 3d bb 28 52  24 29 3a 53 25 2b 3d 31  |):S%=.(R$):S%+=1|
000199a0  3a 63 61 6c 63 24 28 49  25 29 3d 56 24 2b 22 7c  |:calc$(I%)=V$+"||
000199b0  22 2b c3 28 53 25 29 0d  0e 3c 12 20 20 20 20 c9  |"+.(S%)..<.    .|
000199c0  20 35 38 3a 46 24 3d 91  24 0d 0e 3d 15 20 20 20  | 58:F$=.$..=.   |
000199d0  20 7f 3a 46 24 3d 24 52  66 25 28 49 25 29 0d 0e  | .:F$=$Rf%(I%)..|
000199e0  3e 07 20 20 cb 0d 0e 3f  17 20 20 d5 23 64 62 61  |>.  ...?.  .#dba|
000199f0  73 65 68 61 6e 64 6c 65  25 2c 46 24 0d 0e 40 21  |sehandle%,F$..@!|
00019a00  20 20 e7 20 66 6c 61 67  25 20 80 20 46 24 3c 3e  |  . flag% . F$<>|
00019a10  20 66 69 65 6c 64 24 28  49 25 29 20 8c 0d 0e 41  | field$(I%) ...A|
00019a20  25 20 20 20 20 e7 20 46  24 3d 22 22 20 8c 20 44  |%    . F$="" . D|
00019a30  24 3d 22 3c 6e 75 6c 6c  3e 22 20 8b 20 44 24 3d  |$="<null>" . D$=|
00019a40  46 24 0d 0e 42 35 20 20  20 20 e7 20 66 69 65 6c  |F$..B5    . fiel|
00019a50  64 24 28 49 25 29 3d 22  22 20 8c 20 53 24 3d 22  |d$(I%)="" . S$="|
00019a60  3c 6e 75 6c 6c 3e 22 20  8b 20 53 24 3d 66 69 65  |<null>" . S$=fie|
00019a70  6c 64 24 28 49 25 29 0d  0e 43 31 20 20 20 20 d5  |ld$(I%)..C1    .|
00019a80  23 6c 6f 67 68 61 6e 64  6c 65 25 2c 54 61 67 24  |#loghandle%,Tag$|
00019a90  28 49 25 29 2b 22 3a 20  22 2b 53 24 2b 22 20 2d  |(I%)+": "+S$+" -|
00019aa0  2d 2d 3e 20 22 2b 44 24  0d 0e 44 07 20 20 cd 0d  |--> "+D$..D.  ..|
00019ab0  0e 45 13 20 20 66 69 65  6c 64 24 28 49 25 29 3d  |.E.  field$(I%)=|
00019ac0  46 24 0d 0e 46 08 ed 20  49 25 0d 0e 47 1d f2 63  |F$..F.. I%..G..c|
00019ad0  6c 6f 73 65 5f 66 69 6c  65 28 64 62 61 73 65 68  |lose_file(dbaseh|
00019ae0  61 6e 64 6c 65 25 29 0d  0e 48 05 e1 0d 0e 49 05  |andle%)..H....I.|
00019af0  3a 0d 0e 4a 1f dd 20 f2  73 70 6c 69 74 5f 6c 69  |:..J.. .split_li|
00019b00  6e 6b 28 46 25 2c f8 20  52 24 2c f8 20 56 24 29  |nk(F%,. R$,. V$)|
00019b10  0d 0e 4b 0d ea 20 4c 24  2c 50 25 2c 46 0d 0e 4c  |..K.. L$,P%,F..L|
00019b20  10 4c 24 3d 63 61 6c 63  24 28 46 25 29 0d 0e 4d  |.L$=calc$(F%)..M|
00019b30  0a c8 8e 20 b9 20 ca 0d  0e 4e 13 20 20 c9 20 c0  |... . ...N.  . .|
00019b40  4c 24 2c 31 29 3d 22 23  22 3a 0d 0e 4f 2f 20 20  |L$,1)="#":..O/  |
00019b50  50 25 3d a7 4c 24 2c 22  23 22 2c 32 29 3a 56 24  |P%=.L$,"#",2):V$|
00019b60  3d c1 4c 24 2c 50 25 2b  31 29 3a 52 24 3d c1 4c  |=.L$,P%+1):R$=.L|
00019b70  24 2c 32 2c 50 25 2d 32  29 0d 0e 50 13 20 20 c9  |$,2,P%-2)..P.  .|
00019b80  20 a7 4c 24 2c 22 7c 22  29 3e 30 3a 0d 0e 51 2b  | .L$,"|")>0:..Q+|
00019b90  20 20 50 25 3d a7 4c 24  2c 22 7c 22 29 3a 56 24  |  P%=.L$,"|"):V$|
00019ba0  3d c0 4c 24 2c 50 25 2d  31 29 3a 52 24 3d c1 4c  |=.L$,P%-1):R$=.L|
00019bb0  24 2c 50 25 2b 31 29 0d  0e 52 13 20 20 7f 3a 52  |$,P%+1)..R.  .:R|
00019bc0  24 3d 22 22 3a 56 24 3d  22 22 0d 0e 53 05 cb 0d  |$="":V$=""..S...|
00019bd0  0e 54 05 e1 0d 0e 55 05  3a 0d 0e 56 10 dd 20 a4  |.T....U.:..V.. .|
00019be0  6b 65 79 28 6b 65 79 25  29 0d 0e 57 12 3d a4 6b  |key(key%)..W.=.k|
00019bf0  65 79 32 28 6b 65 79 25  2c 30 29 0d 0e 58 05 3a  |ey2(key%,0)..X.:|
00019c00  0d 0e 59 16 dd 20 a4 6b  65 79 32 28 6b 65 79 25  |..Y.. .key2(key%|
00019c10  2c 6c 6f 63 25 29 0d 0e  5a 1f ea 20 49 25 2c 4e  |,loc%)..Z.. I%,N|
00019c20  25 2c 50 25 2c 53 25 2c  53 24 2c 54 24 2c 66 30  |%,P%,S%,S$,T$,f0|
00019c30  25 2c 66 31 25 0d 0e 5b  28 50 25 3d 31 3a 66 30  |%,f1%..[(P%=1:f0|
00019c40  25 3d 4b 46 25 28 6b 65  79 25 2c 30 29 3a 66 31  |%=KF%(key%,0):f1|
00019c50  25 3d 4b 46 25 28 6b 65  79 25 2c 31 29 0d 0e 5c  |%=KF%(key%,1)..\|
00019c60  0d c8 8e 20 6c 6f 63 25  20 ca 0d 0e 5d 0a 20 20  |... loc% ...].  |
00019c70  c9 20 30 3a 0d 0e 5e 20  20 20 53 24 3d 24 52 66  |. 0:..^   S$=$Rf|
00019c80  25 28 66 30 25 29 2b 22  20 22 2b 24 52 66 25 28  |%(f0%)+" "+$Rf%(|
00019c90  66 31 25 29 0d 0e 5f 07  20 20 7f 0d 0e 60 1c 20  |f1%).._.  ...`. |
00019ca0  20 53 24 3d 46 24 28 66  30 25 29 2b 22 20 22 2b  | S$=F$(f0%)+" "+|
00019cb0  46 24 28 66 31 25 29 0d  0e 61 05 cb 0d 0e 62 11  |F$(f1%)..a....b.|
00019cc0  e7 20 53 24 3d 22 20 22  20 8c 3d 22 22 0d 0e 63  |. S$=" " .=""..c|
00019cd0  19 e7 20 c2 53 24 29 3c  3e 22 20 22 20 8c 20 53  |.. .S$)<>" " . S|
00019ce0  24 2b 3d 22 20 22 0d 0e  64 0e e3 20 49 25 3d 30  |$+=" "..d.. I%=0|
00019cf0  20 b8 20 33 0d 0e 65 15  20 20 4e 25 3d 4b 57 25  | . 3..e.  N%=KW%|
00019d00  28 6b 65 79 25 2c 49 25  29 0d 0e 66 1b 20 20 e7  |(key%,I%)..f.  .|
00019d10  20 4e 25 3c 3e 30 20 80  20 50 25 3c 3e a9 28 53  | N%<>0 . P%<>.(S|
00019d20  24 29 20 8c 0d 0e 67 18  20 20 20 20 53 25 3d a7  |$) ...g.    S%=.|
00019d30  53 24 2c 22 20 22 2c 50  25 2b 31 29 0d 0e 68 1d  |S$," ",P%+1)..h.|
00019d40  20 20 20 20 e7 20 53 25  2d 50 25 3c 4e 25 20 8c  |    . S%-P%<N% .|
00019d50  20 4e 25 3d 53 25 2d 50  25 0d 0e 69 16 20 20 20  | N%=S%-P%..i.   |
00019d60  20 54 24 2b 3d c1 53 24  2c 50 25 2c 4e 25 29 0d  | T$+=.S$,P%,N%).|
00019d70  0e 6a 0f 20 20 20 20 50  25 3d 53 25 2b 31 0d 0e  |.j.    P%=S%+1..|
00019d80  6b 07 20 20 cd 0d 0e 6c  08 ed 20 49 25 0d 0e 6d  |k.  ...l.. I%..m|
00019d90  1d 54 24 2b 3d c4 4b 4c  25 28 6b 65 79 25 29 2d  |.T$+=.KL%(key%)-|
00019da0  a9 28 54 24 29 2c 22 23  22 29 0d 0e 6e 17 c8 8e  |.(T$),"#")..n...|
00019db0  20 63 68 61 72 74 79 70  65 25 28 66 30 25 29 20  | chartype%(f0%) |
00019dc0  ca 0d 0e 6f 24 20 20 c9  20 35 2c 35 31 2c 35 32  |...o$  . 5,51,52|
00019dd0  3a 54 24 3d a4 72 65 76  65 72 73 65 5f 64 61 74  |:T$=.reverse_dat|
00019de0  65 28 54 24 29 0d 0e 70  05 cb 0d 0e 71 1f e7 20  |e(T$)..p....q.. |
00019df0  63 61 73 65 25 28 6b 65  79 25 29 20 8c 3d 54 24  |case%(key%) .=T$|
00019e00  20 8b 3d a4 75 28 54 24  29 0d 0e 72 05 3a 0d 0e  | .=.u(T$)..r.:..|
00019e10  73 0c dd 20 a4 75 28 4e  24 29 0d 0e 74 0b ea 20  |s.. .u(N$)..t.. |
00019e20  49 25 2c 42 25 0d 0e 75  0b 24 6b 65 79 3d 4e 24  |I%,B%..u.$key=N$|
00019e30  0d 0e 76 14 e3 20 49 25  3d 30 20 b8 20 a9 28 4e  |..v.. I%=0 . .(N|
00019e40  24 29 2d 31 0d 0e 77 0f  20 20 42 25 3d 6b 65 79  |$)-1..w.  B%=key|
00019e50  3f 49 25 0d 0e 78 28 20  20 e7 20 42 25 3e 39 36  |?I%..x(  . B%>96|
00019e60  20 80 20 42 25 3c 31 32  33 20 8c 20 6b 65 79 3f  | . B%<123 . key?|
00019e70  49 25 3d 42 25 20 80 20  32 32 33 0d 0e 79 08 ed  |I%=B% . 223..y..|
00019e80  20 49 25 0d 0e 7a 09 3d  24 6b 65 79 0d 0e 7b 05  | I%..z.=$key..{.|
00019e90  3a 0d 0e 7c 0b dd 20 a4  64 61 74 65 0d 0e 7d 17  |:..|.. .date..}.|
00019ea0  ea 20 59 24 2c 4d 24 2c  44 24 2c 4d 25 2c 64 61  |. Y$,M$,D$,M%,da|
00019eb0  74 65 24 0d 0e 7e 10 59  24 3d c1 91 24 2c 31 34  |te$..~.Y$=..$,14|
00019ec0  2c 32 29 0d 0e 7f 0f 44  24 3d c1 91 24 2c 35 2c  |,2)....D$=..$,5,|
00019ed0  32 29 0d 0e 80 0f 4d 24  3d c1 91 24 2c 38 2c 33  |2)....M$=..$,8,3|
00019ee0  29 0d 0e 81 3a 4d 25 3d  28 a7 22 4a 61 6e 46 65  |)...:M%=(."JanFe|
00019ef0  62 4d 61 72 41 70 72 4d  61 79 4a 75 6e 4a 75 6c  |bMarAprMayJunJul|
00019f00  41 75 67 53 65 70 4f 63  74 4e 6f 76 44 65 63 22  |AugSepOctNovDec"|
00019f10  2c 4d 24 29 2b 32 29 20  81 20 33 0d 0e 82 25 e7  |,M$)+2) . 3...%.|
00019f20  20 4d 25 3c 31 30 20 8c  20 4d 24 3d 22 30 22 2b  | M%<10 . M$="0"+|
00019f30  c3 28 4d 25 29 20 8b 20  4d 24 3d c3 28 4d 25 29  |.(M%) . M$=.(M%)|
00019f40  0d 0e 83 1a 64 61 74 65  24 3d 44 24 2b 22 2d 22  |....date$=D$+"-"|
00019f50  2b 4d 24 2b 22 2d 22 2b  59 24 0d 0e 84 0a 3d 64  |+M$+"-"+Y$....=d|
00019f60  61 74 65 24 0d 0e 85 05  3a 0d 0e 86 11 dd 20 f2  |ate$....:..... .|
00019f70  64 61 74 65 28 6b 65 79  25 29 0d 0e 87 1d e7 20  |date(key%)..... |
00019f80  21 6b 65 79 61 6e 63 68  6f 72 25 28 6b 65 79 25  |!keyanchor%(key%|
00019f90  29 3d 30 20 8c 20 e1 0d  0e 88 08 ea 20 49 25 0d  |)=0 . ...... I%.|
00019fa0  0e 89 0e e3 20 49 25 3d  30 20 b8 20 35 0d 0e 8a  |.... I%=0 . 5...|
00019fb0  14 20 20 e7 20 64 61 74  65 25 3f 49 25 3d 31 20  |.  . date%?I%=1 |
00019fc0  8c 0d 0e 8b 29 20 20 20  20 24 28 21 6b 65 79 61  |....)    $(!keya|
00019fd0  6e 63 68 6f 72 25 28 6b  65 79 25 29 2b 38 2b 39  |nchor%(key%)+8+9|
00019fe0  2a 49 25 29 3d a4 64 61  74 65 0d 0e 8c 18 20 20  |*I%)=.date....  |
00019ff0  20 20 24 44 61 74 65 25  28 49 25 29 3d a4 64 61  |  $Date%(I%)=.da|
0001a000  74 65 0d 0e 8d 07 20 20  cd 0d 0e 8e 08 ed 20 49  |te....  ...... I|
0001a010  25 0d 0e 8f 05 e1 0d 0e  90 05 3a 0d 0e 91 24 dd  |%.........:...$.|
0001a020  20 a4 63 68 65 63 6b 5f  64 61 74 65 28 44 24 2c  | .check_date(D$,|
0001a030  70 6c 61 63 65 25 2c f8  20 64 61 74 65 24 29 0d  |place%,. date$).|
0001a040  0e 92 26 ea 20 49 25 2c  44 25 2c 4d 25 2c 59 25  |..&. I%,D%,M%,Y%|
0001a050  2c 4c 25 2c 50 25 2c 51  25 2c 55 24 2c 64 24 2c  |,L%,P%,Q%,U$,d$,|
0001a060  6d 24 2c 79 24 0d 0e 93  0c 4c 25 3d a9 28 44 24  |m$,y$....L%=.(D$|
0001a070  29 0d 0e 94 0e e7 20 4c  25 3d 30 20 8c 3d b9 0d  |)..... L%=0 .=..|
0001a080  0e 95 0f e3 20 49 25 3d  31 20 b8 20 4c 25 0d 0e  |.... I%=1 . L%..|
0001a090  96 12 20 20 43 24 3d c1  44 24 2c 49 25 2c 31 29  |..  C$=.D$,I%,1)|
0001a0a0  0d 0e 97 19 20 20 e7 20  43 24 3c 22 30 22 20 84  |....  . C$<"0" .|
0001a0b0  20 43 24 3e 22 39 22 20  8c 0d 0e 98 1e 20 20 20  | C$>"9" .....   |
0001a0c0  20 e7 20 50 25 3d 30 20  8c 20 50 25 3d 49 25 20  | . P%=0 . P%=I% |
0001a0d0  8b 20 51 25 3d 49 25 0d  0e 99 07 20 20 cd 0d 0e  |. Q%=I%....  ...|
0001a0e0  9a 08 ed 20 49 25 0d 0e  9b 67 e7 20 50 25 3d 30  |... I%...g. P%=0|
0001a0f0  20 84 20 51 25 3d 30 20  8c 20 f2 72 65 73 74 6f  | . Q%=0 . .resto|
0001a100  72 65 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 2c  |re(Fieldnumber%,|
0001a110  22 20 28 64 61 79 2c 20  6d 6f 6e 74 68 20 26 20  |" (day, month & |
0001a120  79 65 61 72 20 6d 75 73  74 20 62 65 20 73 65 70  |year must be sep|
0001a130  61 72 61 74 65 64 20 62  79 20 6e 6f 6e 2d 6e 75  |arated by non-nu|
0001a140  6d 65 72 61 6c 29 22 2c  34 29 3a 3d a3 0d 0e 9c  |meral)",4):=....|
0001a150  13 44 25 3d bb 28 c0 44  24 2c 50 25 2d 31 29 29  |.D%=.(.D$,P%-1))|
0001a160  0d 0e 9d 1b 4d 25 3d bb  28 c1 44 24 2c 50 25 2b  |....M%=.(.D$,P%+|
0001a170  31 2c 51 25 2d 50 25 2d  31 29 29 0d 0e 9e 13 59  |1,Q%-P%-1))....Y|
0001a180  25 3d bb 28 c1 44 24 2c  51 25 2b 31 29 29 0d 0e  |%=.(.D$,Q%+1))..|
0001a190  9f 32 e7 20 59 25 3c 30  20 84 20 44 25 3c 31 20  |.2. Y%<0 . D%<1 |
0001a1a0  8c 20 f2 72 65 73 74 6f  72 65 28 46 69 65 6c 64  |. .restore(Field|
0001a1b0  6e 75 6d 62 65 72 25 2c  22 22 2c 34 29 3a 3d a3  |number%,"",4):=.|
0001a1c0  0d 0e a0 48 e7 20 4d 25  3c 31 20 84 20 4d 25 3e  |...H. M%<1 . M%>|
0001a1d0  31 32 20 8c 20 f2 72 65  73 74 6f 72 65 28 46 69  |12 . .restore(Fi|
0001a1e0  65 6c 64 6e 75 6d 62 65  72 25 2c 22 20 28 6d 6f  |eldnumber%," (mo|
0001a1f0  6e 74 68 20 6f 75 74 20  6f 66 20 72 61 6e 67 65  |nth out of range|
0001a200  29 22 2c 34 29 3a 3d a3  0d 0e a1 0a c8 8e 20 b9  |)",4):=....... .|
0001a210  20 ca 0d 0e a2 30 20 20  c9 20 59 25 20 83 20 34  | ....0  . Y% . 4|
0001a220  30 30 3d 30 3a 55 24 3d  22 33 31 32 39 33 31 33  |00=0:U$="3129313|
0001a230  30 33 31 33 30 33 31 33  31 33 30 33 31 33 30 33  |0313031313031303|
0001a240  31 22 0d 0e a3 3c 20 20  c9 20 59 25 20 83 20 31  |1"...<  . Y% . 1|
0001a250  30 30 3c 3e 30 20 80 20  59 25 20 83 20 34 3d 30  |00<>0 . Y% . 4=0|
0001a260  3a 55 24 3d 22 33 31 32  39 33 31 33 30 33 31 33  |:U$="31293130313|
0001a270  30 33 31 33 31 33 30 33  31 33 30 33 31 22 0d 0e  |0313130313031"..|
0001a280  a4 25 20 20 7f 3a 55 24  3d 22 33 31 32 38 33 31  |.%  .:U$="312831|
0001a290  33 30 33 31 33 30 33 31  33 31 33 30 33 31 33 30  |3031303131303130|
0001a2a0  33 31 22 0d 0e a5 05 cb  0d 0e a6 15 44 4d 24 3d  |31".........DM$=|
0001a2b0  c1 55 24 2c 32 2a 4d 25  2d 31 2c 32 29 0d 0e a7  |.U$,2*M%-1,2)...|
0001a2c0  51 e7 20 44 25 3e bb 28  44 4d 24 29 20 8c 20 f2  |Q. D%>.(DM$) . .|
0001a2d0  72 65 73 74 6f 72 65 28  46 69 65 6c 64 6e 75 6d  |restore(Fieldnum|
0001a2e0  62 65 72 25 2c 22 20 28  64 61 79 20 6f 75 74 20  |ber%," (day out |
0001a2f0  6f 66 20 72 61 6e 67 65  20 2d 20 6d 61 78 3d 22  |of range - max="|
0001a300  2b 44 4d 24 2b 22 29 22  2c 34 29 3a 3d a3 0d 0e  |+DM$+")",4):=...|
0001a310  a8 22 64 24 3d c3 28 44  25 29 3a e7 20 a9 28 64  |."d$=.(D%):. .(d|
0001a320  24 29 3d 31 20 8c 20 64  24 3d 22 30 22 2b 64 24  |$)=1 . d$="0"+d$|
0001a330  0d 0e a9 22 6d 24 3d c3  28 4d 25 29 3a e7 20 a9  |..."m$=.(M%):. .|
0001a340  28 6d 24 29 3d 31 20 8c  20 6d 24 3d 22 30 22 2b  |(m$)=1 . m$="0"+|
0001a350  6d 24 0d 0e aa 22 79 24  3d c3 28 59 25 29 3a e7  |m$..."y$=.(Y%):.|
0001a360  20 a9 28 79 24 29 3d 31  20 8c 20 79 24 3d 22 30  | .(y$)=1 . y$="0|
0001a370  22 2b 79 24 0d 0e ab 53  e7 20 a9 28 79 24 29 3c  |"+y$...S. .(y$)<|
0001a380  3e 32 20 80 20 a9 28 79  24 29 3c 3e 34 20 8c 20  |>2 . .(y$)<>4 . |
0001a390  f2 72 65 73 74 6f 72 65  28 46 69 65 6c 64 6e 75  |.restore(Fieldnu|
0001a3a0  6d 62 65 72 25 2c 22 20  28 79 65 61 72 20 6e 6f  |mber%," (year no|
0001a3b0  74 20 32 20 6f 72 20 34  20 64 69 67 69 74 73 29  |t 2 or 4 digits)|
0001a3c0  22 2c 34 29 3a 3d a3 0d  0e ac 31 e7 20 a9 28 79  |",4):=....1. .(y|
0001a3d0  24 29 3d 34 20 80 20 6c  65 6e 25 28 46 69 65 6c  |$)=4 . len%(Fiel|
0001a3e0  64 6e 75 6d 62 65 72 25  29 3c 31 30 20 8c 20 79  |dnumber%)<10 . y|
0001a3f0  24 3d c2 79 24 2c 32 29  0d 0e ad 24 64 61 74 65  |$=.y$,2)...$date|
0001a400  24 3d 64 24 2b 64 61 74  65 73 65 70 24 2b 6d 24  |$=d$+datesep$+m$|
0001a410  2b 64 61 74 65 73 65 70  24 2b 79 24 0d 0e ae 62  |+datesep$+y$...b|
0001a420  e7 20 70 6c 61 63 65 25  3d 30 20 80 20 a9 28 64  |. place%=0 . .(d|
0001a430  61 74 65 24 29 3e 6c 65  6e 25 28 46 69 65 6c 64  |ate$)>len%(Field|
0001a440  6e 75 6d 62 65 72 25 29  20 8c 20 f2 72 65 73 74  |number%) . .rest|
0001a450  6f 72 65 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |ore(Fieldnumber%|
0001a460  2c 22 20 28 74 6f 6f 20  6c 6f 6e 67 20 66 6f 72  |," (too long for|
0001a470  20 66 69 65 6c 64 29 22  2c 34 29 3a 3d a3 0d 0e  | field)",4):=...|
0001a480  af 0f c8 8e 20 70 6c 61  63 65 25 20 ca 0d 0e b0  |.... place% ....|
0001a490  0a 20 20 c9 20 30 3a 0d  0e b1 48 20 20 24 52 66  |.  . 0:...H  $Rf|
0001a4a0  25 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 29 3d  |%(Fieldnumber%)=|
0001a4b0  64 61 74 65 24 3a f2 72  65 64 72 61 77 5f 69 63  |date$:.redraw_ic|
0001a4c0  6f 6e 28 6d 61 69 6e 57  25 2c 66 69 65 6c 64 25  |on(mainW%,field%|
0001a4d0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 29 0d  |(Fieldnumber%)).|
0001a4e0  0e b2 0a 20 20 c9 20 31  3a 0d 0e b3 39 20 20 24  |...  . 1:...9  $|
0001a4f0  a4 74 65 78 74 28 6b 65  79 70 61 64 57 25 2c 32  |.text(keypadW%,2|
0001a500  37 29 3d 64 61 74 65 24  3a f2 72 65 64 72 61 77  |7)=date$:.redraw|
0001a510  5f 69 63 6f 6e 28 6b 65  79 70 61 64 57 25 2c 32  |_icon(keypadW%,2|
0001a520  37 29 0d 0e b4 05 cb 0d  0e b5 06 3d b9 0d 0e b6  |7).........=....|
0001a530  05 3a 0d 0e b7 17 dd 20  a4 63 6f 6e 76 65 72 74  |.:..... .convert|
0001a540  5f 64 61 74 65 28 4c 25  29 0d 0e b8 14 ea 20 64  |_date(L%)..... d|
0001a550  24 2c 6d 24 2c 79 24 2c  4d 24 2c 4d 25 0d 0e b9  |$,m$,y$,M$,M%...|
0001a560  0f 64 24 3d c1 91 24 2c  35 2c 32 29 0d 0e ba 0f  |.d$=..$,5,2)....|
0001a570  4d 24 3d c1 91 24 2c 38  2c 33 29 0d 0e bb 13 50  |M$=..$,8,3)....P|
0001a580  25 3d a7 6d 6f 6e 74 68  73 24 2c 4d 24 29 0d 0e  |%=.months$,M$)..|
0001a590  bc 11 4d 25 3d 28 50 25  2b 32 29 20 81 20 33 0d  |..M%=(P%+2) . 3.|
0001a5a0  0e bd 20 6d 24 3d c3 28  4d 25 29 3a e7 20 4d 25  |.. m$=.(M%):. M%|
0001a5b0  3c 31 30 20 8c 20 6d 24  3d 22 30 22 2b 6d 24 0d  |<10 . m$="0"+m$.|
0001a5c0  0e be 14 79 24 3d c1 91  24 2c 31 36 2d 4c 25 2c  |...y$=..$,16-L%,|
0001a5d0  4c 25 29 0d 0e bf 1f 3d  64 24 2b 64 61 74 65 73  |L%)....=d$+dates|
0001a5e0  65 70 24 2b 6d 24 2b 64  61 74 65 73 65 70 24 2b  |ep$+m$+datesep$+|
0001a5f0  79 24 0d 0e c0 05 3a 0d  0e c1 17 dd 20 a4 72 65  |y$....:..... .re|
0001a600  76 65 72 73 65 5f 64 61  74 65 28 4b 24 29 0d 0e  |verse_date(K$)..|
0001a610  c2 0a ea 20 73 65 70 24  0d 0e c3 0e c8 8e 20 a9  |... sep$...... .|
0001a620  28 4b 24 29 20 ca 0d 0e  c4 0a 20 20 c9 20 38 3a  |(K$) .....  . 8:|
0001a630  0d 0e c5 13 20 20 73 65  70 24 3d c1 4b 24 2c 33  |....  sep$=.K$,3|
0001a640  2c 31 29 0d 0e c6 2e 20  20 4b 24 3d c2 4b 24 2c  |,1)....  K$=.K$,|
0001a650  32 29 2b 73 65 70 24 2b  c1 4b 24 2c 34 2c 32 29  |2)+sep$+.K$,4,2)|
0001a660  2b 73 65 70 24 2b c0 4b  24 2c 32 29 20 8b 3d 4b  |+sep$+.K$,2) .=K|
0001a670  24 0d 0e c7 0b 20 20 c9  20 31 30 3a 0d 0e c8 13  |$....  . 10:....|
0001a680  20 20 e7 20 bb 28 4b 24  29 3c 31 30 30 20 8c 0d  |  . .(K$)<100 ..|
0001a690  0e c9 15 20 20 20 20 73  65 70 24 3d c1 4b 24 2c  |...    sep$=.K$,|
0001a6a0  33 2c 31 29 0d 0e ca 2b  20 20 20 20 4b 24 3d c2  |3,1)...+    K$=.|
0001a6b0  4b 24 2c 34 29 2b 73 65  70 24 2b c1 4b 24 2c 34  |K$,4)+sep$+.K$,4|
0001a6c0  2c 32 29 2b 73 65 70 24  2b c0 4b 24 2c 32 29 0d  |,2)+sep$+.K$,2).|
0001a6d0  0e cb 09 20 20 20 20 cc  0d 0e cc 15 20 20 20 20  |...    .....    |
0001a6e0  73 65 70 24 3d c1 4b 24  2c 35 2c 31 29 0d 0e cd  |sep$=.K$,5,1)...|
0001a6f0  2b 20 20 20 20 4b 24 3d  c2 4b 24 2c 32 29 2b 73  |+    K$=.K$,2)+s|
0001a700  65 70 24 2b c1 4b 24 2c  36 2c 32 29 2b 73 65 70  |ep$+.K$,6,2)+sep|
0001a710  24 2b c0 4b 24 2c 34 29  0d 0e ce 07 20 20 cd 0d  |$+.K$,4)....  ..|
0001a720  0e cf 05 cb 0d 0e d0 07  3d 4b 24 0d 0e d1 05 3a  |........=K$....:|
0001a730  0d 0e d2 1c dd 20 a4 73  65 63 6f 6e 64 73 28 74  |..... .seconds(t|
0001a740  69 6d 65 24 2c 70 6c 61  63 65 25 29 0d 0e d3 2c  |ime$,place%)...,|
0001a750  ea 20 49 25 2c 4c 25 2c  50 25 2c 51 25 2c 48 25  |. I%,L%,P%,Q%,H%|
0001a760  2c 4d 25 2c 53 25 2c 73  65 63 73 25 2c 68 24 2c  |,M%,S%,secs%,h$,|
0001a770  6d 24 2c 73 24 2c 43 24  0d 0e d4 0f 4c 25 3d a9  |m$,s$,C$....L%=.|
0001a780  28 74 69 6d 65 24 29 0d  0e d5 0e e7 20 4c 25 3d  |(time$)..... L%=|
0001a790  30 20 8c 3d 30 0d 0e d6  0f e3 20 49 25 3d 31 20  |0 .=0..... I%=1 |
0001a7a0  b8 20 4c 25 0d 0e d7 15  20 20 43 24 3d c1 74 69  |. L%....  C$=.ti|
0001a7b0  6d 65 24 2c 49 25 2c 31  29 0d 0e d8 19 20 20 e7  |me$,I%,1)....  .|
0001a7c0  20 43 24 3c 22 30 22 20  84 20 43 24 3e 22 39 22  | C$<"0" . C$>"9"|
0001a7d0  20 8c 0d 0e d9 1e 20 20  20 20 e7 20 50 25 3d 30  | .....    . P%=0|
0001a7e0  20 8c 20 50 25 3d 49 25  20 8b 20 51 25 3d 49 25  | . P%=I% . Q%=I%|
0001a7f0  0d 0e da 07 20 20 cd 0d  0e db 08 ed 20 49 25 0d  |....  ...... I%.|
0001a800  0e dc 75 e7 20 50 25 3d  30 20 84 20 51 25 3d 30  |..u. P%=0 . Q%=0|
0001a810  20 8c 20 f2 72 65 73 74  6f 72 65 28 46 69 65 6c  | . .restore(Fiel|
0001a820  64 6e 75 6d 62 65 72 25  2c 22 20 28 68 6f 75 72  |dnumber%," (hour|
0001a830  73 2c 20 6d 69 6e 75 74  65 73 20 61 6e 64 20 73  |s, minutes and s|
0001a840  65 63 6f 6e 64 73 20 6d  75 73 74 20 62 65 20 73  |econds must be s|
0001a850  65 70 61 72 61 74 65 64  20 62 79 20 61 20 6e 6f  |eparated by a no|
0001a860  6e 2d 6e 75 6d 65 72 61  6c 29 2e 22 2c 39 34 29  |n-numeral).",94)|
0001a870  3a 3d 2d 31 0d 0e dd 5e  48 25 3d bb 28 c0 74 69  |:=-1...^H%=.(.ti|
0001a880  6d 65 24 2c 50 25 2d 31  29 29 3a e7 20 48 25 3c  |me$,P%-1)):. H%<|
0001a890  30 20 84 20 48 25 3e 32  33 20 8c 20 f2 72 65 73  |0 . H%>23 . .res|
0001a8a0  74 6f 72 65 28 46 69 65  6c 64 6e 75 6d 62 65 72  |tore(Fieldnumber|
0001a8b0  25 2c 22 20 28 68 6f 75  72 73 20 6f 75 74 20 6f  |%," (hours out o|
0001a8c0  66 20 72 61 6e 67 65 29  2e 22 2c 39 34 29 3a 3d  |f range).",94):=|
0001a8d0  2d 31 0d 0e de 68 4d 25  3d bb 28 c1 74 69 6d 65  |-1...hM%=.(.time|
0001a8e0  24 2c 50 25 2b 31 2c 51  25 2d 50 25 2d 31 29 29  |$,P%+1,Q%-P%-1))|
0001a8f0  3a e7 20 4d 25 3c 30 20  84 20 4d 25 3e 35 39 20  |:. M%<0 . M%>59 |
0001a900  8c 20 f2 72 65 73 74 6f  72 65 28 46 69 65 6c 64  |. .restore(Field|
0001a910  6e 75 6d 62 65 72 25 2c  22 20 28 6d 69 6e 75 74  |number%," (minut|
0001a920  65 73 20 6f 75 74 20 6f  66 20 72 61 6e 67 65 29  |es out of range)|
0001a930  2e 22 2c 39 34 29 3a 3d  2d 31 0d 0e df 60 53 25  |.",94):=-1...`S%|
0001a940  3d bb 28 c1 74 69 6d 65  24 2c 51 25 2b 31 29 29  |=.(.time$,Q%+1))|
0001a950  3a e7 20 53 25 3c 30 20  84 20 53 25 3e 35 39 20  |:. S%<0 . S%>59 |
0001a960  8c 20 f2 72 65 73 74 6f  72 65 28 46 69 65 6c 64  |. .restore(Field|
0001a970  6e 75 6d 62 65 72 25 2c  22 20 28 73 65 63 6f 6e  |number%," (secon|
0001a980  64 73 20 6f 75 74 20 6f  66 20 72 61 6e 67 65 29  |ds out of range)|
0001a990  2e 22 2c 39 34 29 3a 3d  2d 31 0d 0e e0 22 68 24  |.",94):=-1..."h$|
0001a9a0  3d c3 28 48 25 29 3a e7  20 a9 28 68 24 29 3d 31  |=.(H%):. .(h$)=1|
0001a9b0  20 8c 20 68 24 3d 22 30  22 2b 68 24 0d 0e e1 22  | . h$="0"+h$..."|
0001a9c0  6d 24 3d c3 28 4d 25 29  3a e7 20 a9 28 6d 24 29  |m$=.(M%):. .(m$)|
0001a9d0  3d 31 20 8c 20 6d 24 3d  22 30 22 2b 6d 24 0d 0e  |=1 . m$="0"+m$..|
0001a9e0  e2 22 73 24 3d c3 28 53  25 29 3a e7 20 a9 28 73  |."s$=.(S%):. .(s|
0001a9f0  24 29 3d 31 20 8c 20 73  24 3d 22 30 22 2b 73 24  |$)=1 . s$="0"+s$|
0001aa00  0d 0e e3 24 74 69 6d 65  24 3d 68 24 2b 74 69 6d  |...$time$=h$+tim|
0001aa10  65 73 65 70 24 2b 6d 24  2b 74 69 6d 65 73 65 70  |esep$+m$+timesep|
0001aa20  24 2b 73 24 0d 0e e4 1a  73 65 63 73 25 3d 48 25  |$+s$....secs%=H%|
0001aa30  2a 33 36 30 30 2b 4d 25  2a 36 30 2b 53 25 0d 0e  |*3600+M%*60+S%..|
0001aa40  e5 53 e7 20 70 6c 61 63  65 25 3d 30 20 8c 20 24  |.S. place%=0 . $|
0001aa50  52 66 25 28 46 69 65 6c  64 6e 75 6d 62 65 72 25  |Rf%(Fieldnumber%|
0001aa60  29 3d 74 69 6d 65 24 3a  f2 72 65 64 72 61 77 5f  |)=time$:.redraw_|
0001aa70  69 63 6f 6e 28 6d 61 69  6e 57 25 2c 66 69 65 6c  |icon(mainW%,fiel|
0001aa80  64 25 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |d%(Fieldnumber%)|
0001aa90  29 0d 0e e6 0a 3d 73 65  63 73 25 0d 0e e7 05 3a  |)....=secs%....:|
0001aaa0  0d 0e e8 12 dd 20 a4 74  69 6d 65 28 73 65 63 73  |..... .time(secs|
0001aab0  25 29 0d 0e e9 17 ea 20  48 25 2c 4d 25 2c 53 25  |%)..... H%,M%,S%|
0001aac0  2c 68 24 2c 6d 24 2c 73  24 0d 0e ea 26 48 25 3d  |,h$,m$,s$...&H%=|
0001aad0  73 65 63 73 25 20 81 20  33 36 30 30 3a 73 65 63  |secs% . 3600:sec|
0001aae0  73 25 3d 73 65 63 73 25  20 83 20 33 36 30 30 0d  |s%=secs% . 3600.|
0001aaf0  0e eb 11 4d 25 3d 73 65  63 73 25 20 81 20 36 30  |...M%=secs% . 60|
0001ab00  0d 0e ec 11 53 25 3d 73  65 63 73 25 20 83 20 36  |....S%=secs% . 6|
0001ab10  30 0d 0e ed 22 68 24 3d  c3 28 48 25 29 3a e7 20  |0..."h$=.(H%):. |
0001ab20  a9 28 68 24 29 3d 31 20  8c 20 68 24 3d 22 30 22  |.(h$)=1 . h$="0"|
0001ab30  2b 68 24 0d 0e ee 22 6d  24 3d c3 28 4d 25 29 3a  |+h$..."m$=.(M%):|
0001ab40  e7 20 a9 28 6d 24 29 3d  31 20 8c 20 6d 24 3d 22  |. .(m$)=1 . m$="|
0001ab50  30 22 2b 6d 24 0d 0e ef  22 73 24 3d c3 28 53 25  |0"+m$..."s$=.(S%|
0001ab60  29 3a e7 20 a9 28 73 24  29 3d 31 20 8c 20 73 24  |):. .(s$)=1 . s$|
0001ab70  3d 22 30 22 2b 73 24 0d  0e f0 1f 3d 68 24 2b 74  |="0"+s$....=h$+t|
0001ab80  69 6d 65 73 65 70 24 2b  6d 24 2b 74 69 6d 65 73  |imesep$+m$+times|
0001ab90  65 70 24 2b 73 24 0d 0e  f1 05 3a 0d 0e f2 28 dd  |ep$+s$....:...(.|
0001aba0  20 a4 76 61 6c 69 64 61  74 65 28 46 25 2c f8 20  | .validate(F%,. |
0001abb0  54 61 62 46 69 65 6c 64  73 25 2c f8 20 6e 61 6d  |TabFields%,. nam|
0001abc0  65 24 29 0d 0e f3 15 e7  20 ac 20 76 61 6c 69 64  |e$)..... . valid|
0001abd0  61 74 65 25 20 8c 3d b9  0d 0e f4 49 ea 20 72 6f  |ate% .=....I. ro|
0001abe0  77 25 2c 66 69 65 6c 64  25 2c 52 6f 77 73 25 2c  |w%,field%,Rows%,|
0001abf0  52 65 63 25 2c 69 6e 64  25 2c 65 69 6e 64 25 2c  |Rec%,ind%,eind%,|
0001ac00  70 6f 73 25 2c 73 74 61  72 74 25 2c 72 65 6c 25  |pos%,start%,rel%|
0001ac10  2c 65 78 70 25 2c 65 70  6f 73 25 2c 64 61 74 65  |,exp%,epos%,date|
0001ac20  24 0d 0e f5 53 e7 20 66  69 78 25 28 46 25 29 3e  |$...S. fix%(F%)>|
0001ac30  30 20 8c 20 24 52 66 25  28 46 25 29 3d a4 66 69  |0 . $Rf%(F%)=.fi|
0001ac40  78 5f 70 6f 69 6e 74 28  24 52 66 25 28 46 25 29  |x_point($Rf%(F%)|
0001ac50  2c 46 25 29 3a f2 72 65  64 72 61 77 5f 69 63 6f  |,F%):.redraw_ico|
0001ac60  6e 28 6d 61 69 6e 57 25  2c 66 69 65 6c 64 25 28  |n(mainW%,field%(|
0001ac70  46 25 29 29 0d 0e f6 36  e7 20 63 68 61 72 74 79  |F%))...6. charty|
0001ac80  70 65 25 28 46 25 29 3d  33 20 8c 3d a4 63 68 65  |pe%(F%)=3 .=.che|
0001ac90  63 6b 5f 76 61 6c 28 63  61 6c 63 24 28 46 25 29  |ck_val(calc$(F%)|
0001aca0  2c 24 52 66 25 28 46 25  29 29 0d 0e f7 35 e7 20  |,$Rf%(F%))...5. |
0001acb0  63 68 61 72 74 79 70 65  25 28 46 25 29 3d 35 20  |chartype%(F%)=5 |
0001acc0  8c 3d a4 63 68 65 63 6b  5f 64 61 74 65 28 24 52  |.=.check_date($R|
0001acd0  66 25 28 46 25 29 2c 30  2c 64 61 74 65 24 29 0d  |f%(F%),0,date$).|
0001ace0  0e f8 31 e7 20 63 68 61  72 74 79 70 65 25 28 46  |..1. chartype%(F|
0001acf0  25 29 3d 38 20 8c 3d 28  a4 73 65 63 6f 6e 64 73  |%)=8 .=(.seconds|
0001ad00  28 24 52 66 25 28 46 25  29 2c 30 29 3e 3d 30 29  |($Rf%(F%),0)>=0)|
0001ad10  0d 0e f9 2c e7 20 24 52  66 25 28 46 25 29 3d 66  |...,. $Rf%(F%)=f|
0001ad20  69 65 6c 64 24 28 46 25  29 20 80 20 54 61 62 46  |ield$(F%) . TabF|
0001ad30  69 65 6c 64 73 25 3d 30  20 8c 3d b9 0d 0e fa 33  |ields%=0 .=....3|
0001ad40  6e 61 6d 65 24 3d 6c 69  6e 6b 24 28 46 25 29 3a  |name$=link$(F%):|
0001ad50  54 61 62 6c 65 6e 75 6d  62 65 72 25 3d 2d 31 3a  |Tablenumber%=-1:|
0001ad60  72 65 6c 25 3d 54 61 62  46 69 65 6c 64 73 25 0d  |rel%=TabFields%.|
0001ad70  0e fb 22 e7 20 6e 61 6d  65 24 3d 22 22 20 84 20  |..". name$="" . |
0001ad80  c0 6e 61 6d 65 24 2c 31  29 3d 22 23 22 20 8c 3d  |.name$,1)="#" .=|
0001ad90  b9 0d 0e fc 23 66 69 65  6c 64 25 3d bb 28 c2 6e  |....#field%=.(.n|
0001ada0  61 6d 65 24 29 29 3a 6e  61 6d 65 24 3d c0 6e 61  |ame$)):name$=.na|
0001adb0  6d 65 24 29 0d 0e fd 48  65 78 70 25 3d 2d 31 3a  |me$)...Hexp%=-1:|
0001adc0  e7 20 97 28 6e 61 6d 65  24 29 3c 35 38 20 80 20  |. .(name$)<58 . |
0001add0  97 28 6e 61 6d 65 24 29  3c 3e 2d 31 20 8c 20 65  |.(name$)<>-1 . e|
0001ade0  78 70 25 3d bb 28 6e 61  6d 65 24 29 3a 6e 61 6d  |xp%=.(name$):nam|
0001adf0  65 24 3d c1 6e 61 6d 65  24 2c 32 29 0d 0e fe 26  |e$=.name$,2)...&|
0001ae00  54 25 3d a4 74 61 62 6c  65 5f 6e 75 6d 62 65 72  |T%=.table_number|
0001ae10  28 6e 61 6d 65 24 29 3a  e7 20 54 25 3c 30 20 8c  |(name$):. T%<0 .|
0001ae20  3d b9 0d 0e ff 3b 54 24  3d a4 74 61 62 6c 65 5f  |=....;T$=.table_|
0001ae30  69 6e 66 6f 28 54 25 2c  52 6f 77 73 25 2c 54 61  |info(T%,Rows%,Ta|
0001ae40  62 46 69 65 6c 64 73 25  2c 52 65 63 25 2c 74 61  |bFields%,Rec%,ta|
0001ae50  62 66 69 65 6c 64 6c 65  6e 25 28 29 29 0d 0f 00  |bfieldlen%())...|
0001ae60  2c 70 6f 73 25 3d a4 74  61 62 6c 65 5f 66 69 65  |,pos%=.table_fie|
0001ae70  6c 64 28 66 69 65 6c 64  25 2c 74 61 62 66 69 65  |ld(field%,tabfie|
0001ae80  6c 64 6c 65 6e 25 28 29  29 0d 0f 01 43 e7 20 65  |ldlen%())...C. e|
0001ae90  78 70 25 3c 30 20 8c 20  65 70 6f 73 25 3d 70 6f  |xp%<0 . epos%=po|
0001aea0  73 25 20 8b 20 65 70 6f  73 25 3d a4 74 61 62 6c  |s% . epos%=.tabl|
0001aeb0  65 5f 66 69 65 6c 64 28  65 78 70 25 2c 74 61 62  |e_field(exp%,tab|
0001aec0  66 69 65 6c 64 6c 65 6e  25 28 29 29 0d 0f 02 23  |fieldlen%())...#|
0001aed0  73 74 61 72 74 25 3d 21  74 61 62 61 6e 63 68 6f  |start%=!tabancho|
0001aee0  72 25 28 54 25 29 2b 31  36 30 2d 52 65 63 25 0d  |r%(T%)+160-Rec%.|
0001aef0  0f 03 27 69 6e 64 25 3d  73 74 61 72 74 25 2b 70  |..'ind%=start%+p|
0001af00  6f 73 25 3a 65 69 6e 64  25 3d 73 74 61 72 74 25  |os%:eind%=start%|
0001af10  2b 65 70 6f 73 25 0d 0f  04 0d f5 20 72 6f 77 25  |+epos%..... row%|
0001af20  2b 3d 31 0d 0f 05 1c 20  20 69 6e 64 25 2b 3d 52  |+=1....  ind%+=R|
0001af30  65 63 25 3a 65 69 6e 64  25 2b 3d 52 65 63 25 0d  |ec%:eind%+=Rec%.|
0001af40  0f 06 33 fd 20 72 6f 77  25 3e 52 6f 77 73 25 20  |..3. row%>Rows% |
0001af50  84 20 24 69 6e 64 25 3d  24 52 66 25 28 46 25 29  |. $ind%=$Rf%(F%)|
0001af60  20 84 20 24 65 69 6e 64  25 3d 24 52 66 25 28 46  | . $eind%=$Rf%(F|
0001af70  25 29 0d 0f 07 4f e7 20  72 6f 77 25 3e 52 6f 77  |%)...O. row%>Row|
0001af80  73 25 20 80 20 72 65 6c  25 3d 30 20 8c 20 f2 72  |s% . rel%=0 . .r|
0001af90  65 73 74 6f 72 65 28 46  25 2c 22 20 28 22 2b 6e  |estore(F%," ("+n|
0001afa0  61 6d 65 24 2b 22 29 22  2c 35 29 3a 3d a3 20 8b  |ame$+")",5):=. .|
0001afb0  20 e7 20 72 6f 77 25 3e  52 6f 77 73 25 20 8c 3d  | . row%>Rows% .=|
0001afc0  a3 0d 0f 08 19 69 6e 64  25 3d 73 74 61 72 74 25  |.....ind%=start%|
0001afd0  2b 72 6f 77 25 2a 52 65  63 25 0d 0f 09 17 e3 20  |+row%*Rec%..... |
0001afe0  49 25 3d 30 20 b8 20 54  61 62 46 69 65 6c 64 73  |I%=0 . TabFields|
0001aff0  25 0d 0f 0a 2c 20 20 72  65 6c 25 28 49 25 29 3d  |%...,  rel%(I%)=|
0001b000  69 6e 64 25 3a 69 6e 64  25 2b 3d 74 61 62 66 69  |ind%:ind%+=tabfi|
0001b010  65 6c 64 6c 65 6e 25 28  49 25 29 2b 31 0d 0f 0b  |eldlen%(I%)+1...|
0001b020  08 ed 20 49 25 0d 0f 0c  68 e7 20 65 78 70 25 3e  |.. I%...h. exp%>|
0001b030  3d 30 20 8c 20 65 78 70  61 6e 64 24 3d 24 65 69  |=0 . expand$=$ei|
0001b040  6e 64 25 3a e7 20 a9 28  65 78 70 61 6e 64 24 29  |nd%:. .(expand$)|
0001b050  3c 3d 6c 65 6e 25 28 46  25 29 20 8c 20 24 52 66  |<=len%(F%) . $Rf|
0001b060  25 28 46 25 29 3d 65 78  70 61 6e 64 24 3a f2 72  |%(F%)=expand$:.r|
0001b070  65 64 72 61 77 5f 69 63  6f 6e 28 6d 61 69 6e 57  |edraw_icon(mainW|
0001b080  25 2c 66 69 65 6c 64 25  28 46 25 29 29 0d 0f 0d  |%,field%(F%))...|
0001b090  09 3d 72 6f 77 25 0d 0f  0e 05 3a 0d 0f 0f 17 dd  |.=row%....:.....|
0001b0a0  20 a4 63 68 65 63 6b 5f  76 61 6c 28 43 24 2c 4e  | .check_val(C$,N|
0001b0b0  24 29 0d 0f 10 18 ea 20  6d 69 6e 24 2c 6d 61 78  |$)..... min$,max|
0001b0c0  24 2c 50 25 2c 56 2c 6f  6b 25 0d 0f 11 09 6f 6b  |$,P%,V,ok%....ok|
0001b0d0  25 3d b9 0d 0f 12 11 e7  20 4e 24 3d 22 22 20 8c  |%=...... N$="" .|
0001b0e0  3d 6f 6b 25 0d 0f 13 0e  e7 20 43 24 3c 3e 22 22  |=ok%..... C$<>""|
0001b0f0  20 8c 0d 0f 14 0d 20 20  56 3d bb 28 4e 24 29 0d  | .....  V=.(N$).|
0001b100  0f 15 11 20 20 50 25 3d  a7 43 24 2c 22 7c 22 29  |...  P%=.C$,"|")|
0001b110  0d 0f 16 0e 20 20 e7 20  50 25 3e 30 20 8c 0d 0f  |....  . P%>0 ...|
0001b120  17 16 20 20 20 20 6d 69  6e 24 3d c0 43 24 2c 50  |..    min$=.C$,P|
0001b130  25 2d 31 29 0d 0f 18 16  20 20 20 20 6d 61 78 24  |%-1)....    max$|
0001b140  3d c1 43 24 2c 50 25 2b  31 29 0d 0f 19 48 20 20  |=.C$,P%+1)...H  |
0001b150  20 20 e7 20 6d 69 6e 24  3c 3e 22 22 20 80 20 56  |  . min$<>"" . V|
0001b160  3c bb 28 6d 69 6e 24 29  20 8c 20 6f 6b 25 3d a3  |<.(min$) . ok%=.|
0001b170  3a f2 72 65 73 74 6f 72  65 28 46 25 2c 22 20 28  |:.restore(F%," (|
0001b180  6d 69 6e 3d 22 2b 6d 69  6e 24 2b 22 29 22 2c 35  |min="+min$+")",5|
0001b190  38 29 0d 0f 1a 48 20 20  20 20 e7 20 6d 61 78 24  |8)...H    . max$|
0001b1a0  3c 3e 22 22 20 80 20 56  3e bb 28 6d 61 78 24 29  |<>"" . V>.(max$)|
0001b1b0  20 8c 20 6f 6b 25 3d a3  3a f2 72 65 73 74 6f 72  | . ok%=.:.restor|
0001b1c0  65 28 46 25 2c 22 20 28  6d 61 78 3d 22 2b 6d 61  |e(F%," (max="+ma|
0001b1d0  78 24 2b 22 29 22 2c 35  39 29 0d 0f 1b 07 20 20  |x$+")",59)....  |
0001b1e0  cd 0d 0f 1c 05 cd 0d 0f  1d 08 3d 6f 6b 25 0d 0f  |..........=ok%..|
0001b1f0  1e 05 3a 0d 0f 1f 12 dd  20 f2 72 65 73 74 6f 72  |..:..... .restor|
0001b200  65 5f 72 65 63 0d 0f 20  08 ea 20 46 25 0d 0f 21  |e_rec.. .. F%..!|
0001b210  14 e3 20 46 25 3d 31 20  b8 20 66 69 65 6c 64 73  |.. F%=1 . fields|
0001b220  25 0d 0f 22 19 20 20 24  52 66 25 28 46 25 29 3d  |%..".  $Rf%(F%)=|
0001b230  66 69 65 6c 64 24 28 46  25 29 0d 0f 23 08 ed 20  |field$(F%)..#.. |
0001b240  46 25 0d 0f 24 13 f2 72  65 64 72 61 77 28 6d 61  |F%..$..redraw(ma|
0001b250  69 6e 57 25 29 0d 0f 25  05 e1 0d 0f 26 05 3a 0d  |inW%)..%....&.:.|
0001b260  0f 27 18 dd 20 f2 72 65  73 74 6f 72 65 28 46 25  |.'.. .restore(F%|
0001b270  2c 45 24 2c 45 25 29 0d  0f 28 1f e7 20 45 25 3e  |,E$,E%)..(.. E%>|
0001b280  3d 30 20 8c 20 f2 73 6f  66 74 65 72 72 6f 72 28  |=0 . .softerror(|
0001b290  45 24 2c 45 25 29 0d 0f  29 17 24 52 66 25 28 46  |E$,E%)..).$Rf%(F|
0001b2a0  25 29 3d 66 69 65 6c 64  24 28 46 25 29 0d 0f 2a  |%)=field$(F%)..*|
0001b2b0  23 f2 72 65 64 72 61 77  5f 69 63 6f 6e 28 6d 61  |#.redraw_icon(ma|
0001b2c0  69 6e 57 25 2c 66 69 65  6c 64 25 28 46 25 29 29  |inW%,field%(F%))|
0001b2d0  0d 0f 2b 21 f2 73 65 74  5f 63 61 72 65 74 28 6d  |..+!.set_caret(m|
0001b2e0  61 69 6e 57 25 2c 66 69  65 6c 64 25 28 46 25 29  |ainW%,field%(F%)|
0001b2f0  29 0d 0f 2c 05 e1 0d 0f  2d 05 3a 0d 0f 2e 17 dd  |)..,....-.:.....|
0001b300  20 f2 72 65 6c 61 74 69  6f 6e 73 28 6d 65 6e 75  | .relations(menu|
0001b310  25 29 0d 0f 2f 25 ea 20  46 25 2c 49 25 2c 57 25  |%)../%. F%,I%,W%|
0001b320  2c 4c 25 2c 4e 24 2c 72  6f 77 25 2c 63 6f 6c 25  |,L%,N$,row%,col%|
0001b330  2c 66 6c 61 67 73 25 0d  0f 30 09 46 25 3d 2d 31  |,flags%..0.F%=-1|
0001b340  0d 0f 31 26 72 6f 77 25  3d a4 76 61 6c 69 64 61  |..1&row%=.valida|
0001b350  74 65 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 2c  |te(Fieldnumber%,|
0001b360  46 25 2c 4e 24 29 0d 0f  32 21 63 6f 6c 25 3d bb  |F%,N$)..2!col%=.|
0001b370  28 c2 6c 69 6e 6b 24 28  46 69 65 6c 64 6e 75 6d  |(.link$(Fieldnum|
0001b380  62 65 72 25 29 29 29 0d  0f 33 0e e7 20 72 6f 77  |ber%)))..3.. row|
0001b390  25 3e 30 20 8c 0d 0f 34  1f 20 20 f2 64 65 6c 65  |%>0 ...4.  .dele|
0001b3a0  74 65 5f 69 63 6f 6e 73  28 72 65 6c 61 74 65 57  |te_icons(relateW|
0001b3b0  25 2c 30 29 0d 0f 35 11  20 20 e3 20 49 25 3d 30  |%,0)..5.  . I%=0|
0001b3c0  20 b8 20 46 25 0d 0f 36  37 20 20 20 20 e7 20 49  | . F%..67    . I|
0001b3d0  25 3d 63 6f 6c 25 20 8c  20 66 6c 61 67 73 25 3d  |%=col% . flags%=|
0001b3e0  26 30 42 30 30 30 35 33  31 20 8b 20 66 6c 61 67  |&0B000531 . flag|
0001b3f0  73 25 3d 26 30 37 30 30  30 35 33 31 0d 0f 37 17  |s%=&07000531..7.|
0001b400  20 20 20 20 4c 25 3d a9  28 24 72 65 6c 25 28 49  |    L%=.($rel%(I|
0001b410  25 29 29 0d 0f 38 54 20  20 20 20 52 25 3d a4 63  |%))..8T    R%=.c|
0001b420  72 65 61 74 65 5f 69 63  6f 6e 28 72 65 6c 61 74  |reate_icon(relat|
0001b430  65 57 25 2c 30 2c 2d 49  25 2a 33 36 2d 33 36 2c  |eW%,0,-I%*36-36,|
0001b440  4c 25 2a 31 36 2b 31 36  2c 33 32 2c 66 6c 61 67  |L%*16+16,32,flag|
0001b450  73 25 2c 22 22 2c 72 65  6c 25 28 49 25 29 2c 2d  |s%,"",rel%(I%),-|
0001b460  31 2c 4c 25 2b 31 29 0d  0f 39 17 20 20 20 20 e7  |1,L%+1)..9.    .|
0001b470  20 4c 25 3e 57 25 20 8c  20 57 25 3d 4c 25 0d 0f  | L%>W% . W%=L%..|
0001b480  3a 0a 20 20 ed 20 49 25  0d 0f 3b 13 20 20 24 52  |:.  . I%..;.  $R|
0001b490  65 6c 54 69 74 6c 65 25  3d 4e 24 0d 0f 3c 0f 20  |elTitle%=N$..<. |
0001b4a0  20 e7 20 6d 65 6e 75 25  20 8c 0d 0f 3d 1c 20 20  | . menu% ...=.  |
0001b4b0  20 20 78 6d 61 78 25 3d  78 25 2d 33 32 3a 79 6d  |  xmax%=x%-32:ym|
0001b4c0  61 78 25 3d 79 25 0d 0f  3e 09 20 20 20 20 cc 0d  |ax%=y%..>.    ..|
0001b4d0  0f 3f 39 20 20 20 20 21  62 6c 6f 63 6b 25 3d 6b  |.?9    !block%=k|
0001b4e0  65 79 70 61 64 57 25 3a  c8 99 20 22 57 69 6d 70  |eypadW%:.. "Wimp|
0001b4f0  5f 47 65 74 57 69 6e 64  6f 77 53 74 61 74 65 22  |_GetWindowState"|
0001b500  2c 2c 62 6c 6f 63 6b 25  0d 0f 40 29 20 20 20 20  |,,block%..@)    |
0001b510  78 6d 61 78 25 3d 62 6c  6f 63 6b 25 21 31 32 2b  |xmax%=block%!12+|
0001b520  32 3a 79 6d 61 78 25 3d  62 6c 6f 63 6b 25 21 31  |2:ymax%=block%!1|
0001b530  36 0d 0f 41 07 20 20 cd  0d 0f 42 37 20 20 21 62  |6..A.  ...B7  !b|
0001b540  6c 6f 63 6b 25 3d 72 65  6c 61 74 65 57 25 3a c8  |lock%=relateW%:.|
0001b550  99 20 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |. "Wimp_GetWindo|
0001b560  77 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |wState",,block%.|
0001b570  0f 43 26 20 20 77 69 64  74 68 25 3d 57 25 2a 31  |.C&  width%=W%*1|
0001b580  36 2b 31 36 3a 68 65 69  67 68 74 25 3d 46 25 2a  |6+16:height%=F%*|
0001b590  33 36 2b 33 36 0d 0f 44  2b 20 20 62 6c 6f 63 6b  |36+36..D+  block|
0001b5a0  25 21 34 3d 78 6d 61 78  25 3a 62 6c 6f 63 6b 25  |%!4=xmax%:block%|
0001b5b0  21 31 32 3d 78 6d 61 78  25 2b 77 69 64 74 68 25  |!12=xmax%+width%|
0001b5c0  0d 0f 45 2c 20 20 62 6c  6f 63 6b 25 21 38 3d 79  |..E,  block%!8=y|
0001b5d0  6d 61 78 25 2d 68 65 69  67 68 74 25 3a 62 6c 6f  |max%-height%:blo|
0001b5e0  63 6b 25 21 31 36 3d 79  6d 61 78 25 0d 0f 46 12  |ck%!16=ymax%..F.|
0001b5f0  20 20 62 6c 6f 63 6b 25  21 32 38 3d 2d 31 0d 0f  |  block%!28=-1..|
0001b600  47 0f 20 20 e7 20 6d 65  6e 75 25 20 8c 0d 0f 48  |G.  . menu% ...H|
0001b610  24 20 20 20 20 c8 99 20  22 57 69 6d 70 5f 4f 70  |$    .. "Wimp_Op|
0001b620  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
0001b630  25 0d 0f 49 2f 20 20 20  20 c8 99 20 22 57 69 6d  |%..I/    .. "Wim|
0001b640  70 5f 43 72 65 61 74 65  4d 65 6e 75 22 2c 2c 72  |p_CreateMenu",,r|
0001b650  65 6c 61 74 65 57 25 2c  78 25 2d 33 32 2c 79 25  |elateW%,x%-32,y%|
0001b660  0d 0f 4a 09 20 20 20 20  cc 0d 0f 4b 24 20 20 20  |..J.    ...K$   |
0001b670  20 c8 99 20 22 57 69 6d  70 5f 4f 70 65 6e 57 69  | .. "Wimp_OpenWi|
0001b680  6e 64 6f 77 22 2c 2c 62  6c 6f 63 6b 25 0d 0f 4c  |ndow",,block%..L|
0001b690  19 20 20 20 20 f2 72 65  64 72 61 77 28 72 65 6c  |.    .redraw(rel|
0001b6a0  61 74 65 57 25 29 0d 0f  4d 07 20 20 cd 0d 0f 4e  |ateW%)..M.  ...N|
0001b6b0  1f 20 20 cc 20 f2 63 6c  6f 73 65 5f 77 69 6e 64  |.  . .close_wind|
0001b6c0  6f 77 28 72 65 6c 61 74  65 57 25 29 0d 0f 4f 05  |ow(relateW%)..O.|
0001b6d0  cd 0d 0f 50 05 e1 0d 0f  51 05 3a 0d 0f 52 17 dd  |...P....Q.:..R..|
0001b6e0  20 a4 66 69 78 5f 70 6f  69 6e 74 28 46 24 2c 46  | .fix_point(F$,F|
0001b6f0  25 29 0d 0f 53 10 e7 20  46 24 3d 22 22 20 8c 3d  |%)..S.. F$="" .=|
0001b700  22 22 0d 0f 54 1d 40 25  3d 26 30 31 30 32 30 30  |""..T.@%=&010200|
0001b710  30 39 2b 66 69 78 25 28  46 25 29 2a 32 35 36 0d  |09+fix%(F%)*256.|
0001b720  0f 55 0f 46 24 3d c3 28  bb 28 46 24 29 29 0d 0f  |.U.F$=.(.(F$))..|
0001b730  56 0b 40 25 3d 26 39 30  41 0d 0f 57 12 3d c0 46  |V.@%=&90A..W.=.F|
0001b740  24 2c 6c 65 6e 25 28 46  25 29 29 0d 0f 58 05 3a  |$,len%(F%))..X.:|
0001b750  0d 0f 59 19 dd 20 a4 6d  6f 76 65 74 6f 28 6b 65  |..Y.. .moveto(ke|
0001b760  79 25 2c 50 25 2c 44 25  29 0d 0f 5a 11 44 25 3d  |y%,P%,D%)..Z.D%=|
0001b770  28 44 25 2b 31 29 20 81  20 32 0d 0f 5b 0f e7 20  |(D%+1) . 2..[.. |
0001b780  66 69 6c 74 65 72 25 20  8c 0d 0f 5c 23 20 20 50  |filter% ...\#  P|
0001b790  25 3d a4 6e 65 78 74 5f  6d 61 74 63 68 28 50 25  |%=.next_match(P%|
0001b7a0  2c 44 25 2c 46 69 6c 74  65 72 24 29 0d 0f 5d 07  |,D%,Filter$)..].|
0001b7b0  20 20 cc 0d 0f 5e 1f 20  20 50 25 3d a4 6e 65 69  |  ...^.  P%=.nei|
0001b7c0  67 68 62 6f 75 72 28 6b  65 79 25 2c 50 25 2c 44  |ghbour(key%,P%,D|
0001b7d0  25 29 0d 0f 5f 2e 20 20  e7 20 50 25 3d 74 6f 70  |%).._.  . P%=top|
0001b7e0  20 8c 20 ef 20 37 3a 50  25 3d a4 6e 65 69 67 68  | . . 7:P%=.neigh|
0001b7f0  62 6f 75 72 28 6b 65 79  25 2c 50 25 2c 44 25 29  |bour(key%,P%,D%)|
0001b800  0d 0f 60 05 cd 0d 0f 61  15 f2 64 69 73 70 6c 61  |..`....a..displa|
0001b810  79 28 6b 65 79 25 2c 50  25 29 0d 0f 62 07 3d 50  |y(key%,P%)..b.=P|
0001b820  25 0d 0f 63 05 3a 0d 0f  64 1b dd 20 a4 6e 65 78  |%..c.:..d.. .nex|
0001b830  74 5f 6d 61 74 63 68 28  50 25 2c 44 25 2c 53 24  |t_match(P%,D%,S$|
0001b840  29 0d 0f 65 0a ea 20 52  45 43 25 0d 0f 66 2a 64  |)..e.. REC%..f*d|
0001b850  62 61 73 65 68 61 6e 64  6c 65 25 3d 8e 28 24 64  |basehandle%=.($d|
0001b860  61 74 61 62 61 73 65 25  2b 22 2e 44 61 74 61 62  |atabase%+".Datab|
0001b870  61 73 65 22 29 0d 0f 67  05 f5 0d 0f 68 1f 20 20  |ase")..g....h.  |
0001b880  50 25 3d a4 6e 65 69 67  68 62 6f 75 72 28 6b 65  |P%=.neighbour(ke|
0001b890  79 25 2c 50 25 2c 44 25  29 0d 0f 69 11 20 20 e7  |y%,P%,D%)..i.  .|
0001b8a0  20 50 25 3c 3e 74 6f 70  20 8c 0d 0f 6a 20 20 20  | P%<>top ...j   |
0001b8b0  20 20 52 45 43 25 3d a4  72 65 63 5f 6e 6f 28 6b  |  REC%=.rec_no(k|
0001b8c0  24 2c 6b 65 79 25 2c 50  25 29 0d 0f 6b 27 20 20  |$,key%,P%)..k'  |
0001b8d0  20 20 f2 72 65 61 64 73  6d 61 72 72 61 79 28 64  |  .readsmarray(d|
0001b8e0  62 61 73 65 68 61 6e 64  6c 65 25 2c 52 45 43 25  |basehandle%,REC%|
0001b8f0  29 0d 0f 6c 07 20 20 cd  0d 0f 6d 16 fd 20 a0 28  |)..l.  ...m.. .(|
0001b900  53 24 29 3d b9 20 84 20  50 25 3d 74 6f 70 0d 0f  |S$)=. . P%=top..|
0001b910  6e 20 e7 20 50 25 3d 74  6f 70 20 8c 20 f2 73 6f  |n . P%=top . .so|
0001b920  66 74 65 72 72 6f 72 28  22 22 2c 33 38 29 0d 0f  |fterror("",38)..|
0001b930  6f 1d f2 63 6c 6f 73 65  5f 66 69 6c 65 28 64 62  |o..close_file(db|
0001b940  61 73 65 68 61 6e 64 6c  65 25 29 0d 0f 70 07 3d  |asehandle%)..p.=|
0001b950  50 25 0d 0f 71 05 3a 0d  0f 72 17 dd 20 f2 64 69  |P%..q.:..r.. .di|
0001b960  73 70 6c 61 79 28 6b 65  79 25 2c 50 25 29 0d 0f  |splay(key%,P%)..|
0001b970  73 11 f2 63 68 65 63 6b  5f 63 68 61 6e 67 65 0d  |s..check_change.|
0001b980  0f 74 2d e7 20 74 65 6d  70 6c 61 74 65 25 3d 31  |.t-. template%=1|
0001b990  20 8c 20 74 65 6d 70 6c  61 74 65 25 3d 32 20 8b  | . template%=2 .|
0001b9a0  20 74 65 6d 70 6c 61 74  65 25 3d 30 0d 0f 75 21  | template%=0..u!|
0001b9b0  ea 20 49 25 2c 4c 25 2c  53 25 2c 53 24 2c 6b 24  |. I%,L%,S%,S$,k$|
0001b9c0  2c 6f 6b 25 2c 6e 65 78  74 72 65 63 25 0d 0f 76  |,ok%,nextrec%..v|
0001b9d0  0b c8 8e 20 50 25 20 ca  0d 0f 77 0b 20 20 c9 20  |... P% ...w.  . |
0001b9e0  2d 31 3a 0d 0f 78 50 20  20 6b 65 79 62 61 73 65  |-1:..xP  keybase|
0001b9f0  25 3d 21 6b 65 79 61 6e  63 68 6f 72 25 28 6b 65  |%=!keyanchor%(ke|
0001ba00  79 25 29 3a 41 25 3d 21  6b 65 79 62 61 73 65 25  |y%):A%=!keybase%|
0001ba10  3a 6e 65 78 74 72 65 63  25 3d 21 28 6b 65 79 62  |:nextrec%=!(keyb|
0001ba20  61 73 65 25 2b 41 25 2b  38 2b 4b 4c 25 28 30 29  |ase%+A%+8+KL%(0)|
0001ba30  2b 31 29 0d 0f 79 0c 20  20 c8 8e 20 b9 20 ca 0d  |+1)..y.  .. . ..|
0001ba40  0f 7a 36 20 20 20 20 c9  20 21 28 6b 65 79 62 61  |.z6    . !(keyba|
0001ba50  73 65 25 2b 41 25 29 3e  30 2c 74 65 6d 70 6c 61  |se%+A%)>0,templa|
0001ba60  74 65 25 3d 32 2c 64 65  73 69 67 6e 25 3d b9 3a  |te%=2,design%=.:|
0001ba70  6f 6b 25 3d b9 0d 0f 7b  0a 20 20 20 20 7f 3a 0d  |ok%=...{.    .:.|
0001ba80  0f 7c 1c 20 20 20 20 69  6e 63 72 25 3d bb 28 24  |.|.    incr%=.($|
0001ba90  49 6e 63 72 65 6d 65 6e  74 25 29 0d 0f 7d 13 20  |Increment%)..}. |
0001baa0  20 20 20 e7 20 69 6e 63  72 25 3e 30 20 8c 0d 0f  |   . incr%>0 ...|
0001bab0  7e 2b 20 20 20 20 20 20  f2 63 68 61 6e 67 65 5f  |~+      .change_|
0001bac0  6c 65 6e 67 74 68 28 52  41 25 2b 69 6e 63 72 25  |length(RA%+incr%|
0001bad0  2c a3 29 3a 6f 6b 25 3d  b9 0d 0f 7f 1c 20 20 20  |,.):ok%=.....   |
0001bae0  20 20 20 cc 20 f2 73 6f  66 74 65 72 72 6f 72 28  |   . .softerror(|
0001baf0  22 22 2c 32 29 0d 0f 80  09 20 20 20 20 cd 0d 0f  |"",2)....    ...|
0001bb00  81 07 20 20 cb 0d 0f 82  0d 20 20 e7 20 6f 6b 25  |..  .....  . ok%|
0001bb10  20 8c 0d 0f 83 0e 20 20  20 20 c8 8e 20 b9 20 ca  | .....    .. . .|
0001bb20  0d 0f 84 3a 20 20 20 20  20 20 c9 20 64 65 73 69  |...:      . desi|
0001bb30  67 6e 25 3a 24 52 65 63  49 6e 66 6f 25 3d 22 4d  |gn%:$RecInfo%="M|
0001bb40  61 6b 65 20 61 64 6a 75  73 74 6d 65 6e 74 73 20  |ake adjustments |
0001bb50  74 6f 20 66 69 65 6c 64  73 22 0d 0f 85 61 20 20  |to fields"...a  |
0001bb60  20 20 20 20 c9 20 74 65  6d 70 6c 61 74 65 25 3d  |    . template%=|
0001bb70  32 3a 24 52 65 63 49 6e  66 6f 25 3d 22 45 6e 74  |2:$RecInfo%="Ent|
0001bb80  65 72 20 64 61 74 61 20  77 68 69 63 68 20 79 6f  |er data which yo|
0001bb90  75 20 77 61 6e 74 20 74  6f 20 61 70 70 65 61 72  |u want to appear|
0001bba0  20 62 79 20 64 65 66 61  75 6c 74 20 6f 6e 20 6e  | by default on n|
0001bbb0  65 77 20 72 65 63 6f 72  64 73 22 0d 0f 86 22 20  |ew records"..." |
0001bbc0  20 20 20 20 20 7f 3a 24  52 65 63 49 6e 66 6f 25  |     .:$RecInfo%|
0001bbd0  3d 22 4e 65 77 20 72 65  63 6f 72 64 22 0d 0f 87  |="New record"...|
0001bbe0  09 20 20 20 20 cb 0d 0f  88 31 20 20 20 20 52 45  |.    ....1    RE|
0001bbf0  43 25 3d 52 41 25 3a f2  72 65 61 64 28 66 69 65  |C%=RA%:.read(fie|
0001bc00  6c 64 73 25 2c a3 2c 52  45 43 25 2c 24 64 61 74  |lds%,.,REC%,$dat|
0001bc10  61 62 61 73 65 25 29 0d  0f 89 07 20 20 cd 0d 0f  |abase%)....  ...|
0001bc20  8a 0c 20 20 c9 20 74 6f  70 3a 0d 0f 8b 2f 20 20  |..  . top:.../  |
0001bc30  52 45 43 25 3d 52 41 25  3a f2 72 65 61 64 28 66  |REC%=RA%:.read(f|
0001bc40  69 65 6c 64 73 25 2c a3  2c 52 45 43 25 2c 24 64  |ields%,.,REC%,$d|
0001bc50  61 74 61 62 61 73 65 25  29 0d 0f 8c 23 20 20 24  |atabase%)...#  $|
0001bc60  52 65 63 49 6e 66 6f 25  3d 22 53 75 62 66 69 6c  |RecInfo%="Subfil|
0001bc70  65 3d 22 2b c3 28 66 69  6c 65 25 29 0d 0f 8d 2e  |e="+.(file%)....|
0001bc80  20 20 e7 20 ac 20 66 69  6c 74 65 72 25 20 8c 20  |  . . filter% . |
0001bc90  ef 20 37 3a 24 52 65 63  49 6e 66 6f 25 2b 3d 22  |. 7:$RecInfo%+="|
0001bca0  2e 20 28 45 6d 70 74 79  29 22 0d 0f 8e 08 20 20  |. (Empty)"....  |
0001bcb0  7f 3a 0d 0f 8f 1e 20 20  52 45 43 25 3d a4 72 65  |.:....  REC%=.re|
0001bcc0  63 5f 6e 6f 28 6b 24 2c  6b 65 79 25 2c 50 25 29  |c_no(k$,key%,P%)|
0001bcd0  0d 0f 90 26 20 20 f2 72  65 61 64 28 66 69 65 6c  |...&  .read(fiel|
0001bce0  64 73 25 2c b9 2c 52 45  43 25 2c 24 64 61 74 61  |ds%,.,REC%,$data|
0001bcf0  62 61 73 65 25 29 0d 0f  91 13 20 20 6b 65 79 24  |base%)....  key$|
0001bd00  28 6b 65 79 25 29 3d 6b  24 0d 0f 92 4b 20 20 24  |(key%)=k$...K  $|
0001bd10  52 65 63 49 6e 66 6f 25  3d 22 53 75 62 66 69 6c  |RecInfo%="Subfil|
0001bd20  65 3d 22 2b c3 28 66 69  6c 65 25 29 2b 22 2e 20  |e="+.(file%)+". |
0001bd30  52 65 63 6f 72 64 3d 22  2b c3 28 52 45 43 25 29  |Record="+.(REC%)|
0001bd40  2b 22 2e 20 4b 65 79 3d  22 2b 6b 65 79 24 28 6b  |+". Key="+key$(k|
0001bd50  65 79 25 29 0d 0f 93 05  cb 0d 0f 94 26 4c 25 3d  |ey%)........&L%=|
0001bd60  a4 74 65 78 74 5f 6c 65  6e 67 74 68 28 6d 61 69  |.text_length(mai|
0001bd70  6e 57 25 2c 73 74 61 72  74 68 65 72 65 25 29 0d  |nW%,starthere%).|
0001bd80  0f 95 2d e7 20 41 63 63  65 73 73 25 20 8c 20 f2  |..-. Access% . .|
0001bd90  73 65 74 5f 63 61 72 65  74 28 6d 61 69 6e 57 25  |set_caret(mainW%|
0001bda0  2c 73 74 61 72 74 68 65  72 65 25 29 0d 0f 96 1f  |,starthere%)....|
0001bdb0  f2 69 64 65 6e 74 69 66  79 5f 66 69 65 6c 64 28  |.identify_field(|
0001bdc0  73 74 61 72 74 68 65 72  65 25 29 0d 0f 97 14 f2  |starthere%).....|
0001bdd0  75 70 64 61 74 65 5f 63  61 6c 63 73 28 30 29 0d  |update_calcs(0).|
0001bde0  0f 98 61 e7 20 a4 73 65  6c 65 63 74 65 64 28 70  |..a. .selected(p|
0001bdf0  61 73 73 57 25 2c 31 36  29 20 8c 20 6c 6f 67 65  |assW%,16) . loge|
0001be00  6e 74 72 79 24 3d 22 53  75 62 66 69 6c 65 20 22  |ntry$="Subfile "|
0001be10  2b c3 28 66 69 6c 65 25  29 2b 22 20 20 22 2b 24  |+.(file%)+"  "+$|
0001be20  52 66 25 28 4b 46 25 28  30 2c 30 29 29 2b 22 20  |Rf%(KF%(0,0))+" |
0001be30  22 2b 24 52 66 25 28 4b  46 25 28 30 2c 31 29 29  |"+$Rf%(KF%(0,1))|
0001be40  0d 0f 99 13 f2 72 65 64  72 61 77 28 6d 61 69 6e  |.....redraw(main|
0001be50  57 25 29 0d 0f 9a 05 e1  0d 0f 9b 05 3a 0d 0f 9c  |W%).........:...|
0001be60  05 3a 0d 0f 9d 47 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |.:...G. --------|
0001be70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 20 49 63 6f  |------------ Ico|
0001be80  6e 20 63 6f 6c 6f 75 72  73 20 2d 2d 2d 2d 2d 2d  |n colours ------|
0001be90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
0001bea0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 0f 9e 05 3a 0d 0f  |---------....:..|
0001beb0  9f 19 dd 20 f2 63 6f 6c  6f 75 72 28 6b 65 79 25  |... .colour(key%|
0001bec0  2c 74 79 70 65 25 29 0d  0f a0 24 f2 63 68 61 6e  |,type%)...$.chan|
0001bed0  67 65 5f 66 69 65 6c 64  5f 63 6f 6c 73 28 6b 65  |ge_field_cols(ke|
0001bee0  79 25 2c 74 79 70 65 25  2c 30 29 0d 0f a1 36 e7  |y%,type%,0)...6.|
0001bef0  20 4b 46 25 28 6b 65 79  25 2c 31 29 3e 30 20 8c  | KF%(key%,1)>0 .|
0001bf00  20 f2 63 68 61 6e 67 65  5f 66 69 65 6c 64 5f 63  | .change_field_c|
0001bf10  6f 6c 73 28 6b 65 79 25  2c 74 79 70 65 25 2c 31  |ols(key%,type%,1|
0001bf20  29 0d 0f a2 05 e1 0d 0f  a3 05 3a 0d 0f a4 29 dd  |).........:...).|
0001bf30  20 f2 63 68 61 6e 67 65  5f 66 69 65 6c 64 5f 63  | .change_field_c|
0001bf40  6f 6c 73 28 6b 65 79 25  2c 74 79 70 65 25 2c 66  |ols(key%,type%,f|
0001bf50  6c 64 25 29 0d 0f a5 17  63 6f 6c 25 3d 66 63 6f  |ld%)....col%=fco|
0001bf60  6c 25 28 74 79 70 65 25  2a 32 29 0d 0f a6 64 e7  |l%(type%*2)...d.|
0001bf70  20 74 79 70 65 25 3d 30  20 84 20 6b 65 79 25 3e  | type%=0 . key%>|
0001bf80  30 20 84 20 28 6b 65 79  25 3d 30 20 80 20 66 63  |0 . (key%=0 . fc|
0001bf90  6f 6c 25 28 30 29 3d 26  31 37 29 20 8c 20 f2 73  |ol%(0)=&17) . .s|
0001bfa0  65 74 5f 69 63 6f 6e 5f  63 6f 6c 73 28 6d 61 69  |et_icon_cols(mai|
0001bfb0  6e 57 25 2c 64 65 73 63  25 28 4b 46 25 28 6b 65  |nW%,desc%(KF%(ke|
0001bfc0  79 25 2c 66 6c 64 25 29  29 2c 63 6f 6c 25 29 0d  |y%,fld%)),col%).|
0001bfd0  0f a7 19 63 6f 6c 25 3d  66 63 6f 6c 25 28 74 79  |...col%=fcol%(ty|
0001bfe0  70 65 25 2a 32 2b 31 29  0d 0f a8 37 63 6f 6c 32  |pe%*2+1)...7col2|
0001bff0  25 3d a4 67 65 74 5f 69  63 6f 6e 5f 63 6f 6c 73  |%=.get_icon_cols|
0001c000  28 6d 61 69 6e 57 25 2c  66 69 65 6c 64 25 28 4b  |(mainW%,field%(K|
0001c010  46 25 28 6b 65 79 25 2c  66 6c 64 25 29 29 29 0d  |F%(key%,fld%))).|
0001c020  0f a9 21 e7 20 28 63 6f  6c 32 25 20 80 20 25 31  |..!. (col2% . %1|
0001c030  31 31 31 29 3c 3e 66 63  6f 6c 25 28 36 29 20 8c  |111)<>fcol%(6) .|
0001c040  0d 0f aa 67 20 20 e7 20  74 79 70 65 25 3d 30 20  |...g  . type%=0 |
0001c050  84 20 6b 65 79 25 3e 30  20 84 20 28 6b 65 79 25  |. key%>0 . (key%|
0001c060  3d 30 20 80 20 66 63 6f  6c 25 28 31 29 3d 26 30  |=0 . fcol%(1)=&0|
0001c070  37 29 20 8c 20 f2 73 65  74 5f 69 63 6f 6e 5f 63  |7) . .set_icon_c|
0001c080  6f 6c 73 28 6d 61 69 6e  57 25 2c 66 69 65 6c 64  |ols(mainW%,field|
0001c090  25 28 4b 46 25 28 6b 65  79 25 2c 66 6c 64 25 29  |%(KF%(key%,fld%)|
0001c0a0  29 2c 63 6f 6c 25 29 0d  0f ab 05 cd 0d 0f ac 05  |),col%).........|
0001c0b0  e1 0d 0f ad 05 3a 0d 0f  ae 1d dd 20 a4 67 65 74  |.....:..... .get|
0001c0c0  5f 69 63 6f 6e 5f 63 6f  6c 73 28 77 69 25 2c 69  |_icon_cols(wi%,i|
0001c0d0  63 25 29 0d 0f af 3b 21  62 6c 6f 63 6b 25 3d 77  |c%)...;!block%=w|
0001c0e0  69 25 3a 62 6c 6f 63 6b  25 21 34 3d 69 63 25 3a  |i%:block%!4=ic%:|
0001c0f0  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
0001c100  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 0f  |State",,block%..|
0001c110  b0 0e 3d 62 6c 6f 63 6b  25 3f 32 37 0d 0f b1 05  |..=block%?27....|
0001c120  3a 0d 0f b2 22 dd 20 f2  73 65 74 5f 69 63 6f 6e  |:...". .set_icon|
0001c130  5f 63 6f 6c 73 28 77 69  25 2c 69 63 25 2c 63 6f  |_cols(wi%,ic%,co|
0001c140  6c 25 29 0d 0f b3 44 21  62 6c 6f 63 6b 25 3d 77  |l%)...D!block%=w|
0001c150  69 25 3a 62 6c 6f 63 6b  25 21 34 3d 69 63 25 3a  |i%:block%!4=ic%:|
0001c160  62 6c 6f 63 6b 25 21 38  3d 28 63 6f 6c 25 3c 3c  |block%!8=(col%<<|
0001c170  32 34 29 3a 62 6c 6f 63  6b 25 21 31 32 3d 26 46  |24):block%!12=&F|
0001c180  46 30 30 30 30 30 30 0d  0f b4 22 c8 99 20 22 57  |F000000...".. "W|
0001c190  69 6d 70 5f 53 65 74 49  63 6f 6e 53 74 61 74 65  |imp_SetIconState|
0001c1a0  22 2c 2c 62 6c 6f 63 6b  25 0d 0f b5 05 e1 0d 0f  |",,block%.......|
0001c1b0  b6 05 3a 0d 0f b7 20 dd  20 f2 64 63 6f 6c 6f 75  |..:... . .dcolou|
0001c1c0  72 28 77 69 25 2c 69 63  25 2c 63 6f 6c 25 2c 66  |r(wi%,ic%,col%,f|
0001c1d0  62 25 29 0d 0f b8 3b 21  62 6c 6f 63 6b 25 3d 77  |b%)...;!block%=w|
0001c1e0  69 25 3a 62 6c 6f 63 6b  25 21 34 3d 69 63 25 3a  |i%:block%!4=ic%:|
0001c1f0  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
0001c200  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 0f  |State",,block%..|
0001c210  b9 0c c8 8e 20 66 62 25  20 ca 0d 0f ba 2f 20 20  |.... fb% ..../  |
0001c220  c9 20 30 3a 62 6c 6f 63  6b 25 21 38 3d 63 6f 6c  |. 0:block%!8=col|
0001c230  25 3c 3c 32 38 3a 62 6c  6f 63 6b 25 21 31 32 3d  |%<<28:block%!12=|
0001c240  26 46 30 30 30 30 30 30  30 0d 0f bb 2f 20 20 c9  |&F0000000.../  .|
0001c250  20 31 3a 62 6c 6f 63 6b  25 21 38 3d 63 6f 6c 25  | 1:block%!8=col%|
0001c260  3c 3c 32 34 3a 62 6c 6f  63 6b 25 21 31 32 3d 26  |<<24:block%!12=&|
0001c270  30 46 30 30 30 30 30 30  0d 0f bc 05 cb 0d 0f bd  |0F000000........|
0001c280  22 c8 99 20 22 57 69 6d  70 5f 53 65 74 49 63 6f  |".. "Wimp_SetIco|
0001c290  6e 53 74 61 74 65 22 2c  2c 62 6c 6f 63 6b 25 0d  |nState",,block%.|
0001c2a0  0f be 05 e1 0d 0f bf 05  3a 0d 0f c0 17 dd 20 f2  |........:..... .|
0001c2b0  72 65 61 64 5f 63 6f 6c  6f 75 72 73 28 66 24 29  |read_colours(f$)|
0001c2c0  0d 0f c1 09 ea 20 69 63  25 0d 0f c2 0b 46 3d 8e  |..... ic%....F=.|
0001c2d0  28 66 24 29 0d 0f c3 0f  e3 20 69 63 25 3d 30 20  |(f$)..... ic%=0 |
0001c2e0  b8 20 36 0d 0f c4 14 20  20 e8 23 46 2c 66 63 6f  |. 6....  .#F,fco|
0001c2f0  6c 25 28 69 63 25 29 0d  0f c5 09 ed 20 69 63 25  |l%(ic%)..... ic%|
0001c300  0d 0f c6 13 6e 63 6f 6c  25 28 29 3d 66 63 6f 6c  |....ncol%()=fcol|
0001c310  25 28 29 0d 0f c7 12 f2  63 6c 6f 73 65 5f 66 69  |%().....close_fi|
0001c320  6c 65 28 46 29 0d 0f c8  05 e1 0d 0f c9 05 3a 0d  |le(F).........:.|
0001c330  0f ca 14 dd 20 f2 77 72  69 74 65 5f 63 6f 6c 6f  |.... .write_colo|
0001c340  75 72 73 0d 0f cb 09 ea  20 69 63 25 0d 0f cc 1e  |urs..... ic%....|
0001c350  46 3d ad 28 24 64 61 74  61 62 61 73 65 25 2b 22  |F=.($database%+"|
0001c360  2e 43 6f 6c 6f 75 72 73  22 29 0d 0f cd 0f e3 20  |.Colours")..... |
0001c370  69 63 25 3d 30 20 b8 20  36 0d 0f ce 14 20 20 f1  |ic%=0 . 6....  .|
0001c380  23 46 2c 66 63 6f 6c 25  28 69 63 25 29 0d 0f cf  |#F,fcol%(ic%)...|
0001c390  09 ed 20 69 63 25 0d 0f  d0 12 f2 63 6c 6f 73 65  |.. ic%.....close|
0001c3a0  5f 66 69 6c 65 28 46 29  0d 0f d1 05 e1 0d 0f d2  |_file(F)........|
0001c3b0  05 3a 0d 0f d3 1d dd 20  a4 66 69 6e 64 28 53 24  |.:..... .find(S$|
0001c3c0  2c 6b 65 79 25 2c 6d 25  2c 64 69 73 70 25 29 0d  |,key%,m%,disp%).|
0001c3d0  0f d4 20 ea 20 50 25 2c  46 25 2c 48 25 2c 6e 75  |.. . P%,F%,H%,nu|
0001c3e0  6d 25 2c 61 62 6f 72 74  25 2c 63 6f 6e 64 24 0d  |m%,abort%,cond$.|
0001c3f0  0f d5 1f e7 20 ac 20 63  61 73 65 25 28 6b 65 79  |.... . case%(key|
0001c400  25 29 20 8c 20 53 24 3d  a4 75 28 53 24 29 0d 0f  |%) . S$=.u(S$)..|
0001c410  d6 12 e7 20 c0 53 24 2c  31 29 3d 22 23 22 20 8c  |... .S$,1)="#" .|
0001c420  0d 0f d7 13 20 20 f2 63  68 65 63 6b 5f 63 68 61  |....  .check_cha|
0001c430  6e 67 65 0d 0f d8 14 20  20 52 45 43 25 3d bb 28  |nge....  REC%=.(|
0001c440  c1 53 24 2c 32 29 29 0d  0f d9 1c 20 20 e7 20 52  |.S$,2))....  . R|
0001c450  45 43 25 3e 3d 30 20 80  20 52 45 43 25 3c 52 41  |EC%>=0 . REC%<RA|
0001c460  25 20 8c 0d 0f da 28 20  20 20 20 f2 72 65 61 64  |% ....(    .read|
0001c470  28 66 69 65 6c 64 73 25  2c b9 2c 52 45 43 25 2c  |(fields%,.,REC%,|
0001c480  24 64 61 74 61 62 61 73  65 25 29 0d 0f db 21 20  |$database%)...! |
0001c490  20 20 20 53 24 3d 6b 65  79 24 28 6b 65 79 25 29  |   S$=key$(key%)|
0001c4a0  3a 48 25 3d 31 3a 6e 75  6d 25 3d b9 0d 0f dc 33  |:H%=1:num%=....3|
0001c4b0  20 20 20 20 f2 73 65 6c  65 63 74 28 6b 65 79 70  |    .select(keyp|
0001c4c0  61 64 57 25 2c 32 35 29  3a f2 64 65 73 65 6c 65  |adW%,25):.desele|
0001c4d0  63 74 28 6b 65 79 70 61  64 57 25 2c 32 34 29 0d  |ct(keypadW%,24).|
0001c4e0  0f dd 2d 20 20 20 20 cc  20 f2 73 6f 66 74 65 72  |..-    . .softer|
0001c4f0  72 6f 72 28 22 20 28 22  2b 53 24 2b 22 29 22 2c  |ror(" ("+S$+")",|
0001c500  35 36 29 3a 61 62 6f 72  74 25 3d b9 0d 0f de 07  |56):abort%=.....|
0001c510  20 20 cd 0d 0f df 05 cd  0d 0f e0 13 e7 20 61 62  |  ........... ab|
0001c520  6f 72 74 25 20 8c 3d 61  64 64 72 0d 0f e1 14 76  |ort% .=addr....v|
0001c530  61 6c 24 3d a4 74 79 70  65 28 6b 65 79 25 29 0d  |al$=.type(key%).|
0001c540  0f e2 12 e7 20 76 61 6c  24 3d 22 56 41 4c 22 20  |.... val$="VAL" |
0001c550  8c 0d 0f e3 13 20 20 6b  6c 25 3d 4b 4c 25 28 6b  |.....  kl%=KL%(k|
0001c560  65 79 25 29 0d 0f e4 07  20 20 cc 0d 0f e5 11 20  |ey%)....  ..... |
0001c570  20 50 25 3d a7 53 24 2c  22 20 22 29 0d 0f e6 1b  | P%=.S$," ")....|
0001c580  20 20 e7 20 50 25 3e 30  20 8c 20 53 24 3d c0 53  |  . P%>0 . S$=.S|
0001c590  24 2c 50 25 2d 31 29 0d  0f e7 0f 20 20 6b 6c 25  |$,P%-1)....  kl%|
0001c5a0  3d a9 28 53 24 29 0d 0f  e8 05 cd 0d 0f e9 1c 50  |=.(S$).........P|
0001c5b0  25 3d a4 73 65 61 72 63  68 28 53 24 2c 6b 65 79  |%=.search(S$,key|
0001c5c0  25 2c 31 2b 48 25 29 0d  0f ea 25 e7 20 50 25 3c  |%,1+H%)...%. P%<|
0001c5d0  30 20 80 20 a4 73 65 6c  65 63 74 65 64 28 6b 65  |0 . .selected(ke|
0001c5e0  79 70 61 64 57 25 2c 32  35 29 20 8c 0d 0f eb 0e  |ypadW%,25) .....|
0001c5f0  20 20 46 25 3d 66 69 6c  65 25 0d 0f ec 07 20 20  |  F%=file%....  |
0001c600  f5 0d 0f ed 1b 20 20 20  20 66 69 6c 65 25 3d 28  |.....    file%=(|
0001c610  66 69 6c 65 25 2b 31 29  20 83 20 36 0d 0f ee 17  |file%+1) . 6....|
0001c620  20 20 20 20 74 6f 70 3d  38 2a 66 69 6c 65 25 2b  |    top=8*file%+|
0001c630  4c 48 25 0d 0f ef 20 20  20 20 20 50 25 3d a4 73  |LH%...     P%=.s|
0001c640  65 61 72 63 68 28 53 24  2c 6b 65 79 25 2c 31 2b  |earch(S$,key%,1+|
0001c650  48 25 29 0d 0f f0 17 20  20 fd 20 50 25 3e 30 20  |H%)....  . P%>0 |
0001c660  84 20 66 69 6c 65 25 3d  46 25 0d 0f f1 05 cd 0d  |. file%=F%......|
0001c670  0f f2 73 e7 20 76 61 6c  24 3d 22 56 41 4c 22 20  |..s. val$="VAL" |
0001c680  8c 20 63 6f 6e 64 24 3d  22 56 41 4c 28 24 28 21  |. cond$="VAL($(!|
0001c690  6b 65 79 61 6e 63 68 6f  72 25 28 6b 65 79 25 29  |keyanchor%(key%)|
0001c6a0  2b 50 25 2b 38 29 29 3d  56 41 4c 28 53 24 29 22  |+P%+8))=VAL(S$)"|
0001c6b0  20 8b 20 63 6f 6e 64 24  3d 22 4c 45 46 54 24 28  | . cond$="LEFT$(|
0001c6c0  24 28 21 6b 65 79 61 6e  63 68 6f 72 25 28 6b 65  |$(!keyanchor%(ke|
0001c6d0  79 25 29 2b 50 25 2b 38  29 2c 6b 6c 25 29 3d 53  |y%)+P%+8),kl%)=S|
0001c6e0  24 22 0d 0f f3 0e 6d 61  74 63 68 65 73 25 3d 30  |$"....matches%=0|
0001c6f0  0d 0f f4 0a c8 8e 20 b9  20 ca 0d 0f f5 24 20 20  |...... . ....$  |
0001c700  c9 20 50 25 3e 3d 30 20  80 20 6e 75 6d 25 3a 52  |. P%>=0 . num%:R|
0001c710  65 63 46 25 3d b9 3a 61  64 64 72 3d 50 25 0d 0f  |ecF%=.:addr=P%..|
0001c720  f6 15 20 20 c9 20 50 25  3e 3d 30 3a 52 65 63 46  |..  . P%>=0:RecF|
0001c730  25 3d b9 0d 0f f7 11 20  20 c8 95 20 a0 28 63 6f  |%=.....  .. .(co|
0001c740  6e 64 24 29 0d 0f f8 20  20 20 20 20 50 25 3d a4  |nd$)...     P%=.|
0001c750  6e 65 69 67 68 62 6f 75  72 28 6b 65 79 25 2c 50  |neighbour(key%,P|
0001c760  25 2c 30 29 0d 0f f9 07  20 20 ce 0d 0f fa 5c 20  |%,0)....  ....\ |
0001c770  20 50 25 3d a4 6e 65 69  67 68 62 6f 75 72 28 6b  | P%=.neighbour(k|
0001c780  65 79 25 2c 50 25 2c 31  29 3a 61 64 64 72 3d 50  |ey%,P%,1):addr=P|
0001c790  25 3a f4 20 23 23 23 20  53 63 61 6e 20 62 61 63  |%:. ### Scan bac|
0001c7a0  6b 20 74 6f 20 46 49 52  53 54 20 6d 61 74 63 68  |k to FIRST match|
0001c7b0  20 26 20 70 6f 69 6e 74  20 61 64 64 72 20 61 74  | & point addr at|
0001c7c0  20 69 74 20 23 23 23 0d  0f fb 11 20 20 c8 95 20  | it ###....  .. |
0001c7d0  a0 28 63 6f 6e 64 24 29  0d 0f fc 13 20 20 20 20  |.(cond$)....    |
0001c7e0  6d 61 74 63 68 65 73 25  2b 3d 31 0d 0f fd 20 20  |matches%+=1...  |
0001c7f0  20 20 20 50 25 3d a4 6e  65 69 67 68 62 6f 75 72  |   P%=.neighbour|
0001c800  28 6b 65 79 25 2c 50 25  2c 31 29 0d 0f fe 07 20  |(key%,P%,1).... |
0001c810  20 ce 0d 0f ff 2d 20 20  c9 20 6e 75 6d 25 3a f2  | ....-  . num%:.|
0001c820  73 6f 66 74 65 72 72 6f  72 28 22 20 28 23 22 2b  |softerror(" (#"+|
0001c830  c3 28 52 45 43 25 29 2b  22 29 22 2c 35 35 29 0d  |.(REC%)+")",55).|
0001c840  10 00 29 20 20 7f 3a ef  20 37 3a 66 6c 61 73 68  |..)  .:. 7:flash|
0001c850  25 3d 4b 46 25 28 6b 65  79 25 2c 30 29 3a 61 64  |%=KF%(key%,0):ad|
0001c860  64 72 3d 94 28 50 25 29  0d 10 01 05 cb 0d 10 02  |dr=.(P%)........|
0001c870  46 24 a4 74 65 78 74 28  6b 65 79 70 61 64 57 25  |F$.text(keypadW%|
0001c880  2c 33 36 29 3d c3 28 6d  61 74 63 68 65 73 25 29  |,36)=.(matches%)|
0001c890  2b 22 20 66 6f 75 6e 64  22 3a f2 72 65 64 72 61  |+" found":.redra|
0001c8a0  77 5f 69 63 6f 6e 28 6b  65 79 70 61 64 57 25 2c  |w_icon(keypadW%,|
0001c8b0  33 36 29 0d 10 03 21 e7  20 64 69 73 70 25 20 8c  |36)...!. disp% .|
0001c8c0  20 f2 64 69 73 70 6c 61  79 28 6b 65 79 25 2c 61  | .display(key%,a|
0001c8d0  64 64 72 29 0d 10 04 09  3d 61 64 64 72 0d 10 05  |ddr)....=addr...|
0001c8e0  05 3a 0d 10 06 1b dd 20  f2 67 65 74 5f 69 74 5f  |.:..... .get_it_|
0001c8f0  69 6e 28 66 69 6c 65 6e  61 6d 65 24 29 0d 10 07  |in(filename$)...|
0001c900  29 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  |).. "OS_File",5,|
0001c910  66 69 6c 65 6e 61 6d 65  24 20 b8 20 64 25 2c 2c  |filename$ . d%,,|
0001c920  66 74 79 70 65 25 0d 10  08 39 66 74 79 70 65 25  |ftype%...9ftype%|
0001c930  3d 28 66 74 79 70 65 25  3e 3e 38 29 20 80 20 26  |=(ftype%>>8) . &|
0001c940  46 46 46 3a 77 69 25 3d  62 6c 6f 63 6b 25 21 32  |FFF:wi%=block%!2|
0001c950  30 3a 69 63 25 3d 62 6c  6f 63 6b 25 21 32 34 0d  |0:ic%=block%!24.|
0001c960  10 09 0f c8 8e 20 66 74  79 70 65 25 20 ca 0d 10  |..... ftype% ...|
0001c970  0a 74 20 20 c9 20 26 37  66 31 3a e7 20 4c 61 73  |.t  . &7f1:. Las|
0001c980  74 54 61 62 6c 65 25 3d  4d 61 78 54 61 62 73 25  |tTable%=MaxTabs%|
0001c990  20 8c 20 f2 73 6f 66 74  65 72 72 6f 72 28 c3 28  | . .softerror(.(|
0001c9a0  4d 61 78 54 61 62 73 25  2b 31 29 2c 33 32 29 20  |MaxTabs%+1),32) |
0001c9b0  8b 20 f2 64 72 61 67 5f  74 61 62 6c 65 28 66 69  |. .drag_table(fi|
0001c9c0  6c 65 6e 61 6d 65 24 29  3a f2 73 68 6f 77 5f 74  |lename$):.show_t|
0001c9d0  61 62 6c 65 28 54 61 62  6c 65 6e 75 6d 62 65 72  |able(Tablenumber|
0001c9e0  25 29 0d 10 0b 27 20 20  c9 20 26 37 66 33 3a f2  |%)...'  . &7f3:.|
0001c9f0  64 72 61 67 5f 73 65 6c  65 63 74 69 6f 6e 28 66  |drag_selection(f|
0001ca00  69 6c 65 6e 61 6d 65 24  29 0d 10 0c 23 20 20 c9  |ilename$)...#  .|
0001ca10  20 26 37 66 34 3a f2 64  72 61 67 5f 71 75 65 72  | &7f4:.drag_quer|
0001ca20  79 28 66 69 6c 65 6e 61  6d 65 24 29 0d 10 0d 25  |y(filename$)...%|
0001ca30  20 20 c9 20 26 37 66 35  3a f2 64 72 61 67 5f 6f  |  . &7f5:.drag_o|
0001ca40  70 74 69 6f 6e 73 28 66  69 6c 65 6e 61 6d 65 24  |ptions(filename$|
0001ca50  29 0d 10 0e 2b 20 20 c9  20 26 64 66 65 3a f2 73  |)...+  . &dfe:.s|
0001ca60  74 61 72 74 5f 69 6d 70  6f 72 74 28 22 43 53 56  |tart_import("CSV|
0001ca70  22 2c 62 6c 6f 63 6b 25  21 32 30 29 0d 10 0f 4b  |",block%!20)...K|
0001ca80  20 20 c9 20 26 66 66 39  2c 26 61 66 66 3a f2 74  |  . &ff9,&aff:.t|
0001ca90  72 61 6e 73 66 65 72 5f  62 6c 6f 62 28 62 6c 6f  |ransfer_blob(blo|
0001caa0  63 6b 25 21 32 30 2c 62  6c 6f 63 6b 25 21 32 34  |ck%!20,block%!24|
0001cab0  2c 52 45 43 25 2c 66 69  6c 65 6e 61 6d 65 24 2c  |,REC%,filename$,|
0001cac0  66 74 79 70 65 25 29 0d  10 10 0d 20 20 c9 20 26  |ftype%)....  . &|
0001cad0  66 66 66 3a 0d 10 11 2f  20 20 46 3d 8e 28 66 69  |fff:.../  F=.(fi|
0001cae0  6c 65 6e 61 6d 65 24 29  3a 68 65 61 64 65 72 24  |lename$):header$|
0001caf0  3d be 23 46 3a f2 63 6c  6f 73 65 5f 66 69 6c 65  |=.#F:.close_file|
0001cb00  28 46 29 0d 10 12 0e 20  20 c8 8e 20 77 69 25 20  |(F)....  .. wi% |
0001cb10  ca 0d 10 13 14 20 20 20  20 c9 20 6d 61 69 6e 57  |.....    . mainW|
0001cb20  25 2c 2d 31 3a 0d 10 14  0e 20 20 20 20 c8 8e 20  |%,-1:....    .. |
0001cb30  b9 20 ca 0d 10 15 28 20  20 20 20 20 20 c9 20 68  |. ....(      . h|
0001cb40  65 61 64 65 72 24 3d 22  21 53 43 52 49 50 54 20  |eader$="!SCRIPT |
0001cb50  50 4f 57 45 52 42 41 53  45 22 3a 0d 10 16 2f 20  |POWERBASE":.../ |
0001cb60  20 20 20 20 20 e7 20 70  72 65 73 65 6e 74 25 3d  |     . present%=|
0001cb70  37 3a f2 65 78 65 63 75  74 65 5f 66 69 6c 65 28  |7:.execute_file(|
0001cb80  66 69 6c 65 6e 61 6d 65  24 29 0d 10 17 4b 20 20  |filename$)...K  |
0001cb90  20 20 20 20 c9 20 69 63  25 3e 30 3a f2 74 72 61  |    . ic%>0:.tra|
0001cba0  6e 73 66 65 72 5f 62 6c  6f 62 28 62 6c 6f 63 6b  |nsfer_blob(block|
0001cbb0  25 21 32 30 2c 62 6c 6f  63 6b 25 21 32 34 2c 52  |%!20,block%!24,R|
0001cbc0  45 43 25 2c 66 69 6c 65  6e 61 6d 65 24 2c 66 74  |EC%,filename$,ft|
0001cbd0  79 70 65 25 29 0d 10 18  25 20 20 20 20 20 20 7f  |ype%)...%      .|
0001cbe0  3a f2 73 74 61 72 74 5f  69 6d 70 6f 72 74 28 22  |:.start_import("|
0001cbf0  74 65 78 74 22 2c 77 69  25 29 0d 10 19 0b 20 20  |text",wi%)....  |
0001cc00  20 20 cb 20 20 0d 10 1a  26 20 20 20 20 7f 3a e7  |  .  ...&    .:.|
0001cc10  20 63 75 73 74 6f 6d 69  73 65 25 20 8c 20 f2 73  | customise% . .s|
0001cc20  70 65 63 69 61 6c 5f 64  72 6f 70 0d 10 1b 07 20  |pecial_drop.... |
0001cc30  20 cb 0d 10 1c 08 20 20  7f 3a 0d 10 1d 0e 20 20  | .....  .:....  |
0001cc40  c8 8e 20 77 69 25 20 ca  0d 10 1e 13 20 20 20 20  |.. wi% .....    |
0001cc50  c9 20 72 65 66 6f 72 6d  57 25 3a 0d 10 1f 14 20  |. reformW%:.... |
0001cc60  20 20 20 c8 8e 20 72 65  66 6f 72 6d 24 20 ca 0d  |   .. reform$ ..|
0001cc70  10 20 31 20 20 20 20 20  20 c9 20 22 4d 65 72 67  |. 1      . "Merg|
0001cc80  65 22 3a f2 6d 65 72 67  65 5f 66 69 6c 65 73 28  |e":.merge_files(|
0001cc90  66 69 6c 65 6e 61 6d 65  24 2c 66 69 6c 65 25 29  |filename$,file%)|
0001cca0  0d 10 21 2b 20 20 20 20  20 20 c9 20 22 52 65 66  |..!+      . "Ref|
0001ccb0  6f 72 6d 61 74 22 3a f2  72 65 66 6f 72 6d 61 74  |ormat":.reformat|
0001ccc0  28 66 69 6c 65 6e 61 6d  65 24 29 0d 10 22 09 20  |(filename$)..". |
0001ccd0  20 20 20 cb 0d 10 23 0a  20 20 20 20 7f 3a 0d 10  |   ...#.    .:..|
0001cce0  24 10 20 20 20 20 e7 20  64 25 3d 32 20 8c 0d 10  |$.    . d%=2 ...|
0001ccf0  25 23 20 20 20 20 20 20  c8 8e 20 c0 a4 6c 65 61  |%#      .. ..lea|
0001cd00  66 28 66 69 6c 65 6e 61  6d 65 24 29 2c 31 29 20  |f(filename$),1) |
0001cd10  ca 0d 10 26 12 20 20 20  20 20 20 20 20 c9 20 22  |...&.        . "|
0001cd20  21 22 3a 0d 10 27 33 20  20 20 20 20 20 20 20 f4  |!":..'3        .|
0001cd30  20 23 23 23 20 49 73 20  69 74 20 61 6e 20 49 6d  | ### Is it an Im|
0001cd40  70 72 65 73 73 69 6f 6e  20 64 6f 63 75 6d 65 6e  |pression documen|
0001cd50  74 3f 20 23 23 23 0d 10  28 35 20 20 20 20 20 20  |t? ###..(5      |
0001cd60  20 20 c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 35  |  .. "OS_File",5|
0001cd70  2c 66 69 6c 65 6e 61 6d  65 24 2b 22 2e 21 44 6f  |,filename$+".!Do|
0001cd80  63 44 61 74 61 22 20 b8  20 64 25 0d 10 29 14 20  |cData" . d%..). |
0001cd90  20 20 20 20 20 20 20 e7  20 64 25 3d 31 20 8c 0d  |       . d%=1 ..|
0001cda0  10 2a 28 20 20 20 20 20  20 20 20 20 20 64 6f 63  |.*(          doc|
0001cdb0  75 6d 65 6e 74 24 3d a4  6c 65 61 66 28 66 69 6c  |ument$=.leaf(fil|
0001cdc0  65 6e 61 6d 65 24 29 0d  10 2b 3b 20 20 20 20 20  |ename$)..+;     |
0001cdd0  20 20 20 20 20 e7 20 c0  64 6f 63 75 6d 65 6e 74  |     . .document|
0001cde0  24 2c 31 29 3d 22 21 22  20 8c 20 64 6f 63 75 6d  |$,1)="!" . docum|
0001cdf0  65 6e 74 24 3d c1 64 6f  63 75 6d 65 6e 74 24 2c  |ent$=.document$,|
0001ce00  32 29 0d 10 2c 3e 20 20  20 20 20 20 20 20 20 20  |2)..,>          |
0001ce10  62 6c 6f 63 6b 25 21 30  3d 32 35 36 3a 62 6c 6f  |block%!0=256:blo|
0001ce20  63 6b 25 21 31 32 3d 30  3a 62 6c 6f 63 6b 25 21  |ck%!12=0:block%!|
0001ce30  31 36 3d 35 3a 62 6c 6f  63 6b 25 21 32 30 3d 30  |16=5:block%!20=0|
0001ce40  0d 10 2d 3d 20 20 20 20  20 20 20 20 20 20 62 6c  |..-=          bl|
0001ce50  6f 63 6b 25 21 32 34 3d  30 3a 62 6c 6f 63 6b 25  |ock%!24=0:block%|
0001ce60  21 32 38 3d 30 3a 62 6c  6f 63 6b 25 21 33 32 3d  |!28=0:block%!32=|
0001ce70  30 3a 62 6c 6f 63 6b 25  21 33 36 3d 30 0d 10 2e  |0:block%!36=0...|
0001ce80  34 20 20 20 20 20 20 20  20 20 20 62 6c 6f 63 6b  |4          block|
0001ce90  25 21 34 30 3d 26 32 30  30 30 3a 24 28 62 6c 6f  |%!40=&2000:$(blo|
0001cea0  63 6b 25 2b 34 34 29 3d  66 69 6c 65 6e 61 6d 65  |ck%+44)=filename|
0001ceb0  24 0d 10 2f 2f 20 20 20  20 20 20 20 20 20 20 c8  |$..//          .|
0001cec0  99 20 22 57 69 6d 70 5f  53 65 6e 64 4d 65 73 73  |. "Wimp_SendMess|
0001ced0  61 67 65 22 2c 31 38 2c  62 6c 6f 63 6b 25 2c 30  |age",18,block%,0|
0001cee0  0d 10 30 36 20 20 20 20  20 20 20 20 20 20 6d 65  |..06          me|
0001cef0  72 67 65 77 69 74 68 24  3d 22 49 6d 70 72 65 73  |rgewith$="Impres|
0001cf00  73 69 6f 6e 22 3a 49 6d  70 72 65 66 25 3d 62 6c  |sion":Impref%=bl|
0001cf10  6f 63 6b 25 21 38 0d 10  31 38 20 20 20 20 20 20  |ock%!8..18      |
0001cf20  20 20 20 20 24 4d 65 72  67 65 54 69 74 6c 65 25  |    $MergeTitle%|
0001cf30  3d 22 44 61 74 61 20 6d  65 72 67 65 20 77 69 74  |="Data merge wit|
0001cf40  68 20 22 2b 6d 65 72 67  65 77 69 74 68 24 0d 10  |h "+mergewith$..|
0001cf50  32 0f 20 20 20 20 20 20  20 20 20 20 cc 0d 10 33  |2.          ...3|
0001cf60  36 20 20 20 20 20 20 20  20 20 20 f4 20 23 23 23  |6          . ###|
0001cf70  20 49 73 20 69 74 20 61  20 50 6f 77 65 72 62 61  | Is it a Powerba|
0001cf80  73 65 20 61 70 70 6c 69  63 61 74 69 6f 6e 3f 20  |se application? |
0001cf90  23 23 23 0d 10 34 36 20  20 20 20 20 20 20 20 20  |###..46         |
0001cfa0  20 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  | .. "OS_File",5,|
0001cfb0  66 69 6c 65 6e 61 6d 65  24 2b 22 2e 49 6e 64 69  |filename$+".Indi|
0001cfc0  63 65 73 22 20 b8 20 64  25 0d 10 35 16 20 20 20  |ces" . d%..5.   |
0001cfd0  20 20 20 20 20 20 20 e7  20 64 25 3d 32 20 8c 0d  |       . d%=2 ..|
0001cfe0  10 36 27 20 20 20 20 20  20 20 20 20 20 20 20 e7  |.6'            .|
0001cff0  20 70 72 65 73 65 6e 74  25 3e 30 20 8c 20 f2 65  | present%>0 . .e|
0001d000  78 69 74 28 30 29 0d 10  37 28 20 20 20 20 20 20  |xit(0)..7(      |
0001d010  20 20 20 20 20 20 24 54  69 74 6c 65 25 3d a4 6c  |      $Title%=.l|
0001d020  65 61 66 28 66 69 6c 65  6e 61 6d 65 24 29 0d 10  |eaf(filename$)..|
0001d030  38 26 20 20 20 20 20 20  20 20 20 20 20 20 f2 6f  |8&            .o|
0001d040  70 65 6e 5f 66 69 6c 65  73 28 66 69 6c 65 6e 61  |pen_files(filena|
0001d050  6d 65 24 29 0d 10 39 0f  20 20 20 20 20 20 20 20  |me$)..9.        |
0001d060  20 20 cd 0d 10 3a 0d 20  20 20 20 20 20 20 20 cd  |  ...:.        .|
0001d070  0d 10 3b 0e 20 20 20 20  20 20 20 20 7f 3a 0d 10  |..;.        .:..|
0001d080  3c 37 20 20 20 20 20 20  20 20 f4 20 23 23 23 20  |<7        . ### |
0001d090  49 74 27 73 20 61 6e 20  6f 72 64 69 6e 61 72 79  |It's an ordinary|
0001d0a0  20 64 69 72 65 63 74 6f  72 79 20 66 6f 6c 64 65  | directory folde|
0001d0b0  72 20 23 23 23 0d 10 3d  41 20 20 20 20 20 20 20  |r ###..=A       |
0001d0c0  20 f2 74 72 61 6e 73 66  65 72 5f 62 6c 6f 62 28  | .transfer_blob(|
0001d0d0  62 6c 6f 63 6b 25 21 32  30 2c 62 6c 6f 63 6b 25  |block%!20,block%|
0001d0e0  21 32 34 2c 52 45 43 25  2c 66 69 6c 65 6e 61 6d  |!24,REC%,filenam|
0001d0f0  65 24 2c 2d 31 29 0d 10  3e 0b 20 20 20 20 20 20  |e$,-1)..>.      |
0001d100  cb 0d 10 3f 09 20 20 20  20 cd 0d 10 40 07 20 20  |...?.    ...@.  |
0001d110  cb 0d 10 41 05 cb 0d 10  42 05 e1 0d 10 43 05 3a  |...A....B....C.:|
0001d120  0d 10 44 15 dd 20 f2 6f  70 65 6e 5f 66 69 6c 65  |..D.. .open_file|
0001d130  73 28 66 24 29 0d 10 45  11 ea 20 49 25 2c 4a 25  |s(f$)..E.. I%,J%|
0001d140  2c 46 25 2c 41 24 0d 10  46 23 c8 99 20 22 4f 53  |,F%,A$..F#.. "OS|
0001d150  5f 46 69 6c 65 22 2c 35  2c 66 24 2b 22 2e 44 62  |_File",5,f$+".Db|
0001d160  61 73 65 22 20 b8 20 64  25 0d 10 47 22 e7 20 64  |ase" . d%..G". d|
0001d170  25 3d 31 20 8c 20 85 20  66 61 74 61 6c 5f 65 72  |%=1 . . fatal_er|
0001d180  72 25 2c a4 6d 73 67 28  34 32 29 0d 10 48 26 c8  |r%,.msg(42)..H&.|
0001d190  99 20 22 4f 53 5f 46 69  6c 65 22 2c 35 2c 66 24  |. "OS_File",5,f$|
0001d1a0  2b 22 2e 44 61 74 61 62  61 73 65 22 20 b8 20 64  |+".Database" . d|
0001d1b0  25 0d 10 49 22 e7 20 64  25 3d 31 20 8c 20 70 72  |%..I". d%=1 . pr|
0001d1c0  65 73 65 6e 74 25 3d 70  72 65 73 65 6e 74 25 20  |esent%=present% |
0001d1d0  84 20 34 0d 10 4a 28 c8  99 20 22 4f 53 5f 46 69  |. 4..J(.. "OS_Fi|
0001d1e0  6c 65 22 2c 35 2c 66 24  2b 22 2e 50 72 69 6d 61  |le",5,f$+".Prima|
0001d1f0  72 79 4b 65 79 22 20 b8  20 64 25 0d 10 4b 22 e7  |ryKey" . d%..K".|
0001d200  20 64 25 3d 31 20 8c 20  70 72 65 73 65 6e 74 25  | d%=1 . present%|
0001d210  3d 70 72 65 73 65 6e 74  25 20 84 20 32 0d 10 4c  |=present% . 2..L|
0001d220  22 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  |".. "OS_File",5,|
0001d230  66 24 2b 22 2e 46 6f 72  6d 22 20 b8 20 64 25 0d  |f$+".Form" . d%.|
0001d240  10 4d 22 e7 20 64 25 3d  31 20 8c 20 70 72 65 73  |.M". d%=1 . pres|
0001d250  65 6e 74 25 3d 70 72 65  73 65 6e 74 25 20 84 20  |ent%=present% . |
0001d260  31 0d 10 4e 30 c8 99 20  22 4f 53 5f 46 69 6c 65  |1..N0.. "OS_File|
0001d270  22 2c 35 2c 66 24 2b 22  2e 55 73 72 53 70 72 69  |",5,f$+".UsrSpri|
0001d280  74 65 73 22 20 b8 20 64  25 2c 2c 2c 2c 6c 65 6e  |tes" . d%,,,,len|
0001d290  25 0d 10 4f 0c e7 20 64  25 3d 31 20 8c 0d 10 50  |%..O.. d%=1 ...P|
0001d2a0  35 20 20 f2 63 72 65 61  74 65 5f 6e 61 6d 65 64  |5  .create_named|
0001d2b0  5f 73 6c 69 64 69 6e 67  5f 62 6c 6f 63 6b 28 6c  |_sliding_block(l|
0001d2c0  6f 67 6f 61 6e 63 68 6f  72 25 2c 6c 65 6e 25 2b  |ogoanchor%,len%+|
0001d2d0  38 29 0d 10 51 26 20 20  62 61 73 65 25 3d 21 6c  |8)..Q&  base%=!l|
0001d2e0  6f 67 6f 61 6e 63 68 6f  72 25 3a 21 62 61 73 65  |ogoanchor%:!base|
0001d2f0  25 3d 6c 65 6e 25 2b 34  0d 10 52 2f 20 20 c8 99  |%=len%+4..R/  ..|
0001d300  20 22 4f 53 5f 46 69 6c  65 22 2c 32 35 35 2c 66  | "OS_File",255,f|
0001d310  24 2b 22 2e 55 73 72 53  70 72 69 74 65 73 22 2c  |$+".UsrSprites",|
0001d320  62 61 73 65 25 2b 34 0d  10 53 14 20 20 6c 6f 67  |base%+4..S.  log|
0001d330  6f 73 6c 6f 61 64 65 64  25 3d b9 0d 10 54 05 cd  |osloaded%=...T..|
0001d340  0d 10 55 23 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |..U#.. "OS_CLI",|
0001d350  22 53 65 74 20 44 42 61  73 65 24 44 69 72 20 22  |"Set DBase$Dir "|
0001d360  2b 66 24 0d 10 56 11 24  64 61 74 61 62 61 73 65  |+f$..V.$database|
0001d370  25 3d 66 24 0d 10 57 11  c8 8e 20 70 72 65 73 65  |%=f$..W... prese|
0001d380  6e 74 25 20 ca 0d 10 58  31 20 20 c9 20 30 2c 31  |nt% ...X1  . 0,1|
0001d390  2c 35 3a 41 63 63 65 73  73 25 3d b9 3a 4d 6f 64  |,5:Access%=.:Mod|
0001d3a0  69 66 79 25 3d b9 3a f2  72 65 73 75 6d 65 5f 6f  |ify%=.:.resume_o|
0001d3b0  70 65 6e 69 6e 67 0d 10  59 15 20 20 c9 20 37 3a  |pening..Y.  . 7:|
0001d3c0  f2 61 63 63 65 73 73 28  66 24 29 0d 10 5a 25 20  |.access(f$)..Z% |
0001d3d0  20 7f 3a f2 77 69 6d 70  5f 65 72 72 6f 72 28 b9  | .:.wimp_error(.|
0001d3e0  2c 32 35 34 2c 30 2c a4  6d 73 67 28 32 34 29 29  |,254,0,.msg(24))|
0001d3f0  0d 10 5b 05 cb 0d 10 5c  05 e1 0d 10 5d 05 3a 0d  |..[....\....].:.|
0001d400  10 5e 11 dd 20 f2 61 63  63 65 73 73 28 66 24 29  |.^.. .access(f$)|
0001d410  0d 10 5f 14 ea 20 4c 25  2c 50 25 2c 6b 65 79 62  |.._.. L%,P%,keyb|
0001d420  61 73 65 25 0d 10 60 16  46 3d 8e 28 66 24 2b 22  |ase%..`.F=.(f$+"|
0001d430  2e 43 6f 6c 6f 75 72 73  22 29 0d 10 61 28 e7 20  |.Colours")..a(. |
0001d440  46 3d 30 20 8c 20 85 20  66 61 74 61 6c 5f 65 72  |F=0 . . fatal_er|
0001d450  72 25 2c 66 24 2b 22 2e  22 2b a4 6d 73 67 28 31  |r%,f$+"."+.msg(1|
0001d460  38 29 0d 10 62 0a cf 23  46 3d 33 35 0d 10 63 20  |8)..b..#F=35..c |
0001d470  e8 23 46 2c 53 24 3a 24  52 65 61 64 25 3d a4 65  |.#F,S$:$Read%=.e|
0001d480  6e 63 72 79 70 74 28 53  24 2c a3 29 0d 10 64 21  |ncrypt(S$,.)..d!|
0001d490  e8 23 46 2c 53 24 3a 24  57 72 69 74 65 25 3d a4  |.#F,S$:$Write%=.|
0001d4a0  65 6e 63 72 79 70 74 28  53 24 2c a3 29 0d 10 65  |encrypt(S$,.)..e|
0001d4b0  23 e8 23 46 2c 53 24 3a  24 4d 61 6e 61 67 65 72  |#.#F,S$:$Manager|
0001d4c0  25 3d a4 65 6e 63 72 79  70 74 28 53 24 2c a3 29  |%=.encrypt(S$,.)|
0001d4d0  0d 10 66 0f e3 20 49 25  3d 39 20 b8 20 31 35 0d  |..f.. I%=9 . 15.|
0001d4e0  10 67 18 20 20 f2 73 65  6c 65 63 74 28 70 61 73  |.g.  .select(pas|
0001d4f0  73 57 25 2c 49 25 29 0d  10 68 08 ed 20 49 25 0d  |sW%,I%)..h.. I%.|
0001d500  10 69 18 f2 64 65 73 65  6c 65 63 74 28 70 61 73  |.i..deselect(pas|
0001d510  73 57 25 2c 31 36 29 0d  10 6a 08 49 25 3d 39 0d  |sW%,16)..j.I%=9.|
0001d520  10 6b 14 c8 95 20 49 25  3c 31 37 20 80 20 ac 20  |.k... I%<17 . . |
0001d530  c5 23 46 0d 10 6c 24 20  20 e8 23 46 2c 5a 25 3a  |.#F..l$  .#F,Z%:|
0001d540  f2 73 65 74 5f 69 63 6f  6e 28 70 61 73 73 57 25  |.set_icon(passW%|
0001d550  2c 49 25 2c 5a 25 29 0d  10 6d 0b 20 20 49 25 2b  |,I%,Z%)..m.  I%+|
0001d560  3d 31 0d 10 6e 05 ce 0d  10 6f 1a e7 20 ac 20 c5  |=1..n....o.. . .|
0001d570  23 46 20 8c 20 e8 23 46  2c 6c 6f 67 70 61 74 68  |#F . .#F,logpath|
0001d580  24 0d 10 70 12 f2 63 6c  6f 73 65 5f 66 69 6c 65  |$..p..close_file|
0001d590  28 46 29 0d 10 71 14 e7  20 24 4d 61 6e 61 67 65  |(F)..q.. $Manage|
0001d5a0  72 25 3d 22 22 20 8c 0d  10 72 1f 20 20 41 63 63  |r%="" ...r.  Acc|
0001d5b0  65 73 73 25 3d b9 3a 4d  6f 64 69 66 79 25 3d b9  |ess%=.:Modify%=.|
0001d5c0  3a 70 77 25 3d 30 0d 10  73 15 20 20 f2 72 65 73  |:pw%=0..s.  .res|
0001d5d0  75 6d 65 5f 6f 70 65 6e  69 6e 67 0d 10 74 07 20  |ume_opening..t. |
0001d5e0  20 cc 0d 10 75 3b 20 20  24 41 63 63 65 73 73 54  | ...u;  $AccessT|
0001d5f0  69 74 6c 65 25 3d 22 21  50 6f 77 65 72 62 61 73  |itle%="!Powerbas|
0001d600  65 20 6f 70 65 6e 69 6e  67 20 22 2b a4 6c 65 61  |e opening "+.lea|
0001d610  66 28 24 64 61 74 61 62  61 73 65 25 29 0d 10 76  |f($database%)..v|
0001d620  1c 20 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |.  .open_window(|
0001d630  61 63 63 65 73 73 57 25  29 0d 10 77 13 20 20 24  |accessW%)..w.  $|
0001d640  50 61 73 73 77 6f 72 64  25 3d 22 22 0d 10 78 1c  |Password%=""..x.|
0001d650  20 20 f2 73 65 74 5f 63  61 72 65 74 28 61 63 63  |  .set_caret(acc|
0001d660  65 73 73 57 25 2c 30 29  0d 10 79 26 20 20 c8 99  |essW%,0)..y&  ..|
0001d670  20 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  | "Wimp_GetWindow|
0001d680  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 10  |State",,block%..|
0001d690  7a 43 20 20 c8 97 20 c8  93 20 62 6c 6f 63 6b 25  |zC  .. .. block%|
0001d6a0  21 34 2c 62 6c 6f 63 6b  25 21 38 2c 62 6c 6f 63  |!4,block%!8,bloc|
0001d6b0  6b 25 21 31 32 2d 62 6c  6f 63 6b 25 21 34 2c 62  |k%!12-block%!4,b|
0001d6c0  6c 6f 63 6b 25 21 31 36  2d 62 6c 6f 63 6b 25 21  |lock%!16-block%!|
0001d6d0  38 0d 10 7b 07 20 20 f5  0d 10 7c 0c 20 20 61 63  |8..{.  ...|.  ac|
0001d6e0  74 25 3d 30 0d 10 7d 07  20 20 f5 0d 10 7e 0d 20  |t%=0..}.  ...~. |
0001d6f0  20 20 20 f2 70 6f 6c 6c  0d 10 7f 17 20 20 fd 20  |   .poll....  . |
0001d700  61 63 63 65 73 73 62 75  74 74 6f 6e 25 3e 30 0d  |accessbutton%>0.|
0001d710  10 80 18 20 20 c8 8e 20  61 63 63 65 73 73 62 75  |...  .. accessbu|
0001d720  74 74 6f 6e 25 20 ca 0d  10 81 23 20 20 20 20 c9  |tton% ....#    .|
0001d730  20 32 3a f2 63 6c 6f 73  65 5f 77 69 6e 64 6f 77  | 2:.close_window|
0001d740  28 61 63 63 65 73 73 57  25 29 0d 10 82 29 20 20  |(accessW%)...)  |
0001d750  20 20 70 72 65 73 65 6e  74 25 3d a3 3a 61 63 63  |  present%=.:acc|
0001d760  65 73 73 62 75 74 74 6f  6e 25 3d 30 3a 61 63 74  |essbutton%=0:act|
0001d770  25 3d 31 0d 10 83 0c 20  20 20 20 c9 20 33 3a 0d  |%=1....    . 3:.|
0001d780  10 84 20 20 20 20 20 70  61 73 73 77 6f 72 64 24  |..     password$|
0001d790  3d a4 75 28 24 50 61 73  73 77 6f 72 64 25 29 0d  |=.u($Password%).|
0001d7a0  10 85 16 20 20 20 20 c8  8e 20 70 61 73 73 77 6f  |...    .. passwo|
0001d7b0  72 64 24 20 ca 0d 10 86  36 20 20 20 20 20 20 c9  |rd$ ....6      .|
0001d7c0  20 24 4d 61 6e 61 67 65  72 25 3a 41 63 63 65 73  | $Manager%:Acces|
0001d7d0  73 25 3d b9 3a 4d 6f 64  69 66 79 25 3d b9 3a 61  |s%=.:Modify%=.:a|
0001d7e0  63 74 25 3d 32 3a 70 77  25 3d 33 0d 10 87 34 20  |ct%=2:pw%=3...4 |
0001d7f0  20 20 20 20 20 c9 20 24  57 72 69 74 65 25 3a 41  |     . $Write%:A|
0001d800  63 63 65 73 73 25 3d b9  3a 4d 6f 64 69 66 79 25  |ccess%=.:Modify%|
0001d810  3d a3 3a 61 63 74 25 3d  32 3a 70 77 25 3d 32 0d  |=.:act%=2:pw%=2.|
0001d820  10 88 33 20 20 20 20 20  20 c9 20 24 52 65 61 64  |..3      . $Read|
0001d830  25 3a 41 63 63 65 73 73  25 3d a3 3a 4d 6f 64 69  |%:Access%=.:Modi|
0001d840  66 79 25 3d a3 3a 61 63  74 25 3d 32 3a 70 77 25  |fy%=.:act%=2:pw%|
0001d850  3d 31 0d 10 89 1f 20 20  20 20 20 20 7f 3a 61 63  |=1....      .:ac|
0001d860  63 65 73 73 62 75 74 74  6f 6e 25 3d 30 3a ef 20  |cessbutton%=0:. |
0001d870  37 0d 10 8a 31 20 20 20  20 20 20 24 a4 74 65 78  |7...1      $.tex|
0001d880  74 28 61 63 63 65 73 73  57 25 2c 31 29 3d 22 50  |t(accessW%,1)="P|
0001d890  61 73 73 77 6f 72 64 20  6e 6f 74 20 6b 6e 6f 77  |assword not know|
0001d8a0  6e 22 0d 10 8b 23 20 20  20 20 20 20 f2 64 63 6f  |n"...#      .dco|
0001d8b0  6c 6f 75 72 28 61 63 63  65 73 73 57 25 2c 31 2c  |lour(accessW%,1,|
0001d8c0  31 31 2c 31 29 0d 10 8c  16 20 20 20 20 20 20 64  |11,1)....      d|
0001d8d0  65 6c 61 79 25 3d 91 2b  31 35 30 0d 10 8d 0b 20  |elay%=.+150.... |
0001d8e0  20 20 20 20 20 f5 0d 10  8e 11 20 20 20 20 20 20  |     .....      |
0001d8f0  20 20 f2 70 6f 6c 6c 0d  10 8f 14 20 20 20 20 20  |  .poll....     |
0001d900  20 fd 20 91 3e 64 65 6c  61 79 25 0d 10 90 47 20  | . .>delay%...G |
0001d910  20 20 20 20 20 24 50 61  73 73 77 6f 72 64 25 3d  |     $Password%=|
0001d920  22 22 3a f2 72 65 64 72  61 77 5f 69 63 6f 6e 28  |"":.redraw_icon(|
0001d930  61 63 63 65 73 73 57 25  2c 30 29 3a f2 73 65 74  |accessW%,0):.set|
0001d940  5f 63 61 72 65 74 28 61  63 63 65 73 73 57 25 2c  |_caret(accessW%,|
0001d950  30 29 0d 10 91 34 20 20  20 20 20 20 24 a4 74 65  |0)...4      $.te|
0001d960  78 74 28 61 63 63 65 73  73 57 25 2c 31 29 3d 22  |xt(accessW%,1)="|
0001d970  54 79 70 65 20 69 6e 20  79 6f 75 72 20 70 61 73  |Type in your pas|
0001d980  73 77 6f 72 64 22 0d 10  92 22 20 20 20 20 20 20  |sword"..."      |
0001d990  f2 64 63 6f 6c 6f 75 72  28 61 63 63 65 73 73 57  |.dcolour(accessW|
0001d9a0  25 2c 31 2c 37 2c 31 29  0d 10 93 09 20 20 20 20  |%,1,7,1)....    |
0001d9b0  cb 0d 10 94 07 20 20 cb  0d 10 95 0e 20 20 fd 20  |.....  .....  . |
0001d9c0  61 63 74 25 3e 30 0d 10  96 1d 20 20 f2 63 6c 6f  |act%>0....  .clo|
0001d9d0  73 65 5f 77 69 6e 64 6f  77 28 61 63 63 65 73 73  |se_window(access|
0001d9e0  57 25 29 0d 10 97 1b 20  20 f2 67 65 74 73 63 72  |W%)....  .getscr|
0001d9f0  65 65 6e 73 69 7a 65 28  57 25 2c 48 25 29 0d 10  |eensize(W%,H%)..|
0001da00  98 15 20 20 c8 97 20 c8  93 20 30 2c 30 2c 57 25  |..  .. .. 0,0,W%|
0001da10  2c 48 25 0d 10 99 20 20  20 e7 20 61 63 74 25 3d  |,H%...   . act%=|
0001da20  32 20 8c 20 f2 72 65 73  75 6d 65 5f 6f 70 65 6e  |2 . .resume_open|
0001da30  69 6e 67 0d 10 9a 05 cd  0d 10 9b 05 e1 0d 10 9c  |ing.............|
0001da40  05 3a 0d 10 9d 15 dd 20  f2 72 65 73 75 6d 65 5f  |.:..... .resume_|
0001da50  6f 70 65 6e 69 6e 67 0d  10 9e 15 c8 99 20 22 48  |opening...... "H|
0001da60  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 10 9f 26  |ourglass_On"...&|
0001da70  e7 20 a4 73 65 6c 65 63  74 65 64 28 70 61 73 73  |. .selected(pass|
0001da80  57 25 2c 31 36 29 20 8c  20 f2 6f 70 65 6e 5f 6c  |W%,16) . .open_l|
0001da90  6f 67 0d 10 a0 27 c8 99  20 22 4f 53 5f 46 69 6c  |og...'.. "OS_Fil|
0001daa0  65 22 2c 35 2c 66 24 2b  22 2e 55 73 65 72 46 75  |e",5,f$+".UserFu|
0001dab0  6e 63 73 22 20 b8 20 64  25 0d 10 a1 1f e7 20 64  |ncs" . d%..... d|
0001dac0  25 3d 31 20 8c 20 c8 9b  20 66 24 2b 22 2e 55 73  |%=1 . .. f$+".Us|
0001dad0  65 72 46 75 6e 63 73 22  0d 10 a2 28 f2 72 65 61  |erFuncs"...(.rea|
0001dae0  64 5f 63 6f 6c 6f 75 72  73 28 24 64 61 74 61 62  |d_colours($datab|
0001daf0  61 73 65 25 2b 22 2e 43  6f 6c 6f 75 72 73 22 29  |ase%+".Colours")|
0001db00  0d 10 a3 30 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |...0.. "OS_File"|
0001db10  2c 35 2c 66 24 2b 22 2e  50 72 69 6e 74 52 65 73  |,5,f$+".PrintRes|
0001db20  2e 50 72 69 6e 74 4f 70  74 73 22 20 b8 20 64 25  |.PrintOpts" . d%|
0001db30  0d 10 a4 0c e7 20 64 25  3d 31 20 8c 0d 10 a5 2d  |..... d%=1 ....-|
0001db40  20 20 f2 64 72 61 67 5f  6f 70 74 69 6f 6e 73 28  |  .drag_options(|
0001db50  66 24 2b 22 2e 50 72 69  6e 74 52 65 73 2e 50 72  |f$+".PrintRes.Pr|
0001db60  69 6e 74 4f 70 74 73 22  29 0d 10 a6 38 20 20 cc  |intOpts")...8  .|
0001db70  20 f2 64 72 61 67 5f 6f  70 74 69 6f 6e 73 28 22  | .drag_options("|
0001db80  3c 50 62 61 73 65 24 44  69 72 3e 2e 52 65 73 6f  |<Pbase$Dir>.Reso|
0001db90  75 72 63 65 73 2e 50 72  69 6e 74 4f 70 74 73 22  |urces.PrintOpts"|
0001dba0  29 0d 10 a7 05 cd 0d 10  a8 1b e7 20 c0 66 24 2c  |).......... .f$,|
0001dbb0  33 29 3d 22 52 41 4d 22  20 8c 20 72 61 6d 25 3d  |3)="RAM" . ram%=|
0001dbc0  b9 0d 10 a9 39 2a 53 65  74 20 41 6c 69 61 73 24  |....9*Set Alias$|
0001dbd0  54 61 62 6c 65 73 20 46  69 6c 65 72 5f 4f 70 65  |Tables Filer_Ope|
0001dbe0  6e 44 69 72 20 3c 44 62  61 73 65 24 44 69 72 3e  |nDir <Dbase$Dir>|
0001dbf0  2e 56 61 6c 54 61 62 6c  65 73 0d 10 aa 3b 2a 53  |.ValTables...;*S|
0001dc00  65 74 20 41 6c 69 61 73  24 52 65 73 6f 75 72 63  |et Alias$Resourc|
0001dc10  65 73 20 46 69 6c 65 72  5f 4f 70 65 6e 44 69 72  |es Filer_OpenDir|
0001dc20  20 3c 44 62 61 73 65 24  44 69 72 3e 2e 50 72 69  | <Dbase$Dir>.Pri|
0001dc30  6e 74 52 65 73 0d 10 ab  3b 2a 53 65 74 20 41 6c  |ntRes...;*Set Al|
0001dc40  69 61 73 24 4a 6f 62 73  44 6f 6e 65 20 46 69 6c  |ias$JobsDone Fil|
0001dc50  65 72 5f 4f 70 65 6e 44  69 72 20 3c 44 62 61 73  |er_OpenDir <Dbas|
0001dc60  65 24 44 69 72 3e 2e 50  72 69 6e 74 4a 6f 62 73  |e$Dir>.PrintJobs|
0001dc70  0d 10 ac 16 f2 6c 69 74  28 6d 65 6e 75 25 28 30  |.....lit(menu%(0|
0001dc80  29 2c 31 2c a3 29 0d 10  ad 16 f2 6c 69 74 28 6d  |),1,.).....lit(m|
0001dc90  65 6e 75 25 28 30 29 2c  33 2c b9 29 0d 10 ae 16  |enu%(0),3,.)....|
0001dca0  f2 6c 69 74 28 6d 65 6e  75 25 28 30 29 2c 34 2c  |.lit(menu%(0),4,|
0001dcb0  b9 29 0d 10 af 28 f2 6c  69 74 28 6d 65 6e 75 25  |.)...(.lit(menu%|
0001dcc0  28 31 29 2c 36 2c a4 73  65 6c 65 63 74 65 64 28  |(1),6,.selected(|
0001dcd0  70 61 73 73 57 25 2c 39  29 29 0d 10 b0 29 f2 6c  |passW%,9))...).l|
0001dce0  69 74 28 6d 65 6e 75 25  28 33 29 2c 38 2c a4 73  |it(menu%(3),8,.s|
0001dcf0  65 6c 65 63 74 65 64 28  70 61 73 73 57 25 2c 31  |elected(passW%,1|
0001dd00  35 29 29 0d 10 b1 1c f2  6c 69 74 28 6d 65 6e 75  |5)).....lit(menu|
0001dd10  25 28 37 29 2c 30 2c 41  63 63 65 73 73 25 29 0d  |%(7),0,Access%).|
0001dd20  10 b2 1c f2 6c 69 74 28  6d 65 6e 75 25 28 37 29  |....lit(menu%(7)|
0001dd30  2c 31 2c 4d 6f 64 69 66  79 25 29 0d 10 b3 1c f2  |,1,Modify%).....|
0001dd40  6c 69 74 28 6d 65 6e 75  25 28 37 29 2c 32 2c 41  |lit(menu%(7),2,A|
0001dd50  63 63 65 73 73 25 29 0d  10 b4 1c f2 6c 69 74 28  |ccess%).....lit(|
0001dd60  6d 65 6e 75 25 28 37 29  2c 33 2c 41 63 63 65 73  |menu%(7),3,Acces|
0001dd70  73 25 29 0d 10 b5 1c f2  6c 69 74 28 6d 65 6e 75  |s%).....lit(menu|
0001dd80  25 28 37 29 2c 34 2c 41  63 63 65 73 73 25 29 0d  |%(7),4,Access%).|
0001dd90  10 b6 1c f2 6c 69 74 28  6d 65 6e 75 25 28 32 29  |....lit(menu%(2)|
0001dda0  2c 30 2c 41 63 63 65 73  73 25 29 0d 10 b7 1c f2  |,0,Access%).....|
0001ddb0  6c 69 74 28 6d 65 6e 75  25 28 30 29 2c 32 2c 4d  |lit(menu%(0),2,M|
0001ddc0  6f 64 69 66 79 25 29 0d  10 b8 1d f2 6c 69 74 28  |odify%).....lit(|
0001ddd0  6d 65 6e 75 25 28 31 30  29 2c 30 2c 41 63 63 65  |menu%(10),0,Acce|
0001dde0  73 73 25 29 0d 10 b9 1d  f2 6c 69 74 28 6d 65 6e  |ss%).....lit(men|
0001ddf0  75 25 28 31 30 29 2c 32  2c 41 63 63 65 73 73 25  |u%(10),2,Access%|
0001de00  29 0d 10 ba 1d f2 6c 69  74 28 6d 65 6e 75 25 28  |).....lit(menu%(|
0001de10  31 30 29 2c 33 2c 41 63  63 65 73 73 25 29 0d 10  |10),3,Access%)..|
0001de20  bb 1d f2 6c 69 74 28 6d  65 6e 75 25 28 31 33 29  |...lit(menu%(13)|
0001de30  2c 30 2c 41 63 63 65 73  73 25 29 0d 10 bc 1d f2  |,0,Access%).....|
0001de40  6c 69 74 28 6d 65 6e 75  25 28 31 37 29 2c 30 2c  |lit(menu%(17),0,|
0001de50  4d 6f 64 69 66 79 25 29  0d 10 bd 27 f2 6c 69 74  |Modify%)...'.lit|
0001de60  28 6d 65 6e 75 25 28 33  29 2c 30 2c 28 28 70 72  |(menu%(3),0,((pr|
0001de70  65 73 65 6e 74 25 20 80  20 34 29 3e 30 29 29 0d  |esent% . 4)>0)).|
0001de80  10 be 27 f2 6c 69 74 28  6d 65 6e 75 25 28 39 29  |..'.lit(menu%(9)|
0001de90  2c 31 2c 28 28 70 72 65  73 65 6e 74 25 20 80 20  |,1,((present% . |
0001dea0  34 29 3d 30 29 29 0d 10  bf 0e e3 20 49 25 3d 31  |4)=0))..... I%=1|
0001deb0  20 b8 20 36 0d 10 c0 24  20 20 f2 6c 69 74 28 6d  | . 6...$  .lit(m|
0001dec0  65 6e 75 25 28 33 29 2c  49 25 2c 28 70 72 65 73  |enu%(3),I%,(pres|
0001ded0  65 6e 74 25 3d 37 29 29  0d 10 c1 08 ed 20 49 25  |ent%=7))..... I%|
0001dee0  0d 10 c2 1b f2 6c 69 6d  69 74 5f 61 63 74 69 6f  |.....limit_actio|
0001def0  6e 73 28 41 63 63 65 73  73 25 29 0d 10 c3 1c e7  |ns(Access%).....|
0001df00  20 70 72 65 73 65 6e 74  25 3c 34 20 8c 20 64 65  | present%<4 . de|
0001df10  73 69 67 6e 25 3d b9 0d  10 c4 20 e7 20 70 72 65  |sign%=.... . pre|
0001df20  73 65 6e 74 25 3d 35 20  8c 20 f2 61 64 6a 75 73  |sent%=5 . .adjus|
0001df30  74 5f 6f 6e 28 b9 29 0d  10 c5 16 f2 6c 69 74 28  |t_on(.).....lit(|
0001df40  6d 65 6e 75 25 28 39 29  2c 35 2c a3 29 0d 10 c6  |menu%(9),5,.)...|
0001df50  1c 66 69 65 6c 64 73 25  3d a4 67 65 74 5f 66 6f  |.fields%=.get_fo|
0001df60  72 6d 28 46 70 74 72 25  29 0d 10 c7 11 e7 20 66  |rm(Fptr%)..... f|
0001df70  69 65 6c 64 73 25 3e 30  20 8c 0d 10 c8 25 20 20  |ields%>0 ....%  |
0001df80  73 74 61 72 74 68 65 72  65 25 3d 66 69 65 6c 64  |starthere%=field|
0001df90  25 28 a4 66 69 72 73 74  5f 66 69 65 6c 64 29 0d  |%(.first_field).|
0001dfa0  10 c9 25 20 20 f2 66 69  65 6c 64 5f 6d 65 6e 75  |..%  .field_menu|
0001dfb0  28 66 69 65 6c 64 6d 65  6e 75 25 2c 66 69 65 6c  |(fieldmenu%,fiel|
0001dfc0  64 73 25 29 0d 10 ca 39  20 20 f2 63 72 65 61 74  |ds%)...9  .creat|
0001dfd0  65 5f 6e 61 6d 65 64 5f  73 6c 69 64 69 6e 67 5f  |e_named_sliding_|
0001dfe0  62 6c 6f 63 6b 28 74 72  61 6e 73 61 6e 63 68 6f  |block(transancho|
0001dff0  72 25 2c 4c 65 6e 67 74  68 25 2b 31 29 0d 10 cb  |r%,Length%+1)...|
0001e000  05 cd 0d 10 cc 2e e7 20  ac 20 61 64 6a 75 73 74  |....... . adjust|
0001e010  25 20 8c 20 f2 6c 69 74  28 6d 65 6e 75 25 28 39  |% . .lit(menu%(9|
0001e020  29 2c 32 2c 28 66 69 65  6c 64 73 25 3e 30 29 29  |),2,(fields%>0))|
0001e030  0d 10 cd 0f f2 6c 6f 61  64 5f 63 61 6c 63 73 0d  |.....load_calcs.|
0001e040  10 ce 11 c8 8e 20 70 72  65 73 65 6e 74 25 20 ca  |..... present% .|
0001e050  0d 10 cf 0a 20 20 c9 20  30 3a 0d 10 d0 2d 20 20  |....  . 0:...-  |
0001e060  24 52 65 63 49 6e 66 6f  25 3d 22 4e 6f 20 72 65  |$RecInfo%="No re|
0001e070  63 6f 72 64 20 64 65 73  69 67 6e 20 65 78 69 73  |cord design exis|
0001e080  74 73 20 79 65 74 22 0d  10 d1 10 20 20 e3 20 49  |ts yet"....  . I|
0001e090  25 3d 31 20 b8 20 34 0d  10 d2 1b 20 20 20 20 f2  |%=1 . 4....    .|
0001e0a0  6c 69 74 28 6d 65 6e 75  25 28 39 29 2c 49 25 2c  |lit(menu%(9),I%,|
0001e0b0  a3 29 0d 10 d3 0a 20 20  ed 20 49 25 0d 10 d4 1a  |.)....  . I%....|
0001e0c0  20 20 f2 6f 70 65 6e 5f  77 69 6e 64 6f 77 28 6d  |  .open_window(m|
0001e0d0  61 69 6e 57 25 29 0d 10  d5 18 20 20 e7 20 21 66  |ainW%)....  . !f|
0001e0e0  6f 72 6d 61 6e 63 68 6f  72 25 3d 30 20 8c 0d 10  |ormanchor%=0 ...|
0001e0f0  d6 32 20 20 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |.2    .extend_na|
0001e100  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
0001e110  6b 28 66 6f 72 6d 61 6e  63 68 6f 72 25 2c 30 29  |k(formanchor%,0)|
0001e120  0d 10 d7 1a 20 20 20 20  46 70 74 72 25 3d 21 66  |....    Fptr%=!f|
0001e130  6f 72 6d 61 6e 63 68 6f  72 25 0d 10 d8 20 20 20  |ormanchor%...   |
0001e140  20 20 66 69 65 6c 64 73  25 3d 30 3a 46 69 65 6c  |  fields%=0:Fiel|
0001e150  64 6e 75 6d 62 65 72 25  3d 30 0d 10 d9 07 20 20  |dnumber%=0....  |
0001e160  cd 0d 10 da 0a 20 20 c9  20 31 3a 0d 10 db 38 20  |.....  . 1:...8 |
0001e170  20 24 52 65 63 49 6e 66  6f 25 3d 22 52 65 63 6f  | $RecInfo%="Reco|
0001e180  72 64 20 64 65 73 69 67  6e 20 65 78 69 73 74 73  |rd design exists|
0001e190  2c 20 62 75 74 20 6e 6f  20 64 61 74 61 66 69 6c  |, but no datafil|
0001e1a0  65 73 22 0d 10 dc 18 20  20 e7 20 a4 66 69 72 73  |es"....  . .firs|
0001e1b0  74 5f 66 69 65 6c 64 3e  30 20 8c 0d 10 dd 1a 20  |t_field>0 ..... |
0001e1c0  20 20 20 f2 6c 69 74 28  6d 65 6e 75 25 28 39 29  |   .lit(menu%(9)|
0001e1d0  2c 33 2c b9 29 0d 10 de  1a 20 20 20 20 f2 6c 69  |,3,.)....    .li|
0001e1e0  74 28 6d 65 6e 75 25 28  39 29 2c 34 2c b9 29 0d  |t(menu%(9),4,.).|
0001e1f0  10 df 07 20 20 cd 0d 10  e0 1a 20 20 f2 6f 70 65  |...  .....  .ope|
0001e200  6e 5f 77 69 6e 64 6f 77  28 6d 61 69 6e 57 25 29  |n_window(mainW%)|
0001e210  0d 10 e1 0a 20 20 c9 20  35 3a 0d 10 e2 36 20 20  |....  . 5:...6  |
0001e220  24 52 65 63 49 6e 66 6f  25 3d 22 4e 6f 20 70 72  |$RecInfo%="No pr|
0001e230  69 6d 61 72 79 20 6b 65  79 20 69 6e 64 65 78 20  |imary key index |
0001e240  66 69 6c 65 20 65 78 69  73 74 73 20 79 65 74 22  |file exists yet"|
0001e250  0d 10 e3 36 20 20 c8 99  20 22 4f 53 5f 46 69 6c  |...6  .. "OS_Fil|
0001e260  65 22 2c 35 2c 24 64 61  74 61 62 61 73 65 25 2b  |e",5,$database%+|
0001e270  22 2e 44 61 74 61 62 61  73 65 22 20 b8 20 2c 2c  |".Database" . ,,|
0001e280  2c 2c 6c 65 6e 25 0d 10  e4 2d 20 20 52 41 25 3d  |,,len%...-  RA%=|
0001e290  28 6c 65 6e 25 20 81 20  4c 65 6e 67 74 68 25 29  |(len% . Length%)|
0001e2a0  2d 31 3a 24 52 65 63 6f  72 64 73 25 3d c3 28 52  |-1:$Records%=.(R|
0001e2b0  41 25 29 0d 10 e5 2d 20  20 e7 20 a4 66 69 72 73  |A%)...-  . .firs|
0001e2c0  74 5f 66 69 65 6c 64 3e  30 20 8c 20 f2 6f 70 65  |t_field>0 . .ope|
0001e2d0  6e 5f 77 69 6e 64 6f 77  28 6d 61 69 6e 57 25 29  |n_window(mainW%)|
0001e2e0  0d 10 e6 0a 20 20 c9 20  37 3a 0d 10 e7 2b 20 20  |....  . 7:...+  |
0001e2f0  f2 6c 69 74 28 6d 65 6e  75 25 28 31 29 2c 37 2c  |.lit(menu%(1),7,|
0001e300  a4 73 65 6c 65 63 74 65  64 28 70 61 73 73 57 25  |.selected(passW%|
0001e310  2c 31 33 29 29 0d 10 e8  2b 20 20 f2 6c 69 74 28  |,13))...+  .lit(|
0001e320  6d 65 6e 75 25 28 31 29  2c 38 2c a4 73 65 6c 65  |menu%(1),8,.sele|
0001e330  63 74 65 64 28 70 61 73  73 57 25 2c 31 33 29 29  |cted(passW%,13))|
0001e340  0d 10 e9 2b 20 20 f2 6c  69 74 28 6d 65 6e 75 25  |...+  .lit(menu%|
0001e350  28 31 29 2c 32 2c a4 73  65 6c 65 63 74 65 64 28  |(1),2,.selected(|
0001e360  70 61 73 73 57 25 2c 31  34 29 29 0d 10 ea 36 20  |passW%,14))...6 |
0001e370  20 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  | .. "OS_File",5,|
0001e380  24 64 61 74 61 62 61 73  65 25 2b 22 2e 44 61 74  |$database%+".Dat|
0001e390  61 62 61 73 65 22 20 b8  20 2c 2c 2c 2c 6c 65 6e  |abase" . ,,,,len|
0001e3a0  25 0d 10 eb 2d 20 20 52  41 25 3d 28 6c 65 6e 25  |%...-  RA%=(len%|
0001e3b0  20 81 20 4c 65 6e 67 74  68 25 29 2d 31 3a 24 52  | . Length%)-1:$R|
0001e3c0  65 63 6f 72 64 73 25 3d  c3 28 52 41 25 29 0d 10  |ecords%=.(RA%)..|
0001e3d0  ec 2d 20 20 f2 6f 70 65  6e 5f 69 6e 64 65 78 28  |.-  .open_index(|
0001e3e0  24 64 61 74 61 62 61 73  65 25 2b 22 2e 50 72 69  |$database%+".Pri|
0001e3f0  6d 61 72 79 4b 65 79 22  2c 30 29 0d 10 ed 24 20  |maryKey",0)...$ |
0001e400  20 6b 65 79 25 3d 30 3a  66 69 6c 65 25 3d 30 3a  | key%=0:file%=0:|
0001e410  74 6f 70 3d 38 2a 66 69  6c 65 25 2b 4c 48 25 0d  |top=8*file%+LH%.|
0001e420  10 ee 18 20 20 f2 73 65  74 5f 6b 65 79 64 61 74  |...  .set_keydat|
0001e430  61 28 6b 65 79 25 29 0d  10 ef 6c 20 20 6b 65 79  |a(key%)...l  key|
0001e440  62 61 73 65 25 3d 21 6b  65 79 61 6e 63 68 6f 72  |base%=!keyanchor|
0001e450  25 28 30 29 3a e7 20 6b  65 79 62 61 73 65 25 21  |%(0):. keybase%!|
0001e460  34 3c 3d 31 30 30 20 80  20 6b 65 79 62 61 73 65  |4<=100 . keybase|
0001e470  25 21 34 3e 30 20 8c 20  24 49 6e 63 72 65 6d 65  |%!4>0 . $Increme|
0001e480  6e 74 25 3d c3 28 6b 65  79 62 61 73 65 25 21 34  |nt%=.(keybase%!4|
0001e490  29 20 8b 20 24 49 6e 63  72 65 6d 65 6e 74 25 3d  |) . $Increment%=|
0001e4a0  22 30 22 0d 10 f0 2c 20  20 66 24 3d 24 64 61 74  |"0"...,  f$=$dat|
0001e4b0  61 62 61 73 65 25 2b 22  2e 49 6e 64 69 63 65 73  |abase%+".Indices|
0001e4c0  22 3a 52 34 25 3d 30 3a  4b 65 79 73 25 3d 30 0d  |":R4%=0:Keys%=0.|
0001e4d0  10 f1 10 20 20 c8 95 20  52 34 25 3c 3e 2d 31 0d  |...  .. R4%<>-1.|
0001e4e0  10 f2 10 20 20 20 20 4b  65 79 73 25 2b 3d 31 0d  |...    Keys%+=1.|
0001e4f0  10 f3 35 20 20 20 20 c8  99 20 22 4f 53 5f 47 42  |..5    .. "OS_GB|
0001e500  50 42 22 2c 39 2c 66 24  2c 62 6c 6f 63 6b 25 2c  |PB",9,f$,block%,|
0001e510  31 2c 52 34 25 2c 31 31  20 b8 20 2c 2c 4b 24 2c  |1,R4%,11 . ,,K$,|
0001e520  2c 52 34 25 0d 10 f4 41  20 20 20 20 e7 20 52 34  |,R4%...A    . R4|
0001e530  25 3c 3e 2d 31 20 8c 20  f2 6f 70 65 6e 5f 69 6e  |%<>-1 . .open_in|
0001e540  64 65 78 28 66 24 2b 22  2e 22 2b 4b 24 2c 4b 65  |dex(f$+"."+K$,Ke|
0001e550  79 73 25 29 3a f2 63 6f  6c 6f 75 72 28 4b 65 79  |ys%):.colour(Key|
0001e560  73 25 2c 32 29 0d 10 f5  07 20 20 ce 0d 10 f6 0e  |s%,2)....  .....|
0001e570  20 20 4b 65 79 73 25 2d  3d 31 0d 10 f7 34 20 20  |  Keys%-=1...4  |
0001e580  e7 20 65 78 74 72 61 6b  65 79 73 24 3c 3e 22 22  |. extrakeys$<>""|
0001e590  20 8c 20 f2 73 6f 66 74  65 72 72 6f 72 28 c0 65  | . .softerror(.e|
0001e5a0  78 74 72 61 6b 65 79 73  24 29 2c 39 36 29 0d 10  |xtrakeys$),96)..|
0001e5b0  f8 1f 20 20 f2 63 6f 6c  6f 75 72 28 30 2c 30 29  |..  .colour(0,0)|
0001e5c0  3a f2 63 6f 6c 6f 75 72  28 30 2c 31 29 0d 10 f9  |:.colour(0,1)...|
0001e5d0  11 20 20 f2 67 65 74 5f  74 61 62 6c 65 73 0d 10  |.  .get_tables..|
0001e5e0  fa 0c 20 20 6b 65 79 25  3d 30 0d 10 fb 16 20 20  |..  key%=0....  |
0001e5f0  f2 63 6f 75 6e 74 28 6b  65 79 25 2c 52 55 25 29  |.count(key%,RU%)|
0001e600  0d 10 fc 0b 20 20 f2 6a  6f 6b 65 0d 10 fd 13 20  |....  .joke.... |
0001e610  20 f2 73 68 6f 77 5f 77  69 6e 64 6f 77 73 0d 10  | .show_windows..|
0001e620  fe 05 cb 0d 10 ff 16 c8  99 20 22 48 6f 75 72 67  |......... "Hourg|
0001e630  6c 61 73 73 5f 4f 66 66  22 0d 11 00 17 24 64 62  |lass_Off"....$db|
0001e640  61 73 65 25 3d c1 24 54  69 74 6c 65 25 2c 32 29  |ase%=.$Title%,2)|
0001e650  0d 11 01 1f f2 72 65 64  72 61 77 5f 69 63 6f 6e  |.....redraw_icon|
0001e660  28 2d 32 2c 70 62 61 73  65 69 63 6f 6e 25 29 0d  |(-2,pbaseicon%).|
0001e670  11 02 1c 66 24 3d 24 64  61 74 61 62 61 73 65 25  |...f$=$database%|
0001e680  2b 22 2e 43 68 6f 69 63  65 73 22 0d 11 03 1a c8  |+".Choices".....|
0001e690  99 20 22 4f 53 5f 46 69  6c 65 22 2c 35 2c 66 24  |. "OS_File",5,f$|
0001e6a0  20 b8 20 64 25 0d 11 04  1d e7 20 64 25 3d 31 20  | . d%..... d%=1 |
0001e6b0  8c 20 f2 67 65 74 5f 63  68 6f 69 63 65 73 28 66  |. .get_choices(f|
0001e6c0  24 29 0d 11 05 2d c8 99  20 22 4f 53 5f 46 69 6c  |$)...-.. "OS_Fil|
0001e6d0  65 22 2c 35 2c 24 64 61  74 61 62 61 73 65 25 2b  |e",5,$database%+|
0001e6e0  22 2e 53 70 65 63 69 61  6c 22 20 b8 20 64 25 0d  |".Special" . d%.|
0001e6f0  11 06 30 e7 20 64 25 3d  31 20 8c 20 c8 9b 20 24  |..0. d%=1 . .. $|
0001e700  64 61 74 61 62 61 73 65  25 2b 22 2e 53 70 65 63  |database%+".Spec|
0001e710  69 61 6c 22 3a f2 63 75  73 74 6f 6d 69 73 65 0d  |ial":.customise.|
0001e720  11 07 05 e1 0d 11 08 05  3a 0d 11 09 0b dd 20 f2  |........:..... .|
0001e730  6a 6f 6b 65 0d 11 0a 19  53 24 3d 24 a4 76 61 6c  |joke....S$=$.val|
0001e740  28 6b 65 79 70 61 64 57  25 2c 31 37 29 0d 11 0b  |(keypadW%,17)...|
0001e750  2a e7 20 c1 91 24 2c 35  2c 36 29 3d 22 30 31 20  |*. ..$,5,6)="01 |
0001e760  41 70 72 22 20 80 20 c1  91 24 2c 31 37 2c 32 29  |Apr" . ..$,17,2)|
0001e770  3c 22 31 32 22 20 8c 0d  11 0c 21 20 20 53 24 3d  |<"12" ....!  S$=|
0001e780  22 53 74 6f 69 6c 65 74  22 2b c1 24 62 6c 6f 63  |"Stoilet"+.$bloc|
0001e790  6b 25 21 33 32 2c 38 29  0d 11 0d 23 20 20 cc 20  |k%!32,8)...#  . |
0001e7a0  53 24 3d 22 53 64 65 6c  65 74 65 22 2b c1 24 62  |S$="Sdelete"+.$b|
0001e7b0  6c 6f 63 6b 25 21 33 32  2c 38 29 0d 11 0e 05 cd  |lock%!32,8).....|
0001e7c0  0d 11 0f 19 24 a4 76 61  6c 28 6b 65 79 70 61 64  |....$.val(keypad|
0001e7d0  57 25 2c 31 37 29 3d 53  24 0d 11 10 05 e1 0d 11  |W%,17)=S$.......|
0001e7e0  11 05 3a 0d 11 12 16 dd  20 f2 67 65 74 5f 63 68  |..:..... .get_ch|
0001e7f0  6f 69 63 65 73 28 66 24  29 0d 11 13 10 ea 20 46  |oices(f$)..... F|
0001e800  2c 53 24 2c 43 24 2c 50  25 0d 11 14 0b 46 3d 8e  |,S$,C$,P%....F=.|
0001e810  28 66 24 29 0d 11 15 05  f5 0d 11 16 32 20 20 53  |(f$)........2  S|
0001e820  24 3d be 23 46 3a 50 25  3d a7 53 24 2c 22 20 22  |$=.#F:P%=.S$," "|
0001e830  29 3a 43 24 3d c1 53 24  2c 50 25 2b 31 29 3a 53  |):C$=.S$,P%+1):S|
0001e840  24 3d c0 53 24 2c 50 25  2d 31 29 0d 11 17 0d 20  |$=.S$,P%-1).... |
0001e850  20 c8 8e 20 53 24 20 ca  0d 11 18 44 20 20 20 20  | .. S$ ....D    |
0001e860  c9 20 22 56 61 6c 69 64  61 74 65 22 3a 76 61 6c  |. "Validate":val|
0001e870  69 64 61 74 65 25 3d 28  43 24 3d 22 4f 4e 22 29  |idate%=(C$="ON")|
0001e880  3a f2 74 69 63 6b 28 6d  65 6e 75 25 28 32 29 2c  |:.tick(menu%(2),|
0001e890  33 2c 76 61 6c 69 64 61  74 65 25 29 0d 11 19 47  |3,validate%)...G|
0001e8a0  20 20 20 20 c9 20 22 52  65 6c 61 74 69 6f 6e 73  |    . "Relations|
0001e8b0  22 3a 72 65 6c 61 74 69  6f 6e 73 25 3d 28 43 24  |":relations%=(C$|
0001e8c0  3d 22 4f 4e 22 29 3a f2  74 69 63 6b 28 6d 65 6e  |="ON"):.tick(men|
0001e8d0  75 25 28 32 29 2c 34 2c  72 65 6c 61 74 69 6f 6e  |u%(2),4,relation|
0001e8e0  73 25 29 0d 11 1a 42 20  20 20 20 c9 20 22 57 61  |s%)...B    . "Wa|
0001e8f0  72 6e 69 6e 67 22 3a 64  65 6c 77 61 72 6e 25 3d  |rning":delwarn%=|
0001e900  28 43 24 3d 22 4f 4e 22  29 3a f2 74 69 63 6b 28  |(C$="ON"):.tick(|
0001e910  6d 65 6e 75 25 28 31 30  29 2c 37 2c 64 65 6c 77  |menu%(10),7,delw|
0001e920  61 72 6e 25 29 0d 11 1b  15 20 20 20 20 c9 20 22  |arn%)....    . "|
0001e930  41 75 74 6f 73 61 76 65  22 3a 0d 11 1c 13 20 20  |Autosave":....  |
0001e940  20 20 c8 8e 20 c0 43 24  2c 34 29 20 ca 0d 11 1d  |  .. .C$,4) ....|
0001e950  2e 20 20 20 20 20 20 c9  20 22 4f 46 46 20 22 3a  |.      . "OFF ":|
0001e960  6d 6f 64 65 25 3d 30 3a  24 49 6e 74 65 72 76 61  |mode%=0:$Interva|
0001e970  6c 25 3d 22 31 30 20 6d  69 6e 22 0d 11 1e 2c 20  |l%="10 min"..., |
0001e980  20 20 20 20 20 c9 20 22  57 41 52 4e 22 3a 6d 6f  |     . "WARN":mo|
0001e990  64 65 25 3d 31 3a 24 49  6e 74 65 72 76 61 6c 25  |de%=1:$Interval%|
0001e9a0  3d c1 43 24 2c 35 29 0d  11 1f 2c 20 20 20 20 20  |=.C$,5)...,     |
0001e9b0  20 c9 20 22 41 55 54 4f  22 3a 6d 6f 64 65 25 3d  | . "AUTO":mode%=|
0001e9c0  32 3a 24 49 6e 74 65 72  76 61 6c 25 3d c1 43 24  |2:$Interval%=.C$|
0001e9d0  2c 35 29 0d 11 20 09 20  20 20 20 cb 0d 11 21 18  |,5).. .    ...!.|
0001e9e0  20 20 20 20 f2 73 65 74  5f 61 75 74 6f 28 6d 6f  |    .set_auto(mo|
0001e9f0  64 65 25 29 0d 11 22 18  20 20 20 20 c9 20 22 41  |de%)..".    . "A|
0001ea00  75 74 6f 62 61 6c 61 6e  63 65 22 3a 0d 11 23 13  |utobalance":..#.|
0001ea10  20 20 20 20 c8 8e 20 c0  43 24 2c 34 29 20 ca 0d  |    .. .C$,4) ..|
0001ea20  11 24 26 20 20 20 20 20  20 c9 20 22 4f 46 46 20  |.$&      . "OFF |
0001ea30  22 3a f2 73 65 74 5f 61  75 74 6f 62 61 6c 61 6e  |":.set_autobalan|
0001ea40  63 65 28 a3 29 0d 11 25  35 20 20 20 20 20 20 c9  |ce(.)..%5      .|
0001ea50  20 22 41 55 54 4f 22 3a  24 45 76 65 72 79 25 3d  | "AUTO":$Every%=|
0001ea60  c1 43 24 2c 35 29 3a f2  73 65 74 5f 61 75 74 6f  |.C$,5):.set_auto|
0001ea70  62 61 6c 61 6e 63 65 28  b9 29 0d 11 26 09 20 20  |balance(.)..&.  |
0001ea80  20 20 cb 0d 11 27 16 20  20 20 20 c9 20 22 53 65  |  ...'.    . "Se|
0001ea90  70 61 72 61 74 6f 72 22  3a 0d 11 28 12 20 20 20  |parator":..(.   |
0001eaa0  20 24 44 65 6c 69 6d 25  3d 22 22 0d 11 29 0f 20  | $Delim%=""..). |
0001eab0  20 20 20 c8 8e 20 43 24  20 ca 0d 11 2a 21 20 20  |   .. C$ ...*!  |
0001eac0  20 20 20 20 c9 20 22 43  6f 6d 6d 61 22 3a 73 65  |    . "Comma":se|
0001ead0  70 24 3d 22 2c 22 3a 50  25 3d 30 0d 11 2b 20 20  |p$=",":P%=0..+  |
0001eae0  20 20 20 20 20 c9 20 22  54 41 42 22 3a 73 65 70  |     . "TAB":sep|
0001eaf0  24 3d bd 28 39 29 3a 50  25 3d 31 0d 11 2c 20 20  |$=.(9):P%=1..,  |
0001eb00  20 20 20 20 20 c9 20 22  43 52 22 3a 73 65 70 24  |     . "CR":sep$|
0001eb10  3d bd 28 31 33 29 3a 50  25 3d 32 0d 11 2d 20 20  |=.(13):P%=2..-  |
0001eb20  20 20 20 20 20 c9 20 22  4c 46 22 3a 73 65 70 24  |     . "LF":sep$|
0001eb30  3d bd 28 31 30 29 3a 50  25 3d 33 0d 11 2e 23 20  |=.(10):P%=3...# |
0001eb40  20 20 20 20 20 7f 20 24  44 65 6c 69 6d 25 3d 43  |     . $Delim%=C|
0001eb50  24 3a 73 65 70 24 3d 43  24 3a 50 25 3d 34 0d 11  |$:sep$=C$:P%=4..|
0001eb60  2f 09 20 20 20 20 cb 0d  11 30 23 20 20 20 20 f2  |/.    ...0#    .|
0001eb70  74 69 63 6b 5f 6f 6e 65  28 6d 65 6e 75 25 28 31  |tick_one(menu%(1|
0001eb80  35 29 2c 30 2c 33 2c 50  25 29 0d 11 31 32 20 20  |5),0,3,P%)..12  |
0001eb90  20 20 24 a4 74 65 78 74  28 63 73 76 57 25 2c 31  |  $.text(csvW%,1|
0001eba0  34 29 3d 43 24 3a f2 72  65 64 72 61 77 5f 69 63  |4)=C$:.redraw_ic|
0001ebb0  6f 6e 28 63 73 76 57 25  2c 31 34 29 0d 11 32 17  |on(csvW%,14)..2.|
0001ebc0  20 20 20 20 c9 20 22 54  65 72 6d 69 6e 61 74 6f  |    . "Terminato|
0001ebd0  72 22 3a 0d 11 33 13 20  20 20 20 24 54 65 72 6d  |r":..3.    $Term|
0001ebe0  69 6e 25 3d 22 22 0d 11  34 0f 20 20 20 20 c8 8e  |in%=""..4.    ..|
0001ebf0  20 43 24 20 ca 0d 11 35  21 20 20 20 20 20 20 c9  | C$ ...5!      .|
0001ec00  20 22 43 52 22 3a 74 65  72 6d 24 3d bd 28 31 33  | "CR":term$=.(13|
0001ec10  29 3a 50 25 3d 30 0d 11  36 21 20 20 20 20 20 20  |):P%=0..6!      |
0001ec20  c9 20 22 4c 46 22 3a 74  65 72 6d 24 3d bd 28 31  |. "LF":term$=.(1|
0001ec30  30 29 3a 50 25 3d 31 0d  11 37 2a 20 20 20 20 20  |0):P%=1..7*     |
0001ec40  20 c9 20 22 43 52 20 4c  46 22 3a 74 65 72 6d 24  | . "CR LF":term$|
0001ec50  3d bd 28 31 33 29 2b bd  28 31 30 29 3a 50 25 3d  |=.(13)+.(10):P%=|
0001ec60  32 0d 11 38 2a 20 20 20  20 20 20 c9 20 22 4c 46  |2..8*      . "LF|
0001ec70  20 43 52 22 3a 74 65 72  6d 24 3d bd 28 31 30 29  | CR":term$=.(10)|
0001ec80  2b bd 28 31 33 29 3a 50  25 3d 33 0d 11 39 2a 20  |+.(13):P%=3..9* |
0001ec90  20 20 20 20 20 c9 20 22  43 52 20 43 52 22 3a 74  |     . "CR CR":t|
0001eca0  65 72 6d 24 3d bd 28 31  33 29 2b bd 28 31 33 29  |erm$=.(13)+.(13)|
0001ecb0  3a 50 25 3d 34 0d 11 3a  2a 20 20 20 20 20 20 c9  |:P%=4..:*      .|
0001ecc0  20 22 4c 46 20 4c 46 22  3a 74 65 72 6d 24 3d bd  | "LF LF":term$=.|
0001ecd0  28 31 30 29 2b bd 28 31  30 29 3a 50 25 3d 35 0d  |(10)+.(10):P%=5.|
0001ece0  11 3b 26 20 20 20 20 20  20 7f 3a 20 24 54 65 72  |.;&      .: $Ter|
0001ecf0  6d 69 6e 25 3d 43 24 3a  74 65 72 6d 24 3d 43 24  |min%=C$:term$=C$|
0001ed00  3a 50 25 3d 36 0d 11 3c  09 20 20 20 20 cb 0d 11  |:P%=6..<.    ...|
0001ed10  3d 23 20 20 20 20 f2 74  69 63 6b 5f 6f 6e 65 28  |=#    .tick_one(|
0001ed20  6d 65 6e 75 25 28 32 30  29 2c 30 2c 35 2c 50 25  |menu%(20),0,5,P%|
0001ed30  29 0d 11 3e 32 20 20 20  20 24 a4 74 65 78 74 28  |)..>2    $.text(|
0001ed40  63 73 76 57 25 2c 31 35  29 3d 43 24 3a f2 72 65  |csvW%,15)=C$:.re|
0001ed50  64 72 61 77 5f 69 63 6f  6e 28 63 73 76 57 25 2c  |draw_icon(csvW%,|
0001ed60  31 35 29 0d 11 3f 2d 20  20 20 20 c9 20 22 51 75  |15)..?-    . "Qu|
0001ed70  6f 74 65 73 22 3a f2 73  65 74 5f 69 63 6f 6e 28  |otes":.set_icon(|
0001ed80  63 73 76 57 25 2c 30 2c  43 24 3d 22 4f 4e 22 29  |csvW%,0,C$="ON")|
0001ed90  0d 11 40 2d 20 20 20 20  c9 20 22 48 65 61 64 65  |..@-    . "Heade|
0001eda0  72 22 3a f2 73 65 74 5f  69 63 6f 6e 28 63 73 76  |r":.set_icon(csv|
0001edb0  57 25 2c 31 2c 43 24 3d  22 4f 4e 22 29 0d 11 41  |W%,1,C$="ON")..A|
0001edc0  2d 20 20 20 20 c9 20 22  42 6c 61 6e 6b 73 22 3a  |-    . "Blanks":|
0001edd0  f2 73 65 74 5f 69 63 6f  6e 28 63 73 76 57 25 2c  |.set_icon(csvW%,|
0001ede0  32 2c 43 24 3d 22 4f 4e  22 29 0d 11 42 2a 20 20  |2,C$="ON")..B*  |
0001edf0  20 20 c9 20 22 4b 65 79  22 3a f2 73 65 74 5f 69  |  . "Key":.set_i|
0001ee00  63 6f 6e 28 63 73 76 57  25 2c 33 2c 43 24 3d 22  |con(csvW%,3,C$="|
0001ee10  4f 4e 22 29 0d 11 43 42  20 20 20 20 c9 20 22 44  |ON")..CB    . "D|
0001ee20  61 74 61 22 3a f2 73 65  74 5f 69 63 6f 6e 28 63  |ata":.set_icon(c|
0001ee30  73 76 57 25 2c 34 2c 28  43 24 3d 22 4f 4e 22 20  |svW%,4,(C$="ON" |
0001ee40  80 20 a4 73 65 6c 65 63  74 65 64 28 63 73 76 57  |. .selected(csvW|
0001ee50  25 2c 31 29 29 29 0d 11  44 2f 20 20 20 20 c9 20  |%,1)))..D/    . |
0001ee60  22 44 69 73 70 6c 61 79  22 3a f2 73 65 74 5f 69  |"Display":.set_i|
0001ee70  63 6f 6e 28 63 73 76 57  25 2c 31 31 2c 43 24 3d  |con(csvW%,11,C$=|
0001ee80  22 4f 4e 22 29 0d 11 45  2d 20 20 20 20 c9 20 22  |"ON")..E-    . "|
0001ee90  53 74 72 69 70 22 3a f2  73 65 74 5f 69 63 6f 6e  |Strip":.set_icon|
0001eea0  28 63 73 76 57 25 2c 31  36 2c 43 24 3d 22 4f 4e  |(csvW%,16,C$="ON|
0001eeb0  22 29 0d 11 46 19 20 20  20 20 c9 20 22 43 61 73  |")..F.    . "Cas|
0001eec0  65 53 70 65 63 69 66 69  63 22 3a 0d 11 47 27 20  |eSpecific":..G' |
0001eed0  20 20 20 f2 73 65 74 5f  69 63 6f 6e 28 6d 61 74  |   .set_icon(mat|
0001eee0  63 68 57 25 2c 31 36 2c  28 43 24 3d 22 4f 4e 22  |chW%,16,(C$="ON"|
0001eef0  29 29 0d 11 48 28 20 20  20 20 f2 73 65 74 5f 69  |))..H(    .set_i|
0001ef00  63 6f 6e 28 73 61 76 65  73 75 62 57 25 2c 35 2c  |con(savesubW%,5,|
0001ef10  28 43 24 3d 22 4f 4e 22  29 29 0d 11 49 27 20 20  |(C$="ON"))..I'  |
0001ef20  20 20 f2 73 65 74 5f 69  63 6f 6e 28 63 68 61 6e  |  .set_icon(chan|
0001ef30  67 65 57 25 2c 35 2c 28  43 24 3d 22 4f 4e 22 29  |geW%,5,(C$="ON")|
0001ef40  29 0d 11 4a 25 20 20 20  20 f2 73 65 74 5f 69 63  |)..J%    .set_ic|
0001ef50  6f 6e 28 6d 6f 76 65 57  25 2c 39 2c 28 43 24 3d  |on(moveW%,9,(C$=|
0001ef60  22 4f 4e 22 29 29 0d 11  4b 27 20 20 20 20 f2 73  |"ON"))..K'    .s|
0001ef70  65 74 5f 69 63 6f 6e 28  6d 65 72 67 65 57 25 2c  |et_icon(mergeW%,|
0001ef80  31 32 2c 28 43 24 3d 22  4f 4e 22 29 29 0d 11 4c  |12,(C$="ON"))..L|
0001ef90  28 20 20 20 20 f2 73 65  74 5f 69 63 6f 6e 28 6b  |(    .set_icon(k|
0001efa0  65 79 70 61 64 57 25 2c  33 32 2c 28 43 24 3d 22  |eypadW%,32,(C$="|
0001efb0  4f 4e 22 29 29 0d 11 4d  18 20 20 20 20 c9 20 22  |ON"))..M.    . "|
0001efc0  44 75 70 6c 69 63 61 74  69 6f 6e 22 3a 0d 11 4e  |Duplication":..N|
0001efd0  2d 20 20 20 20 64 75 70  25 3d 28 43 24 3d 22 4f  |-    dup%=(C$="O|
0001efe0  4e 22 29 3a f2 74 69 63  6b 28 6d 65 6e 75 25 28  |N"):.tick(menu%(|
0001eff0  33 29 2c 38 2c 64 75 70  25 29 0d 11 4f 07 20 20  |3),8,dup%)..O.  |
0001f000  cb 0d 11 50 09 fd 20 c5  23 46 0d 11 51 2e f2 69  |...P.. .#F..Q..i|
0001f010  63 6f 6e 5f 62 69 74 28  32 32 2c 63 73 76 57 25  |con_bit(22,csvW%|
0001f020  2c 34 2c 28 a4 73 65 6c  65 63 74 65 64 28 63 73  |,4,(.selected(cs|
0001f030  76 57 25 2c 31 29 29 29  0d 11 52 12 f2 63 6c 6f  |vW%,1)))..R..clo|
0001f040  73 65 5f 66 69 6c 65 28  46 29 0d 11 53 05 e1 0d  |se_file(F)..S...|
0001f050  11 54 05 3a 0d 11 55 17  dd 20 f2 73 61 76 65 5f  |.T.:..U.. .save_|
0001f060  63 68 6f 69 63 65 73 28  66 24 29 0d 11 56 0a ea  |choices(f$)..V..|
0001f070  20 46 2c 43 24 0d 11 57  0b 46 3d ae 28 66 24 29  | F,C$..W.F=.(f$)|
0001f080  0d 11 58 26 e7 20 76 61  6c 69 64 61 74 65 25 3d  |..X&. validate%=|
0001f090  b9 20 8c 20 43 24 3d 22  4f 4e 22 20 8b 20 43 24  |. . C$="ON" . C$|
0001f0a0  3d 22 4f 46 46 22 0d 11  59 16 d5 23 46 2c 22 56  |="OFF"..Y..#F,"V|
0001f0b0  61 6c 69 64 61 74 65 20  22 2b 43 24 0d 11 5a 27  |alidate "+C$..Z'|
0001f0c0  e7 20 72 65 6c 61 74 69  6f 6e 73 25 3d b9 20 8c  |. relations%=. .|
0001f0d0  20 43 24 3d 22 4f 4e 22  20 8b 20 43 24 3d 22 4f  | C$="ON" . C$="O|
0001f0e0  46 46 22 0d 11 5b 17 d5  23 46 2c 22 52 65 6c 61  |FF"..[..#F,"Rela|
0001f0f0  74 69 6f 6e 73 20 22 2b  43 24 0d 11 5c 25 e7 20  |tions "+C$..\%. |
0001f100  64 65 6c 77 61 72 6e 25  3d b9 20 8c 20 43 24 3d  |delwarn%=. . C$=|
0001f110  22 4f 4e 22 20 8b 20 43  24 3d 22 4f 46 46 22 0d  |"ON" . C$="OFF".|
0001f120  11 5d 15 d5 23 46 2c 22  57 61 72 6e 69 6e 67 20  |.]..#F,"Warning |
0001f130  22 2b 43 24 0d 11 5e 12  c8 8e 20 61 75 74 6f 73  |"+C$..^... autos|
0001f140  61 76 65 25 20 ca 0d 11  5f 13 20 20 c9 20 30 3a  |ave% ..._.  . 0:|
0001f150  43 24 3d 22 4f 46 46 20  22 0d 11 60 1e 20 20 c9  |C$="OFF "..`.  .|
0001f160  20 31 3a 43 24 3d 22 57  41 52 4e 22 2b 24 49 6e  | 1:C$="WARN"+$In|
0001f170  74 65 72 76 61 6c 25 0d  11 61 1e 20 20 c9 20 32  |terval%..a.  . 2|
0001f180  3a 43 24 3d 22 41 55 54  4f 22 2b 24 49 6e 74 65  |:C$="AUTO"+$Inte|
0001f190  72 76 61 6c 25 0d 11 62  05 cb 0d 11 63 16 d5 23  |rval%..b....c..#|
0001f1a0  46 2c 22 41 75 74 6f 73  61 76 65 20 22 2b 43 24  |F,"Autosave "+C$|
0001f1b0  0d 11 64 15 c8 8e 20 61  75 74 6f 62 61 6c 61 6e  |..d... autobalan|
0001f1c0  63 65 25 20 ca 0d 11 65  13 20 20 c9 20 30 3a 43  |ce% ...e.  . 0:C|
0001f1d0  24 3d 22 4f 46 46 20 22  0d 11 66 1b 20 20 c9 20  |$="OFF "..f.  . |
0001f1e0  31 3a 43 24 3d 22 41 55  54 4f 22 2b 24 45 76 65  |1:C$="AUTO"+$Eve|
0001f1f0  72 79 25 0d 11 67 05 cb  0d 11 68 19 d5 23 46 2c  |ry%..g....h..#F,|
0001f200  22 41 75 74 6f 62 61 6c  61 6e 63 65 20 22 2b 43  |"Autobalance "+C|
0001f210  24 0d 11 69 2d e7 20 a4  73 65 6c 65 63 74 65 64  |$..i-. .selected|
0001f220  28 63 73 76 57 25 2c 30  29 20 8c 20 43 24 3d 22  |(csvW%,0) . C$="|
0001f230  4f 4e 22 20 8b 20 43 24  3d 22 4f 46 46 22 0d 11  |ON" . C$="OFF"..|
0001f240  6a 14 d5 23 46 2c 22 51  75 6f 74 65 73 20 22 2b  |j..#F,"Quotes "+|
0001f250  43 24 0d 11 6b 2d e7 20  a4 73 65 6c 65 63 74 65  |C$..k-. .selecte|
0001f260  64 28 63 73 76 57 25 2c  31 29 20 8c 20 43 24 3d  |d(csvW%,1) . C$=|
0001f270  22 4f 4e 22 20 8b 20 43  24 3d 22 4f 46 46 22 0d  |"ON" . C$="OFF".|
0001f280  11 6c 14 d5 23 46 2c 22  48 65 61 64 65 72 20 22  |.l..#F,"Header "|
0001f290  2b 43 24 0d 11 6d 2d e7  20 a4 73 65 6c 65 63 74  |+C$..m-. .select|
0001f2a0  65 64 28 63 73 76 57 25  2c 32 29 20 8c 20 43 24  |ed(csvW%,2) . C$|
0001f2b0  3d 22 4f 4e 22 20 8b 20  43 24 3d 22 4f 46 46 22  |="ON" . C$="OFF"|
0001f2c0  0d 11 6e 14 d5 23 46 2c  22 42 6c 61 6e 6b 73 20  |..n..#F,"Blanks |
0001f2d0  22 2b 43 24 0d 11 6f 2d  e7 20 a4 73 65 6c 65 63  |"+C$..o-. .selec|
0001f2e0  74 65 64 28 63 73 76 57  25 2c 33 29 20 8c 20 43  |ted(csvW%,3) . C|
0001f2f0  24 3d 22 4f 4e 22 20 8b  20 43 24 3d 22 4f 46 46  |$="ON" . C$="OFF|
0001f300  22 0d 11 70 11 d5 23 46  2c 22 4b 65 79 20 22 2b  |"..p..#F,"Key "+|
0001f310  43 24 0d 11 71 2d e7 20  a4 73 65 6c 65 63 74 65  |C$..q-. .selecte|
0001f320  64 28 63 73 76 57 25 2c  34 29 20 8c 20 43 24 3d  |d(csvW%,4) . C$=|
0001f330  22 4f 4e 22 20 8b 20 43  24 3d 22 4f 46 46 22 0d  |"ON" . C$="OFF".|
0001f340  11 72 12 d5 23 46 2c 22  44 61 74 61 20 22 2b 43  |.r..#F,"Data "+C|
0001f350  24 0d 11 73 0d c8 8e 20  73 65 70 24 20 ca 0d 11  |$..s... sep$ ...|
0001f360  74 16 20 20 c9 20 22 2c  22 3a 43 24 3d 22 43 6f  |t.  . ",":C$="Co|
0001f370  6d 6d 61 22 0d 11 75 15  20 20 c9 20 bd 28 39 29  |mma"..u.  . .(9)|
0001f380  3a 43 24 3d 22 54 41 42  22 0d 11 76 15 20 20 c9  |:C$="TAB"..v.  .|
0001f390  20 bd 28 31 30 29 3a 43  24 3d 22 4c 46 22 0d 11  | .(10):C$="LF"..|
0001f3a0  77 15 20 20 c9 20 bd 28  31 33 29 3a 43 24 3d 22  |w.  . .(13):C$="|
0001f3b0  43 52 22 0d 11 78 0f 20  20 7f 3a 43 24 3d 73 65  |CR"..x.  .:C$=se|
0001f3c0  70 24 0d 11 79 05 cb 0d  11 7a 17 d5 23 46 2c 22  |p$..y....z..#F,"|
0001f3d0  53 65 70 61 72 61 74 6f  72 20 22 2b 43 24 0d 11  |Separator "+C$..|
0001f3e0  7b 0e c8 8e 20 74 65 72  6d 24 20 ca 0d 11 7c 15  |{... term$ ...|.|
0001f3f0  20 20 c9 20 bd 28 31 33  29 3a 43 24 3d 22 43 52  |  . .(13):C$="CR|
0001f400  22 0d 11 7d 15 20 20 c9  20 bd 28 31 30 29 3a 43  |"..}.  . .(10):C|
0001f410  24 3d 22 4c 46 22 0d 11  7e 1e 20 20 c9 20 bd 28  |$="LF"..~.  . .(|
0001f420  31 33 29 2b bd 28 31 30  29 3a 43 24 3d 22 43 52  |13)+.(10):C$="CR|
0001f430  20 4c 46 22 0d 11 7f 1e  20 20 c9 20 bd 28 31 30  | LF"....  . .(10|
0001f440  29 2b bd 28 31 33 29 3a  43 24 3d 22 4c 46 20 43  |)+.(13):C$="LF C|
0001f450  52 22 0d 11 80 1e 20 20  c9 20 bd 28 31 33 29 2b  |R"....  . .(13)+|
0001f460  bd 28 31 33 29 3a 43 24  3d 22 43 52 20 43 52 22  |.(13):C$="CR CR"|
0001f470  0d 11 81 1e 20 20 c9 20  bd 28 31 30 29 2b bd 28  |....  . .(10)+.(|
0001f480  31 30 29 3a 43 24 3d 22  4c 46 20 4c 46 22 0d 11  |10):C$="LF LF"..|
0001f490  82 10 20 20 7f 3a 43 24  3d 74 65 72 6d 24 0d 11  |..  .:C$=term$..|
0001f4a0  83 05 cb 0d 11 84 18 d5  23 46 2c 22 54 65 72 6d  |........#F,"Term|
0001f4b0  69 6e 61 74 6f 72 20 22  2b 43 24 0d 11 85 2e e7  |inator "+C$.....|
0001f4c0  20 a4 73 65 6c 65 63 74  65 64 28 63 73 76 57 25  | .selected(csvW%|
0001f4d0  2c 31 31 29 20 8c 20 43  24 3d 22 4f 4e 22 20 8b  |,11) . C$="ON" .|
0001f4e0  20 43 24 3d 22 4f 46 46  22 0d 11 86 15 d5 23 46  | C$="OFF".....#F|
0001f4f0  2c 22 44 69 73 70 6c 61  79 20 22 2b 43 24 0d 11  |,"Display "+C$..|
0001f500  87 2e e7 20 a4 73 65 6c  65 63 74 65 64 28 63 73  |... .selected(cs|
0001f510  76 57 25 2c 31 36 29 20  8c 20 43 24 3d 22 4f 4e  |vW%,16) . C$="ON|
0001f520  22 20 8b 20 43 24 3d 22  4f 46 46 22 0d 11 88 13  |" . C$="OFF"....|
0001f530  d5 23 46 2c 22 53 74 72  69 70 20 22 2b 43 24 0d  |.#F,"Strip "+C$.|
0001f540  11 89 0a c8 8e 20 b9 20  ca 0d 11 8a 93 20 20 c9  |..... . .....  .|
0001f550  20 a4 73 65 6c 65 63 74  65 64 28 6d 61 74 63 68  | .selected(match|
0001f560  57 25 2c 31 36 29 2c a4  73 65 6c 65 63 74 65 64  |W%,16),.selected|
0001f570  28 73 61 76 65 73 75 62  57 25 2c 35 29 2c a4 73  |(savesubW%,5),.s|
0001f580  65 6c 65 63 74 65 64 28  63 68 61 6e 67 65 57 25  |elected(changeW%|
0001f590  2c 35 29 2c a4 73 65 6c  65 63 74 65 64 28 6d 6f  |,5),.selected(mo|
0001f5a0  76 65 57 25 2c 39 29 2c  a4 73 65 6c 65 63 74 65  |veW%,9),.selecte|
0001f5b0  64 28 6d 65 72 67 65 57  25 2c 31 32 29 2c a4 73  |d(mergeW%,12),.s|
0001f5c0  65 6c 65 63 74 65 64 28  6b 65 79 70 61 64 57 25  |elected(keypadW%|
0001f5d0  2c 33 32 29 3a 43 24 3d  22 4f 4e 22 0d 11 8b 10  |,32):C$="ON"....|
0001f5e0  20 20 7f 3a 43 24 3d 22  4f 46 46 22 0d 11 8c 05  |  .:C$="OFF"....|
0001f5f0  cb 0d 11 8d 1a d5 23 46  2c 22 43 61 73 65 53 70  |......#F,"CaseSp|
0001f600  65 63 69 66 69 63 20 22  2b 43 24 0d 11 8e 1f e7  |ecific "+C$.....|
0001f610  20 64 75 70 25 20 8c 20  43 24 3d 22 4f 4e 22 20  | dup% . C$="ON" |
0001f620  8b 20 43 24 3d 22 4f 46  46 22 0d 11 8f 19 d5 23  |. C$="OFF".....#|
0001f630  46 2c 22 44 75 70 6c 69  63 61 74 69 6f 6e 20 22  |F,"Duplication "|
0001f640  2b 43 24 0d 11 90 12 f2  63 6c 6f 73 65 5f 66 69  |+C$.....close_fi|
0001f650  6c 65 28 46 29 0d 11 91  1b c8 99 20 22 4f 53 5f  |le(F)...... "OS_|
0001f660  46 69 6c 65 22 2c 31 38  2c 66 24 2c 26 66 66 66  |File",18,f$,&fff|
0001f670  0d 11 92 05 e1 0d 11 93  05 3a 0d 11 94 1a dd 20  |.........:..... |
0001f680  f2 6f 70 65 6e 5f 69 6e  64 65 78 28 66 24 2c 6b  |.open_index(f$,k|
0001f690  65 79 25 29 0d 11 95 11  ea 20 6b 65 79 62 61 73  |ey%)..... keybas|
0001f6a0  65 25 2c 49 25 0d 11 96  3a e7 20 6b 65 79 25 3e  |e%,I%...:. key%>|
0001f6b0  4d 61 78 4b 65 79 73 25  20 8c 20 65 78 74 72 61  |MaxKeys% . extra|
0001f6c0  6b 65 79 73 24 2b 3d a4  6c 65 61 66 28 66 24 29  |keys$+=.leaf(f$)|
0001f6d0  2b 22 2c 22 3a 4b 65 79  73 25 2d 3d 31 3a e1 0d  |+",":Keys%-=1:..|
0001f6e0  11 97 3f e7 20 6b 65 79  61 6e 63 68 6f 72 25 28  |..?. keyanchor%(|
0001f6f0  6b 65 79 25 29 20 8c 20  f2 73 63 72 61 70 5f 73  |key%) . .scrap_s|
0001f700  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 6b 65 79  |liding_block(key|
0001f710  61 6e 63 68 6f 72 25 28  6b 65 79 25 29 29 0d 11  |anchor%(key%))..|
0001f720  98 20 c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 35  |. .. "OS_File",5|
0001f730  2c 66 24 20 b8 20 2c 2c  2c 2c 6c 65 6e 25 0d 11  |,f$ . ,,,,len%..|
0001f740  99 36 f2 63 72 65 61 74  65 5f 6e 61 6d 65 64 5f  |.6.create_named_|
0001f750  73 6c 69 64 69 6e 67 5f  62 6c 6f 63 6b 28 6b 65  |sliding_block(ke|
0001f760  79 61 6e 63 68 6f 72 25  28 6b 65 79 25 29 2c 6c  |yanchor%(key%),l|
0001f770  65 6e 25 29 0d 11 9a 29  c8 99 20 22 4f 53 5f 46  |en%)...).. "OS_F|
0001f780  69 6c 65 22 2c 32 35 35  2c 66 24 2c 21 6b 65 79  |ile",255,f$,!key|
0001f790  61 6e 63 68 6f 72 25 28  6b 65 79 25 29 0d 11 9b  |anchor%(key%)...|
0001f7a0  1a 49 6e 64 65 78 24 28  6b 65 79 25 29 3d a4 6c  |.Index$(key%)=.l|
0001f7b0  65 61 66 28 66 24 29 0d  11 9c 1e 6b 65 79 62 61  |eaf(f$)....keyba|
0001f7c0  73 65 25 3d 21 6b 65 79  61 6e 63 68 6f 72 25 28  |se%=!keyanchor%(|
0001f7d0  6b 65 79 25 29 0d 11 9d  0e e7 20 6b 65 79 25 3d  |key%)..... key%=|
0001f7e0  30 20 8c 0d 11 9e 10 20  20 e3 20 49 25 3d 30 20  |0 .....  . I%=0 |
0001f7f0  b8 20 35 0d 11 9f 25 20  20 20 20 24 44 61 74 65  |. 5...%    $Date|
0001f800  25 28 49 25 29 3d 24 28  6b 65 79 62 61 73 65 25  |%(I%)=$(keybase%|
0001f810  2b 38 2b 39 2a 49 25 29  0d 11 a0 0a 20 20 ed 20  |+8+9*I%)....  . |
0001f820  49 25 0d 11 a1 05 cd 0d  11 a2 1b 4b 46 25 28 6b  |I%.........KF%(k|
0001f830  65 79 25 2c 30 29 3d 6b  65 79 62 61 73 65 25 21  |ey%,0)=keybase%!|
0001f840  36 32 0d 11 a3 1b 4b 46  25 28 6b 65 79 25 2c 31  |62....KF%(key%,1|
0001f850  29 3d 6b 65 79 62 61 73  65 25 21 36 36 0d 11 a4  |)=keybase%!66...|
0001f860  19 4b 4c 25 28 6b 65 79  25 29 3d 6b 65 79 62 61  |.KL%(key%)=keyba|
0001f870  73 65 25 3f 37 30 0d 11  a5 21 63 61 73 65 25 28  |se%?70...!case%(|
0001f880  6b 65 79 25 29 3d 28 6b  65 79 62 61 73 65 25 3f  |key%)=(keybase%?|
0001f890  37 31 3d 32 35 35 29 0d  11 a6 0e e3 20 49 25 3d  |71=255)..... I%=|
0001f8a0  30 20 b8 20 33 0d 11 a7  26 20 20 4b 57 25 28 6b  |0 . 3...&  KW%(k|
0001f8b0  65 79 25 2c 49 25 29 3d  21 28 6b 65 79 62 61 73  |ey%,I%)=!(keybas|
0001f8c0  65 25 2b 37 34 2b 49 25  2a 34 29 0d 11 a8 08 ed  |e%+74+I%*4).....|
0001f8d0  20 49 25 0d 11 a9 05 e1  0d 11 aa 05 3a 0d 11 ab  | I%.........:...|
0001f8e0  11 dd 20 f2 67 65 74 5f  74 61 62 6c 65 73 0d 11  |.. .get_tables..|
0001f8f0  ac 1b ea 20 6c 6b 2c 46  25 2c 64 25 2c 52 34 25  |... lk,F%,d%,R4%|
0001f900  2c 66 24 2c 6e 61 6d 65  24 0d 11 ad 24 66 24 3d  |,f$,name$...$f$=|
0001f910  24 64 61 74 61 62 61 73  65 25 2b 22 2e 56 61 6c  |$database%+".Val|
0001f920  54 61 62 6c 65 73 22 3a  52 34 25 3d 30 0d 11 ae  |Tables":R4%=0...|
0001f930  2c c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  |,.. "OS_File",5,|
0001f940  24 64 61 74 61 62 61 73  65 25 2b 22 2e 54 61 62  |$database%+".Tab|
0001f950  6c 65 73 22 20 b8 20 64  25 0d 11 af 22 e7 20 64  |les" . d%...". d|
0001f960  25 3d 32 20 8c 20 85 20  66 61 74 61 6c 5f 65 72  |%=2 . . fatal_er|
0001f970  72 25 2c a4 6d 73 67 28  31 38 29 0d 11 b0 07 ea  |r%,.msg(18).....|
0001f980  20 85 0d 11 b1 2f ee 20  85 20 ea 3a f2 63 6c 6f  | ..../. . .:.clo|
0001f990  73 65 5f 66 69 6c 65 28  6c 6b 29 3a f2 77 69 6d  |se_file(lk):.wim|
0001f9a0  70 5f 65 72 72 6f 72 28  a3 2c 9f 2c 9e 2c f6 24  |p_error(.,.,.,.$|
0001f9b0  29 0d 11 b2 1c 6c 6b 3d  8e 28 24 64 61 74 61 62  |)....lk=.($datab|
0001f9c0  61 73 65 25 2b 22 2e 4c  69 6e 6b 22 29 0d 11 b3  |ase%+".Link")...|
0001f9d0  0c e7 20 6c 6b 3e 30 20  8c 0d 11 b4 14 20 20 21  |.. lk>0 .....  !|
0001f9e0  62 6c 6f 63 6b 25 3d 6d  61 69 6e 57 25 0d 11 b5  |block%=mainW%...|
0001f9f0  0f 20 20 c8 95 20 ac 20  c5 23 6c 6b 0d 11 b6 0d  |.  .. . .#lk....|
0001fa00  20 20 20 20 46 25 2b 3d  31 0d 11 b7 16 20 20 20  |    F%+=1....   |
0001fa10  20 e8 23 6c 6b 2c 6c 69  6e 6b 24 28 46 25 29 0d  | .#lk,link$(F%).|
0001fa20  11 b8 19 20 20 20 20 6e  61 6d 65 24 3d c0 6c 69  |...    name$=.li|
0001fa30  6e 6b 24 28 46 25 29 29  0d 11 b9 1a 20 20 20 20  |nk$(F%))....    |
0001fa40  e7 20 c0 6e 61 6d 65 24  2c 31 29 3c 3e 22 40 22  |. .name$,1)<>"@"|
0001fa50  20 8c 0d 11 ba 17 20 20  20 20 20 20 e7 20 6e 61  | .....      . na|
0001fa60  6d 65 24 3c 3e 22 22 20  8c 0d 11 bb 2b 20 20 20  |me$<>"" ....+   |
0001fa70  20 20 20 20 20 e7 20 97  28 6e 61 6d 65 24 29 3c  |     . .(name$)<|
0001fa80  35 38 20 8c 20 6e 61 6d  65 24 3d c1 6e 61 6d 65  |58 . name$=.name|
0001fa90  24 2c 32 29 0d 11 bc 36  20 20 20 20 20 20 20 20  |$,2)...6        |
0001faa0  f2 73 65 74 5f 69 63 6f  6e 5f 63 6f 6c 73 28 6d  |.set_icon_cols(m|
0001fab0  61 69 6e 57 25 2c 66 69  65 6c 64 25 28 46 25 29  |ainW%,field%(F%)|
0001fac0  2c 66 63 6f 6c 25 28 36  29 29 0d 11 bd 2e 20 20  |,fcol%(6))....  |
0001fad0  20 20 20 20 20 20 e7 20  64 25 3d 30 20 8c 20 f2  |      . d%=0 . .|
0001fae0  64 72 61 67 5f 74 61 62  6c 65 28 66 24 2b 22 2e  |drag_table(f$+".|
0001faf0  22 2b 6e 61 6d 65 24 29  0d 11 be 0b 20 20 20 20  |"+name$)....    |
0001fb00  20 20 cd 0d 11 bf 09 20  20 20 20 cd 0d 11 c0 07  |  .....    .....|
0001fb10  20 20 ce 0d 11 c1 17 20  20 6c 69 6e 6b 24 28 30  |  .....  link$(0|
0001fb20  29 3d 22 4c 4f 41 44 45  44 22 0d 11 c2 15 20 20  |)="LOADED"....  |
0001fb30  f2 63 6c 6f 73 65 5f 66  69 6c 65 28 6c 6b 29 0d  |.close_file(lk).|
0001fb40  11 c3 05 cd 0d 11 c4 3a  f4 20 23 23 23 20 46 6f  |.......:. ### Fo|
0001fb50  72 63 65 20 6c 6f 61 64  69 6e 67 20 6f 66 20 75  |rce loading of u|
0001fb60  6e 6c 69 6e 6b 65 64 20  62 75 74 20 66 6c 61 67  |nlinked but flag|
0001fb70  67 65 64 20 74 61 62 6c  65 73 20 23 23 23 0d 11  |ged tables ###..|
0001fb80  c5 0e c8 95 20 52 34 25  3c 3e 2d 31 0d 11 c6 36  |.... R4%<>-1...6|
0001fb90  20 20 c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 39  |  .. "OS_GBPB",9|
0001fba0  2c 66 24 2c 62 6c 6f 63  6b 25 2c 31 2c 52 34 25  |,f$,block%,1,R4%|
0001fbb0  2c 31 31 20 b8 20 2c 2c  6e 61 6d 65 24 2c 2c 52  |,11 . ,,name$,,R|
0001fbc0  34 25 0d 11 c7 3b 20 20  e7 20 52 34 25 3c 3e 2d  |4%...;  . R4%<>-|
0001fbd0  31 20 8c 20 e7 20 c2 6e  61 6d 65 24 29 3d 22 21  |1 . . .name$)="!|
0001fbe0  22 20 8c 20 f2 64 72 61  67 5f 74 61 62 6c 65 28  |" . .drag_table(|
0001fbf0  66 24 2b 22 2e 22 2b 6e  61 6d 65 24 29 0d 11 c8  |f$+"."+name$)...|
0001fc00  05 ce 0d 11 c9 07 f7 20  85 0d 11 ca 32 e7 20 65  |....... ....2. e|
0001fc10  78 74 72 61 74 61 62 73  24 3c 3e 22 22 20 8c 20  |xtratabs$<>"" . |
0001fc20  f2 73 6f 66 74 65 72 72  6f 72 28 c0 65 78 74 72  |.softerror(.extr|
0001fc30  61 74 61 62 73 24 29 2c  39 37 29 0d 11 cb 05 e1  |atabs$),97).....|
0001fc40  0d 11 cc 05 3a 0d 11 cd  11 dd 20 f2 6c 6f 61 64  |....:..... .load|
0001fc50  5f 63 61 6c 63 73 0d 11  ce 15 ea 20 46 25 2c 46  |_calcs..... F%,F|
0001fc60  31 25 2c 50 25 2c 63 61  6c 63 24 0d 11 cf 10 75  |1%,P%,calc$....u|
0001fc70  70 64 61 74 65 24 28 29  3d 22 22 0d 11 d0 1c 63  |pdate$()=""....c|
0001fc80  6c 3d 8e 28 24 64 61 74  61 62 61 73 65 25 2b 22  |l=.($database%+"|
0001fc90  2e 43 61 6c 63 22 29 0d  11 d1 0c e7 20 63 6c 3e  |.Calc")..... cl>|
0001fca0  30 20 8c 0d 11 d2 0f 20  20 c8 95 20 ac 20 c5 23  |0 .....  .. . .#|
0001fcb0  63 6c 0d 11 d3 2b 20 20  20 20 46 25 2b 3d 31 3a  |cl...+    F%+=1:|
0001fcc0  46 24 3d c3 7e 28 46 25  29 3a e7 20 46 25 3c 31  |F$=.~(F%):. F%<1|
0001fcd0  36 20 8c 20 46 24 3d 22  30 22 2b 46 24 0d 11 d4  |6 . F$="0"+F$...|
0001fce0  22 20 20 20 20 e8 23 63  6c 2c 63 61 6c 63 24 3a  |"    .#cl,calc$:|
0001fcf0  63 61 6c 63 24 28 46 25  29 3d 63 61 6c 63 24 0d  |calc$(F%)=calc$.|
0001fd00  11 d5 1a 20 20 20 20 c8  8e 20 63 68 61 72 74 79  |...    .. charty|
0001fd10  70 65 25 28 46 25 29 20  ca 0d 11 d6 10 20 20 20  |pe%(F%) .....   |
0001fd20  20 20 20 c9 20 36 2c 37  3a 0d 11 d7 0b 20 20 20  |   . 6,7:....   |
0001fd30  20 20 20 f5 0d 11 d8 21  20 20 20 20 20 20 20 20  |   ....!        |
0001fd40  50 25 3d a7 63 61 6c 63  24 2c 22 24 52 66 25 28  |P%=.calc$,"$Rf%(|
0001fd50  22 2c 50 25 29 0d 11 d9  3f 20 20 20 20 20 20 20  |",P%)...?       |
0001fd60  20 e7 20 50 25 3e 30 20  8c 20 46 31 25 3d bb 28  | . P%>0 . F1%=.(|
0001fd70  c1 63 61 6c 63 24 2c 50  25 2b 35 29 29 3a 75 70  |.calc$,P%+5)):up|
0001fd80  64 61 74 65 24 28 46 31  25 29 2b 3d 46 24 3a 50  |date$(F1%)+=F$:P|
0001fd90  25 2b 3d 35 0d 11 da 10  20 20 20 20 20 20 fd 20  |%+=5....      . |
0001fda0  50 25 3d 30 0d 11 db 0b  20 20 20 20 20 20 f5 0d  |P%=0....      ..|
0001fdb0  11 dc 20 20 20 20 20 20  20 20 20 50 25 3d a7 63  |..         P%=.c|
0001fdc0  61 6c 63 24 2c 22 46 4e  6e 28 22 2c 50 25 29 0d  |alc$,"FNn(",P%).|
0001fdd0  11 dd 3f 20 20 20 20 20  20 20 20 e7 20 50 25 3e  |..?        . P%>|
0001fde0  30 20 8c 20 46 31 25 3d  bb 28 c1 63 61 6c 63 24  |0 . F1%=.(.calc$|
0001fdf0  2c 50 25 2b 34 29 29 3a  75 70 64 61 74 65 24 28  |,P%+4)):update$(|
0001fe00  46 31 25 29 2b 3d 46 24  3a 50 25 2b 3d 34 0d 11  |F1%)+=F$:P%+=4..|
0001fe10  de 10 20 20 20 20 20 20  fd 20 50 25 3d 30 0d 11  |..      . P%=0..|
0001fe20  df 2e 20 20 20 20 20 20  e7 20 a7 63 61 6c 63 24  |..      . .calc$|
0001fe30  2c 22 54 49 4d 45 24 22  29 3e 30 20 8c 20 75 70  |,"TIME$")>0 . up|
0001fe40  64 61 74 65 24 28 30 29  2b 3d 46 24 0d 11 e0 09  |date$(0)+=F$....|
0001fe50  20 20 20 20 cb 0d 11 e1  07 20 20 ce 0d 11 e2 17  |    .....  .....|
0001fe60  20 20 63 61 6c 63 24 28  30 29 3d 22 4c 4f 41 44  |  calc$(0)="LOAD|
0001fe70  45 44 22 0d 11 e3 15 20  20 f2 63 6c 6f 73 65 5f  |ED"....  .close_|
0001fe80  66 69 6c 65 28 63 6c 29  0d 11 e4 05 cd 0d 11 e5  |file(cl)........|
0001fe90  05 e1 0d 11 e6 05 3a 0d  11 e7 18 dd 20 a4 67 65  |......:..... .ge|
0001fea0  74 5f 66 6f 72 6d 28 f8  20 46 70 74 72 25 29 0d  |t_form(. Fptr%).|
0001feb0  11 e8 2b ea 20 46 2c 4c  25 2c 4e 25 2c 49 25 2c  |..+. F,L%,N%,I%,|
0001fec0  56 25 2c 78 25 2c 79 25  2c 78 6c 69 6d 25 2c 79  |V%,x%,y%,xlim%,y|
0001fed0  6c 69 6d 25 2c 74 65 78  74 25 0d 11 e9 14 62 75  |lim%,text%....bu|
0001fee0  74 74 6f 6e 66 69 65 6c  64 25 28 29 3d 30 0d 11  |ttonfield%()=0..|
0001fef0  ea 72 e7 20 64 65 73 69  67 6e 25 20 8c 20 64 66  |.r. design% . df|
0001ff00  6c 67 25 3d 28 77 69 6e  62 61 63 6b 25 3c 3c 32  |lg%=(winback%<<2|
0001ff10  38 29 2b 26 37 30 31 36  37 33 31 3a 64 76 61 6c  |8)+&7016731:dval|
0001ff20  25 3d 68 61 6e 64 25 3a  66 75 6e 63 25 3d 31 20  |%=hand%:func%=1 |
0001ff30  8b 20 64 66 6c 67 25 3d  28 77 69 6e 62 61 63 6b  |. dflg%=(winback|
0001ff40  25 3c 3c 32 38 29 2b 26  37 30 31 30 37 33 31 3a  |%<<28)+&7010731:|
0001ff50  64 76 61 6c 25 3d 2d 31  3a 66 75 6e 63 25 3d 30  |dval%=-1:func%=0|
0001ff60  0d 11 eb 1b 46 3d 8e 28  24 64 61 74 61 62 61 73  |....F=.($databas|
0001ff70  65 25 2b 22 2e 46 6f 72  6d 22 29 0d 11 ec 0b e7  |e%+".Form").....|
0001ff80  20 46 3e 30 20 8c 0d 11  ed 0c 20 20 e8 23 46 2c  | F>0 .....  .#F,|
0001ff90  4e 25 0d 11 ee 26 20 20  e7 20 4e 25 3e 31 32 37  |N%...&  . N%>127|
0001ffa0  20 8c 20 85 20 66 61 74  61 6c 5f 65 72 72 25 2c  | . . fatal_err%,|
0001ffb0  a4 6d 73 67 28 39 38 29  0d 11 ef 32 20 20 66 6f  |.msg(98)...2  fo|
0001ffc0  72 6d 6c 65 6e 25 3d 26  31 30 30 3a 66 6f 72 6d  |rmlen%=&100:form|
0001ffd0  69 6e 63 25 3d 66 6f 72  6d 6c 65 6e 25 3a 66 6f  |inc%=formlen%:fo|
0001ffe0  72 6d 5f 69 6e 63 73 25  3d 30 0d 11 f0 37 20 20  |rm_incs%=0...7  |
0001fff0  f2 65 78 74 65 6e 64 5f  6e 61 6d 65 64 5f 73 6c  |.extend_named_sl|
00020000  69 64 69 6e 67 5f 62 6c  6f 63 6b 28 66 6f 72 6d  |iding_block(form|
00020010  61 6e 63 68 6f 72 25 2c  66 6f 72 6d 6c 65 6e 25  |anchor%,formlen%|
00020020  29 0d 11 f1 39 20 20 46  70 74 72 25 3d 21 66 6f  |)...9  Fptr%=!fo|
00020030  72 6d 61 6e 63 68 6f 72  25 3a 52 66 25 28 30 29  |rmanchor%:Rf%(0)|
00020040  3d 46 70 74 72 25 3a 24  52 66 25 28 30 29 3d 22  |=Fptr%:$Rf%(0)="|
00020050  22 3a 46 70 74 72 25 2b  3d 31 0d 11 f2 0f 20 20  |":Fptr%+=1....  |
00020060  4c 65 6e 67 74 68 25 3d  30 0d 11 f3 11 20 20 e3  |Length%=0....  .|
00020070  20 49 25 3d 31 20 b8 20  4e 25 0d 11 f4 40 20 20  | I%=1 . N%...@  |
00020080  20 20 e8 23 46 2c 44 65  73 63 24 2c 54 61 67 24  |  .#F,Desc$,Tag$|
00020090  28 49 25 29 2c 78 64 25  2c 79 64 25 2c 78 66 25  |(I%),xd%,yd%,xf%|
000200a0  2c 79 66 25 2c 6c 65 6e  25 2c 63 68 61 72 25 2c  |,yf%,len%,char%,|
000200b0  66 69 78 25 2c 62 62 6f  78 25 0d 11 f5 0e 20 20  |fix%,bbox%....  |
000200c0  20 20 c8 8e 20 b9 20 ca  0d 11 f6 2f 20 20 20 20  |  .. . ..../    |
000200d0  20 20 c9 20 62 62 6f 78  25 3d 30 20 80 20 6c 65  |  . bbox%=0 . le|
000200e0  6e 25 3d 30 3a 77 69 64  74 68 25 3d 30 3a 68 65  |n%=0:width%=0:he|
000200f0  69 67 68 74 25 3d 30 0d  11 f7 30 20 20 20 20 20  |ight%=0...0     |
00020100  20 c9 20 62 62 6f 78 25  3d 30 3a 77 69 64 74 68  | . bbox%=0:width|
00020110  25 3d 6c 65 6e 25 2a 31  36 2b 31 36 3a 68 65 69  |%=len%*16+16:hei|
00020120  67 68 74 25 3d 34 38 0d  11 f8 36 20 20 20 20 20  |ght%=48...6     |
00020130  20 c9 20 62 62 6f 78 25  3c 26 31 30 30 30 30 3a  | . bbox%<&10000:|
00020140  77 69 64 74 68 25 3d 62  62 6f 78 25 2a 31 36 2b  |width%=bbox%*16+|
00020150  31 36 3a 68 65 69 67 68  74 25 3d 34 38 0d 11 f9  |16:height%=48...|
00020160  32 20 20 20 20 20 20 7f  3a 77 69 64 74 68 25 3d  |2      .:width%=|
00020170  62 62 6f 78 25 20 80 20  26 46 46 46 46 3a 68 65  |bbox% . &FFFF:he|
00020180  69 67 68 74 25 3d 62 62  6f 78 25 3e 3e 31 36 0d  |ight%=bbox%>>16.|
00020190  11 fa 09 20 20 20 20 cb  0d 11 fb 13 20 20 20 20  |...    .....    |
000201a0  e7 20 64 65 73 69 67 6e  25 20 8c 0d 11 fc 14 20  |. design% ..... |
000201b0  20 20 20 20 20 c8 8e 20  63 68 61 72 25 20 ca 0d  |     .. char% ..|
000201c0  11 fd 31 20 20 20 20 20  20 20 20 c9 20 30 2c 31  |..1        . 0,1|
000201d0  2c 32 2c 33 2c 34 2c 35  2c 36 2c 37 2c 38 2c 33  |,2,3,4,5,6,7,8,3|
000201e0  39 2c 34 30 3a 66 76 61  6c 25 3d 68 61 6e 64 25  |9,40:fval%=hand%|
000201f0  0d 11 fe 22 20 20 20 20  20 20 20 20 7f 3a 66 76  |..."        .:fv|
00020200  61 6c 25 3d 68 76 61 6c  69 64 25 28 63 68 61 72  |al%=hvalid%(char|
00020210  25 29 0d 11 ff 0b 20 20  20 20 20 20 cb 0d 12 00  |%)....      ....|
00020220  0b 20 20 20 20 20 20 cc  0d 12 01 10 20 20 20 20  |.      .....    |
00020230  20 20 c8 8e 20 b9 20 ca  0d 12 02 3d 20 20 20 20  |  .. . ....=    |
00020240  20 20 20 20 c9 20 63 68  61 72 25 3e 38 20 80 20  |    . char%>8 . |
00020250  63 68 61 72 25 3c 33 32  3a 66 76 61 6c 25 3d a4  |char%<32:fval%=.|
00020260  76 61 6c 28 6b 65 79 70  61 64 57 25 2c 63 68 61  |val(keypadW%,cha|
00020270  72 25 2d 39 29 0d 12 03  21 20 20 20 20 20 20 20  |r%-9)...!       |
00020280  20 7f 3a 66 76 61 6c 25  3d 76 61 6c 69 64 25 28  | .:fval%=valid%(|
00020290  63 68 61 72 25 29 0d 12  04 0b 20 20 20 20 20 20  |char%)....      |
000202a0  cb 0d 12 05 09 20 20 20  20 cd 0d 12 06 22 20 20  |.....    ...."  |
000202b0  20 20 78 25 3d 78 66 25  2b 77 69 64 74 68 25 2b  |  x%=xf%+width%+|
000202c0  33 32 3a 79 25 3d 79 66  25 2d 31 36 0d 12 07 1d  |32:y%=yf%-16....|
000202d0  20 20 20 20 e7 20 78 25  3e 78 6c 69 6d 25 20 8c  |    . x%>xlim% .|
000202e0  20 78 6c 69 6d 25 3d 78  25 0d 12 08 1d 20 20 20  | xlim%=x%....   |
000202f0  20 e7 20 79 25 3c 79 6c  69 6d 25 20 8c 20 79 6c  | . y%<ylim% . yl|
00020300  69 6d 25 3d 79 25 0d 12  09 27 20 20 20 20 79 25  |im%=y%...'    y%|
00020310  3d 79 64 25 2d 31 36 3a  e7 20 79 25 3c 79 6c 69  |=yd%-16:. y%<yli|
00020320  6d 25 20 8c 20 79 6c 69  6d 25 3d 79 25 0d 12 0a  |m% . ylim%=y%...|
00020330  17 20 20 20 20 4c 65 6e  67 74 68 25 2b 3d 6c 65  |.    Length%+=le|
00020340  6e 25 2b 31 0d 12 0b 46  20 20 20 20 e7 20 64 65  |n%+1...F    . de|
00020350  73 69 67 6e 25 3d a3 20  80 20 63 68 61 72 25 3d  |sign%=. . char%=|
00020360  33 39 20 8c 20 6c 65 6e  25 3d 28 68 65 69 67 68  |39 . len%=(heigh|
00020370  74 25 20 81 20 34 30 29  2a 28 28 77 69 64 74 68  |t% . 40)*((width|
00020380  25 20 81 20 31 36 29 2d  34 29 0d 12 0c 37 20 20  |% . 16)-4)...7  |
00020390  20 20 6c 65 6e 25 28 49  25 29 3d 6c 65 6e 25 3a  |  len%(I%)=len%:|
000203a0  63 68 61 72 74 79 70 65  25 28 49 25 29 3d 63 68  |chartype%(I%)=ch|
000203b0  61 72 25 3a 66 69 78 25  28 49 25 29 3d 66 69 78  |ar%:fix%(I%)=fix|
000203c0  25 0d 12 0d 13 20 20 20  20 4c 25 3d a9 28 44 65  |%....    L%=.(De|
000203d0  73 63 24 29 0d 12 0e 31  20 20 20 20 e7 20 46 70  |sc$)...1    . Fp|
000203e0  74 72 25 2d 21 66 6f 72  6d 61 6e 63 68 6f 72 25  |tr%-!formanchor%|
000203f0  2b 4c 25 2b 6c 65 6e 25  2b 32 3e 66 6f 72 6d 6c  |+L%+len%+2>forml|
00020400  65 6e 25 20 8c 0d 12 0f  2a 20 20 20 20 20 20 66  |en% ....*      f|
00020410  6f 72 6d 5f 69 6e 63 73  25 2b 3d 31 3a 66 6f 72  |orm_incs%+=1:for|
00020420  6d 6c 65 6e 25 2b 3d 66  6f 72 6d 69 6e 63 25 0d  |mlen%+=forminc%.|
00020430  12 10 3b 20 20 20 20 20  20 f2 65 78 74 65 6e 64  |..;      .extend|
00020440  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00020450  6c 6f 63 6b 28 66 6f 72  6d 61 6e 63 68 6f 72 25  |lock(formanchor%|
00020460  2c 66 6f 72 6d 6c 65 6e  25 29 0d 12 11 09 20 20  |,formlen%)....  |
00020470  20 20 cd 0d 12 12 14 20  20 20 20 24 46 70 74 72  |  .....    $Fptr|
00020480  25 3d 44 65 73 63 24 0d  12 13 51 20 20 20 20 64  |%=Desc$...Q    d|
00020490  65 73 63 25 28 49 25 29  3d a4 63 72 65 61 74 65  |esc%(I%)=.create|
000204a0  5f 69 63 6f 6e 28 6d 61  69 6e 57 25 2c 78 64 25  |_icon(mainW%,xd%|
000204b0  2c 79 64 25 2c 4c 25 2a  31 36 2b 38 2c 34 38 2c  |,yd%,L%*16+8,48,|
000204c0  64 66 6c 67 25 2c 22 22  2c 46 70 74 72 25 2c 64  |dflg%,"",Fptr%,d|
000204d0  76 61 6c 25 2c 4c 25 29  0d 12 14 2d 20 20 20 20  |val%,L%)...-    |
000204e0  46 70 74 72 25 2b 3d 4c  25 2b 31 3a 52 66 25 28  |Fptr%+=L%+1:Rf%(|
000204f0  49 25 29 3d 46 70 74 72  25 3a 24 52 66 25 28 49  |I%)=Fptr%:$Rf%(I|
00020500  25 29 3d 22 22 0d 12 15  30 20 20 20 20 f2 69 63  |%)=""...0    .ic|
00020510  6f 6e 5f 64 65 73 69 67  6e 28 63 68 61 72 25 2c  |on_design(char%,|
00020520  66 75 6e 63 25 2c 77 69  64 74 68 25 2c 68 65 69  |func%,width%,hei|
00020530  67 68 74 25 29 0d 12 16  54 20 20 20 20 e7 20 63  |ght%)...T    . c|
00020540  68 61 72 25 3d 35 39 20  80 20 ac 20 64 65 73 69  |har%=59 . . desi|
00020550  67 6e 25 20 8c 20 24 46  70 74 72 25 3d 54 61 67  |gn% . $Fptr%=Tag|
00020560  24 28 49 25 29 3a 6c 65  6e 25 3d a9 28 54 61 67  |$(I%):len%=.(Tag|
00020570  24 28 49 25 29 29 3a 66  76 61 6c 25 3d 21 6c 6f  |$(I%)):fval%=!lo|
00020580  67 6f 61 6e 63 68 6f 72  25 0d 12 17 5c 20 20 20  |goanchor%...\   |
00020590  20 66 69 65 6c 64 25 28  49 25 29 3d a4 63 72 65  | field%(I%)=.cre|
000205a0  61 74 65 5f 69 63 6f 6e  28 6d 61 69 6e 57 25 2c  |ate_icon(mainW%,|
000205b0  78 66 25 2c 79 66 25 2c  77 69 64 74 68 25 2c 68  |xf%,yf%,width%,h|
000205c0  65 69 67 68 74 25 2c 69  66 6c 61 67 73 25 2c 22  |eight%,iflags%,"|
000205d0  22 2c 46 70 74 72 25 2c  66 76 61 6c 25 2c 6c 65  |",Fptr%,fval%,le|
000205e0  6e 25 2b 31 29 0d 12 18  12 20 20 20 20 c8 8e 20  |n%+1)....    .. |
000205f0  63 68 61 72 25 20 ca 0d  12 19 68 20 20 20 20 20  |char% ....h     |
00020600  20 c9 20 39 2c 31 30 2c  31 31 2c 31 32 2c 31 33  | . 9,10,11,12,13|
00020610  2c 31 34 2c 31 35 2c 31  36 2c 31 37 2c 31 38 2c  |,14,15,16,17,18,|
00020620  31 39 2c 32 30 2c 32 31  2c 32 32 2c 32 33 2c 32  |19,20,21,22,23,2|
00020630  34 2c 32 35 2c 32 36 2c  32 37 2c 32 38 2c 32 39  |4,25,26,27,28,29|
00020640  2c 33 30 2c 33 31 3a 62  75 74 74 6f 6e 66 69 65  |,30,31:buttonfie|
00020650  6c 64 25 28 63 68 61 72  25 2d 39 29 3d 49 25 0d  |ld%(char%-9)=I%.|
00020660  12 1a 36 20 20 20 20 20  20 c9 20 34 30 3a 52 66  |..6      . 40:Rf|
00020670  25 28 49 25 29 3d a4 63  72 65 61 74 65 5f 61 6e  |%(I%)=.create_an|
00020680  63 68 6f 72 28 22 50 69  63 74 75 72 65 22 2b c3  |chor("Picture"+.|
00020690  28 49 25 29 29 0d 12 1b  3f 20 20 20 20 20 20 c9  |(I%))...?      .|
000206a0  20 33 2c 36 2c 34 36 2c  34 37 2c 35 34 2c 35 36  | 3,6,46,47,54,56|
000206b0  2c 35 37 3a f2 69 63 6f  6e 5f 62 69 74 28 39 2c  |,57:.icon_bit(9,|
000206c0  6d 61 69 6e 57 25 2c 66  69 65 6c 64 25 28 49 25  |mainW%,field%(I%|
000206d0  29 2c a3 29 0d 12 1c 09  20 20 20 20 cb 0d 12 1d  |),.)....    ....|
000206e0  15 20 20 20 20 46 70 74  72 25 2b 3d 6c 65 6e 25  |.    Fptr%+=len%|
000206f0  2b 31 0d 12 1e 0a 20 20  ed 20 49 25 0d 12 1f 14  |+1....  . I%....|
00020700  20 20 f2 63 6c 6f 73 65  5f 66 69 6c 65 28 46 29  |  .close_file(F)|
00020710  0d 12 20 4f 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |.. O  .extend_na|
00020720  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
00020730  6b 28 66 6f 72 6d 61 6e  63 68 6f 72 25 2c 46 70  |k(formanchor%,Fp|
00020740  74 72 25 2d 21 66 6f 72  6d 61 6e 63 68 6f 72 25  |tr%-!formanchor%|
00020750  29 3a 66 6f 72 6d 5f 69  6e 63 73 25 2b 3d 31 0d  |):form_incs%+=1.|
00020760  12 21 17 20 20 f2 73 65  74 75 70 5f 73 65 6c 65  |.!.  .setup_sele|
00020770  63 74 28 4e 25 29 0d 12  22 0c 20 20 cc 20 4e 25  |ct(N%)..".  . N%|
00020780  3d 30 0d 12 23 05 cd 0d  12 24 2f e7 20 28 70 72  |=0..#....$/. (pr|
00020790  65 73 65 6e 74 25 20 80  20 34 29 3d 30 20 8c 20  |esent% . 4)=0 . |
000207a0  78 6c 69 6d 25 3d 31 32  37 39 3a 79 6c 69 6d 25  |xlim%=1279:ylim%|
000207b0  3d 2d 31 30 32 33 0d 12  25 1c 21 62 6c 6f 63 6b  |=-1023..%.!block|
000207c0  25 3d 30 3a 62 6c 6f 63  6b 25 21 34 3d 79 6c 69  |%=0:block%!4=yli|
000207d0  6d 25 0d 12 26 1e 62 6c  6f 63 6b 25 21 38 3d 78  |m%..&.block%!8=x|
000207e0  6c 69 6d 25 3a 62 6c 6f  63 6b 25 21 31 32 3d 30  |lim%:block%!12=0|
000207f0  0d 12 27 25 c8 99 20 22  57 69 6d 70 5f 53 65 74  |..'%.. "Wimp_Set|
00020800  45 78 74 65 6e 74 22 2c  6d 61 69 6e 57 25 2c 62  |Extent",mainW%,b|
00020810  6c 6f 63 6b 25 0d 12 28  12 21 62 6c 6f 63 6b 25  |lock%..(.!block%|
00020820  3d 6d 61 69 6e 57 25 0d  12 29 24 c8 99 20 22 57  |=mainW%..)$.. "W|
00020830  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
00020840  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 12 2a 0e 62  |te",,block%..*.b|
00020850  6c 6f 63 6b 25 21 34 3d  30 0d 12 2b 34 e7 20 79  |lock%!4=0..+4. y|
00020860  6c 69 6d 25 3e 2d 38 34  30 20 8c 20 62 6c 6f 63  |lim%>-840 . bloc|
00020870  6b 25 21 38 3d 39 30 30  2b 79 6c 69 6d 25 20 8b  |k%!8=900+ylim% .|
00020880  20 62 6c 6f 63 6b 25 21  38 3d 31 38 34 0d 12 2c  | block%!8=184..,|
00020890  33 e7 20 78 6c 69 6d 25  3c 31 32 34 30 20 8c 20  |3. xlim%<1240 . |
000208a0  62 6c 6f 63 6b 25 21 31  32 3d 78 6c 69 6d 25 20  |block%!12=xlim% |
000208b0  8b 20 62 6c 6f 63 6b 25  21 31 32 3d 31 32 34 30  |. block%!12=1240|
000208c0  0d 12 2d 11 62 6c 6f 63  6b 25 21 31 36 3d 39 30  |..-.block%!16=90|
000208d0  30 0d 12 2e 20 c8 99 20  22 57 69 6d 70 5f 4f 70  |0... .. "Wimp_Op|
000208e0  65 6e 57 69 6e 64 6f 77  22 2c 2c 62 6c 6f 63 6b  |enWindow",,block|
000208f0  25 0d 12 2f 07 3d 4e 25  0d 12 30 05 3a 0d 12 31  |%../.=N%..0.:..1|
00020900  1c dd 20 f2 73 65 74 75  70 5f 73 65 6c 65 63 74  |.. .setup_select|
00020910  28 66 69 65 6c 64 73 25  29 0d 12 32 1a ea 20 53  |(fields%)..2.. S|
00020920  24 2c 49 25 2c 4a 25 2c  46 70 74 72 25 2c 72 6f  |$,I%,J%,Fptr%,ro|
00020930  77 73 25 0d 12 33 26 73  65 6c 65 63 74 6c 65 6e  |ws%..3&selectlen|
00020940  25 3d 26 32 30 30 3a 73  65 6c 69 6e 63 25 3d 73  |%=&200:selinc%=s|
00020950  65 6c 65 63 74 6c 65 6e  25 0d 12 34 36 f2 63 72  |electlen%..46.cr|
00020960  65 61 74 65 5f 6e 61 6d  65 64 5f 73 6c 69 64 69  |eate_named_slidi|
00020970  6e 67 5f 62 6c 6f 63 6b  28 73 65 6c 61 6e 63 68  |ng_block(selanch|
00020980  6f 72 25 2c 73 65 6c 65  63 74 6c 65 6e 25 29 0d  |or%,selectlen%).|
00020990  12 35 15 46 70 74 72 25  3d 21 73 65 6c 61 6e 63  |.5.Fptr%=!selanc|
000209a0  68 6f 72 25 0d 12 36 14  e3 20 49 25 3d 31 20 b8  |hor%..6.. I%=1 .|
000209b0  20 66 69 65 6c 64 73 25  0d 12 37 2a 20 20 e7 20  | fields%..7*  . |
000209c0  46 70 74 72 25 2d 21 73  65 6c 61 6e 63 68 6f 72  |Fptr%-!selanchor|
000209d0  25 2b 31 34 34 3e 73 65  6c 65 63 74 6c 65 6e 25  |%+144>selectlen%|
000209e0  20 8c 0d 12 38 1b 20 20  20 20 73 65 6c 65 63 74  | ...8.    select|
000209f0  6c 65 6e 25 2b 3d 73 65  6c 69 6e 63 25 0d 12 39  |len%+=selinc%..9|
00020a00  3a 20 20 20 20 f2 65 78  74 65 6e 64 5f 6e 61 6d  |:    .extend_nam|
00020a10  65 64 5f 73 6c 69 64 69  6e 67 5f 62 6c 6f 63 6b  |ed_sliding_block|
00020a20  28 73 65 6c 61 6e 63 68  6f 72 25 2c 73 65 6c 65  |(selanchor%,sele|
00020a30  63 74 6c 65 6e 25 29 0d  12 3a 07 20 20 cd 0d 12  |ctlen%)..:.  ...|
00020a40  3b 18 20 20 c8 8e 20 63  68 61 72 74 79 70 65 25  |;.  .. chartype%|
00020a50  28 49 25 29 20 ca 0d 12  3c 1f 20 20 20 20 c9 20  |(I%) ...<.    . |
00020a60  33 2c 36 2c 38 2c 34 36  2c 34 37 2c 35 34 2c 35  |3,6,8,46,47,54,5|
00020a70  36 2c 35 37 3a 0d 12 3d  23 20 20 20 20 72 6f 77  |6,57:..=#    row|
00020a80  73 25 2b 3d 31 3a f2 6c  69 74 28 6d 65 6e 75 25  |s%+=1:.lit(menu%|
00020a90  28 36 29 2c 36 2c b9 29  0d 12 3e 57 20 20 20 20  |(6),6,.)..>W    |
00020aa0  68 61 6e 64 6c 65 25 3d  a4 63 72 65 61 74 65 5f  |handle%=.create_|
00020ab0  69 63 6f 6e 28 70 73 65  6c 65 63 74 57 25 2c 31  |icon(pselectW%,1|
00020ac0  36 2c 2d 72 6f 77 73 25  2a 34 38 2d 35 36 2c 32  |6,-rows%*48-56,2|
00020ad0  34 30 2c 34 38 2c 26 31  37 30 30 30 35 33 31 2c  |40,48,&17000531,|
00020ae0  22 22 2c 46 70 74 72 25  2c 2d 31 2c 31 35 29 0d  |"",Fptr%,-1,15).|
00020af0  12 3f 23 20 20 20 20 53  24 3d 24 a4 74 65 78 74  |.?#    S$=$.text|
00020b00  28 6d 61 69 6e 57 25 2c  64 65 73 63 25 28 49 25  |(mainW%,desc%(I%|
00020b10  29 29 0d 12 40 37 20 20  20 20 e7 20 a9 28 53 24  |))..@7    . .(S$|
00020b20  29 3e 38 20 8c 20 53 24  3d c0 53 24 2c 38 29 2b  |)>8 . S$=.S$,8)+|
00020b30  22 20 20 22 20 8b 20 53  24 2b 3d c4 31 30 2d a9  |"  " . S$+=.10-.|
00020b40  28 53 24 29 2c 22 20 22  29 0d 12 41 2d 20 20 20  |(S$)," ")..A-   |
00020b50  20 24 46 70 74 72 25 3d  53 24 2b 54 61 67 24 28  | $Fptr%=S$+Tag$(|
00020b60  49 25 29 3a 46 70 74 72  25 2b 3d a9 28 24 46 70  |I%):Fptr%+=.($Fp|
00020b70  74 72 25 29 2b 31 0d 12  42 12 20 20 20 20 e3 20  |tr%)+1..B.    . |
00020b80  4a 25 3d 30 20 b8 20 33  0d 12 43 62 20 20 20 20  |J%=0 . 3..Cb    |
00020b90  20 20 68 61 6e 64 6c 65  25 3d a4 63 72 65 61 74  |  handle%=.creat|
00020ba0  65 5f 69 63 6f 6e 28 70  73 65 6c 65 63 74 57 25  |e_icon(pselectW%|
00020bb0  2c 32 37 38 2b 4a 25 2a  31 31 32 2c 2d 72 6f 77  |,278+J%*112,-row|
00020bc0  73 25 2a 34 38 2d 35 32  2c 34 34 2c 34 34 2c 26  |s%*48-52,44,44,&|
00020bd0  30 37 34 30 42 31 33 42  2c 22 22 2c 46 70 74 72  |0740B13B,"",Fptr|
00020be0  25 2c 74 69 63 6b 25 2c  31 29 0d 12 44 1c 20 20  |%,tick%,1)..D.  |
00020bf0  20 20 20 20 24 46 70 74  72 25 3d 22 22 3a 46 70  |    $Fptr%="":Fp|
00020c00  74 72 25 2b 3d 31 0d 12  45 0c 20 20 20 20 ed 20  |tr%+=1..E.    . |
00020c10  4a 25 0d 12 46 19 20 20  20 20 63 61 6c 63 72 6f  |J%..F.    calcro|
00020c20  77 25 3f 49 25 3d 72 6f  77 73 25 0d 12 47 17 20  |w%?I%=rows%..G. |
00020c30  20 20 20 7f 3a 63 61 6c  63 72 6f 77 25 3f 49 25  |   .:calcrow%?I%|
00020c40  3d 30 0d 12 48 07 20 20  cb 0d 12 49 08 ed 20 49  |=0..H.  ...I.. I|
00020c50  25 0d 12 4a 23 21 62 6c  6f 63 6b 25 3d 30 3a 62  |%..J#!block%=0:b|
00020c60  6c 6f 63 6b 25 21 34 3d  2d 72 6f 77 73 25 2a 34  |lock%!4=-rows%*4|
00020c70  38 2d 35 36 0d 12 4b 1c  62 6c 6f 63 6b 25 21 38  |8-56..K.block%!8|
00020c80  3d 37 30 30 3a 62 6c 6f  63 6b 25 21 31 32 3d 30  |=700:block%!12=0|
00020c90  0d 12 4c 28 c8 99 20 22  57 69 6d 70 5f 53 65 74  |..L(.. "Wimp_Set|
00020ca0  45 78 74 65 6e 74 22 2c  70 73 65 6c 65 63 74 57  |Extent",pselectW|
00020cb0  25 2c 62 6c 6f 63 6b 25  0d 12 4d 05 e1 0d 12 4e  |%,block%..M....N|
00020cc0  05 3a 0d 12 4f 19 dd 20  f2 65 6e 61 62 6c 65 5f  |.:..O.. .enable_|
00020cd0  72 6f 77 28 52 25 2c 6f  6e 25 29 0d 12 50 08 ea  |row(R%,on%)..P..|
00020ce0  20 49 25 0d 12 51 0c e7  20 52 25 3e 30 20 8c 0d  | I%..Q.. R%>0 ..|
00020cf0  12 52 18 20 20 e3 20 49  25 3d 52 25 2a 35 2d 33  |.R.  . I%=R%*5-3|
00020d00  20 b8 20 52 25 2a 35 0d  12 53 26 20 20 20 20 f2  | . R%*5..S&    .|
00020d10  69 63 6f 6e 5f 62 69 74  28 32 32 2c 70 73 65 6c  |icon_bit(22,psel|
00020d20  65 63 74 57 25 2c 49 25  2c 6f 6e 25 29 0d 12 54  |ectW%,I%,on%)..T|
00020d30  0a 20 20 ed 20 49 25 0d  12 55 05 cd 0d 12 56 05  |.  . I%..U....V.|
00020d40  e1 0d 12 57 05 3a 0d 12  58 14 dd 20 f2 73 61 76  |...W.:..X.. .sav|
00020d50  65 5f 66 6f 72 6d 28 66  24 29 0d 12 59 2c ea 20  |e_form(f$)..Y,. |
00020d60  46 2c 49 25 2c 78 64 25  2c 79 64 25 2c 78 66 25  |F,I%,xd%,yd%,xf%|
00020d70  2c 79 66 25 2c 77 25 2c  68 25 2c 62 62 6f 78 25  |,yf%,w%,h%,bbox%|
00020d80  2c 74 79 70 65 25 0d 12  5a 13 e7 20 66 69 65 6c  |,type%..Z.. fiel|
00020d90  64 73 25 3d 30 20 8c 20  e1 0d 12 5b 0d 4c 65 6e  |ds%=0 . ...[.Len|
00020da0  67 74 68 25 3d 30 0d 12  5c 12 21 62 6c 6f 63 6b  |gth%=0..\.!block|
00020db0  25 3d 6d 61 69 6e 57 25  0d 12 5d 0b 46 3d ae 28  |%=mainW%..].F=.(|
00020dc0  66 24 29 0d 12 5e 0f f1  23 46 2c 66 69 65 6c 64  |f$)..^..#F,field|
00020dd0  73 25 0d 12 5f 14 e3 20  49 25 3d 31 20 b8 20 66  |s%.._.. I%=1 . f|
00020de0  69 65 6c 64 73 25 0d 12  60 28 20 20 64 69 63 6f  |ields%..`(  dico|
00020df0  6e 25 3d 64 65 73 63 25  28 49 25 29 3a 66 69 63  |n%=desc%(I%):fic|
00020e00  6f 6e 25 3d 66 69 65 6c  64 25 28 49 25 29 0d 12  |on%=field%(I%)..|
00020e10  61 34 20 20 62 6c 6f 63  6b 25 21 34 3d 64 69 63  |a4  block%!4=dic|
00020e20  6f 6e 25 3a c8 99 20 22  57 69 6d 70 5f 47 65 74  |on%:.. "Wimp_Get|
00020e30  49 63 6f 6e 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |IconState",,bloc|
00020e40  6b 25 0d 12 62 20 20 20  78 64 25 3d 62 6c 6f 63  |k%..b   xd%=bloc|
00020e50  6b 25 21 38 3a 79 64 25  3d 62 6c 6f 63 6b 25 21  |k%!8:yd%=block%!|
00020e60  31 32 0d 12 63 18 20 20  44 65 73 63 24 3d 24 28  |12..c.  Desc$=$(|
00020e70  62 6c 6f 63 6b 25 21 32  38 29 0d 12 64 34 20 20  |block%!28)..d4  |
00020e80  62 6c 6f 63 6b 25 21 34  3d 66 69 63 6f 6e 25 3a  |block%!4=ficon%:|
00020e90  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
00020ea0  53 74 61 74 65 22 2c 2c  62 6c 6f 63 6b 25 0d 12  |State",,block%..|
00020eb0  65 20 20 20 78 66 25 3d  62 6c 6f 63 6b 25 21 38  |e   xf%=block%!8|
00020ec0  3a 79 66 25 3d 62 6c 6f  63 6b 25 21 31 32 0d 12  |:yf%=block%!12..|
00020ed0  66 32 20 20 77 25 3d 62  6c 6f 63 6b 25 21 31 36  |f2  w%=block%!16|
00020ee0  2d 62 6c 6f 63 6b 25 21  38 3a 68 25 3d 62 6c 6f  |-block%!8:h%=blo|
00020ef0  63 6b 25 21 32 30 2d 62  6c 6f 63 6b 25 21 31 32  |ck%!20-block%!12|
00020f00  0d 12 67 17 20 20 62 62  6f 78 25 3d 28 68 25 3c  |..g.  bbox%=(h%<|
00020f10  3c 31 36 29 2b 77 25 0d  12 68 4e 20 20 f1 23 46  |<16)+w%..hN  .#F|
00020f20  2c 44 65 73 63 24 2c 54  61 67 24 28 49 25 29 2c  |,Desc$,Tag$(I%),|
00020f30  78 64 25 2c 79 64 25 2c  78 66 25 2c 79 66 25 2c  |xd%,yd%,xf%,yf%,|
00020f40  6c 65 6e 25 28 49 25 29  2c 63 68 61 72 74 79 70  |len%(I%),chartyp|
00020f50  65 25 28 49 25 29 2c 66  69 78 25 28 49 25 29 2c  |e%(I%),fix%(I%),|
00020f60  62 62 6f 78 25 0d 12 69  19 20 20 4c 65 6e 67 74  |bbox%..i.  Lengt|
00020f70  68 25 2b 3d 6c 65 6e 25  28 49 25 29 2b 31 0d 12  |h%+=len%(I%)+1..|
00020f80  6a 41 20 20 66 69 65 6c  64 24 28 49 25 29 3d 22  |jA  field$(I%)="|
00020f90  22 3a e7 20 52 66 25 28  49 25 29 3e 30 20 80 20  |":. Rf%(I%)>0 . |
00020fa0  63 68 61 72 74 79 70 65  25 28 49 25 29 3c 3e 34  |chartype%(I%)<>4|
00020fb0  30 20 8c 20 24 52 66 25  28 49 25 29 3d 22 22 0d  |0 . $Rf%(I%)="".|
00020fc0  12 6b 08 ed 20 49 25 0d  12 6c 12 f2 63 6c 6f 73  |.k.. I%..l..clos|
00020fd0  65 5f 66 69 6c 65 28 46  29 0d 12 6d 1b c8 99 20  |e_file(F)..m... |
00020fe0  22 4f 53 5f 46 69 6c 65  22 2c 31 38 2c 66 24 2c  |"OS_File",18,f$,|
00020ff0  26 37 66 32 0d 12 6e 16  f2 6c 69 74 28 6d 65 6e  |&7f2..n..lit(men|
00021000  75 25 28 30 29 2c 33 2c  b9 29 0d 12 6f 16 f2 6c  |u%(0),3,.)..o..l|
00021010  69 74 28 6d 65 6e 75 25  28 30 29 2c 34 2c b9 29  |it(menu%(0),4,.)|
00021020  0d 12 70 05 e1 0d 12 71  05 3a 0d 12 72 24 dd 20  |..p....q.:..r$. |
00021030  f2 6d 61 6b 65 5f 65 6d  70 74 79 5f 69 6e 64 65  |.make_empty_inde|
00021040  78 28 52 41 25 2c 6b 65  79 25 2c 5a 25 29 0d 12  |x(RA%,key%,Z%)..|
00021050  73 16 ea 20 49 25 2c 4b  25 2c 50 25 2c 4b 4c 4d  |s.. I%,K%,P%,KLM|
00021060  25 2c 53 24 0d 12 74 15  c8 99 20 22 48 6f 75 72  |%,S$..t... "Hour|
00021070  67 6c 61 73 73 5f 4f 6e  22 0d 12 75 16 53 24 3d  |glass_On"..u.S$=|
00021080  c4 4b 4c 25 28 6b 65 79  25 29 2c 22 2e 22 29 0d  |.KL%(key%),".").|
00021090  12 76 15 4b 4c 4d 25 3d  4b 4c 25 28 6b 65 79 25  |.v.KLM%=KL%(key%|
000210a0  29 2b 31 33 0d 12 77 1a  50 25 3d 4c 48 25 2b 34  |)+13..w.P%=LH%+4|
000210b0  38 2b 28 52 41 25 2b 31  29 2a 4b 4c 4d 25 0d 12  |8+(RA%+1)*KLM%..|
000210c0  78 3b e7 20 5a 25 20 8c  20 f2 63 72 65 61 74 65  |x;. Z% . .create|
000210d0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
000210e0  6c 6f 63 6b 28 6b 65 79  61 6e 63 68 6f 72 25 28  |lock(keyanchor%(|
000210f0  6b 65 79 25 29 2c 50 25  29 0d 12 79 1e 6b 65 79  |key%),P%)..y.key|
00021100  62 61 73 65 25 3d 21 6b  65 79 61 6e 63 68 6f 72  |base%=!keyanchor|
00021110  25 28 6b 65 79 25 29 0d  12 7a 12 6b 65 79 62 61  |%(key%)..z.keyba|
00021120  73 65 25 21 30 3d 31 33  38 0d 12 7b 1d 6b 65 79  |se%!0=138..{.key|
00021130  62 61 73 65 25 21 34 3d  bb 28 24 49 6e 63 72 65  |base%!4=.($Incre|
00021140  6d 65 6e 74 25 29 0d 12  7c 1f 24 64 61 74 65 25  |ment%)..|.$date%|
00021150  3d c4 36 2c bd 28 31 29  29 3a f2 64 61 74 65 28  |=.6,.(1)):.date(|
00021160  6b 65 79 25 29 0d 12 7d  1b 6b 65 79 62 61 73 65  |key%)..}.keybase|
00021170  25 21 36 32 3d 4b 46 25  28 6b 65 79 25 2c 30 29  |%!62=KF%(key%,0)|
00021180  0d 12 7e 1b 6b 65 79 62  61 73 65 25 21 36 36 3d  |..~.keybase%!66=|
00021190  4b 46 25 28 6b 65 79 25  2c 31 29 0d 12 7f 19 6b  |KF%(key%,1)....k|
000211a0  65 79 62 61 73 65 25 3f  37 30 3d 4b 4c 25 28 6b  |eybase%?70=KL%(k|
000211b0  65 79 25 29 0d 12 80 23  6b 65 79 62 61 73 65 25  |ey%)...#keybase%|
000211c0  3f 37 31 3d a4 73 65 6c  65 63 74 65 64 28 6b 65  |?71=.selected(ke|
000211d0  79 57 25 2c 32 30 29 0d  12 81 1f 6b 65 79 62 61  |yW%,20)....keyba|
000211e0  73 65 25 3f 37 32 3d 30  3a 6b 65 79 62 61 73 65  |se%?72=0:keybase|
000211f0  25 3f 37 33 3d 30 0d 12  82 0e e3 20 49 25 3d 30  |%?73=0..... I%=0|
00021200  20 b8 20 33 0d 12 83 28  20 20 21 28 6b 65 79 62  | . 3...(  !(keyb|
00021210  61 73 65 25 2b 37 34 2b  28 49 25 2a 34 29 29 3d  |ase%+74+(I%*4))=|
00021220  4b 57 25 28 6b 65 79 25  2c 49 25 29 0d 12 84 08  |KW%(key%,I%)....|
00021230  ed 20 49 25 0d 12 85 0e  e3 20 49 25 3d 30 20 b8  |. I%..... I%=0 .|
00021240  20 35 0d 12 86 11 20 20  50 25 3d 49 25 2a 38 2b  | 5....  P%=I%*8+|
00021250  4c 48 25 0d 12 87 18 20  20 21 28 6b 65 79 62 61  |LH%....  !(keyba|
00021260  73 65 25 2b 50 25 29 3d  2d 50 25 0d 12 88 19 20  |se%+P%)=-P%.... |
00021270  20 21 28 6b 65 79 62 61  73 65 25 2b 50 25 2b 34  | !(keybase%+P%+4|
00021280  29 3d 50 25 0d 12 89 08  ed 20 49 25 0d 12 8a 10  |)=P%..... I%....|
00021290  50 25 3d 21 6b 65 79 62  61 73 65 25 0d 12 8b 12  |P%=!keybase%....|
000212a0  e3 20 49 25 3d 30 20 b8  20 52 41 25 2d 31 0d 12  |. I%=0 . RA%-1..|
000212b0  8c 2e 20 20 c8 99 20 22  48 6f 75 72 67 6c 61 73  |..  .. "Hourglas|
000212c0  73 5f 50 65 72 63 65 6e  74 61 67 65 22 2c 28 49  |s_Percentage",(I|
000212d0  25 2a 31 30 30 29 20 81  20 52 41 25 0d 12 8d 1c  |%*100) . RA%....|
000212e0  20 20 21 28 6b 65 79 62  61 73 65 25 2b 50 25 29  |  !(keybase%+P%)|
000212f0  3d 50 25 2b 4b 4c 4d 25  0d 12 8e 18 20 20 21 28  |=P%+KLM%....  !(|
00021300  6b 65 79 62 61 73 65 25  2b 50 25 2b 34 29 3d 30  |keybase%+P%+4)=0|
00021310  0d 12 8f 19 20 20 24 28  6b 65 79 62 61 73 65 25  |....  $(keybase%|
00021320  2b 50 25 2b 38 29 3d 53  24 0d 12 90 23 20 20 21  |+P%+8)=S$...#  !|
00021330  28 6b 65 79 62 61 73 65  25 2b 50 25 2b 4b 4c 25  |(keybase%+P%+KL%|
00021340  28 6b 65 79 25 29 2b 39  29 3d 49 25 0d 12 91 0e  |(key%)+9)=I%....|
00021350  20 20 50 25 2b 3d 4b 4c  4d 25 0d 12 92 08 ed 20  |  P%+=KLM%..... |
00021360  49 25 0d 12 93 14 21 28  6b 65 79 62 61 73 65 25  |I%....!(keybase%|
00021370  2b 50 25 29 3d 30 0d 12  94 16 21 28 6b 65 79 62  |+P%)=0....!(keyb|
00021380  61 73 65 25 2b 50 25 2b  34 29 3d 30 0d 12 95 17  |ase%+P%+4)=0....|
00021390  24 28 6b 65 79 62 61 73  65 25 2b 50 25 2b 38 29  |$(keybase%+P%+8)|
000213a0  3d 53 24 0d 12 96 20 21  28 6b 65 79 62 61 73 65  |=S$... !(keybase|
000213b0  25 2b 50 25 2b 4b 4c 25  28 6b 65 79 25 29 2b 39  |%+P%+KL%(key%)+9|
000213c0  29 3d 30 0d 12 97 16 c8  99 20 22 48 6f 75 72 67  |)=0...... "Hourg|
000213d0  6c 61 73 73 5f 4f 66 66  22 0d 12 98 05 e1 0d 12  |lass_Off".......|
000213e0  99 05 3a 0d 12 9a 18 dd  20 f2 73 61 76 65 5f 72  |..:..... .save_r|
000213f0  65 63 73 28 66 24 2c 52  41 25 29 0d 12 9b 1d ea  |ecs(f$,RA%).....|
00021400  20 64 62 61 73 65 68 61  6e 64 6c 65 25 2c 49 25  | dbasehandle%,I%|
00021410  2c 4a 25 2c 72 65 63 24  0d 12 9c 1a 72 65 63 24  |,J%,rec$....rec$|
00021420  3d c4 66 69 65 6c 64 73  25 2d 31 2c bd 28 31 30  |=.fields%-1,.(10|
00021430  29 29 0d 12 9d 15 c8 99  20 22 48 6f 75 72 67 6c  |))...... "Hourgl|
00021440  61 73 73 5f 4f 6e 22 0d  12 9e 16 64 62 61 73 65  |ass_On"....dbase|
00021450  68 61 6e 64 6c 65 25 3d  ae 28 66 24 29 0d 12 9f  |handle%=.(f$)...|
00021460  10 e3 20 49 25 3d 30 20  b8 20 52 41 25 0d 12 a0  |.. I%=0 . RA%...|
00021470  1f 20 20 cf 23 64 62 61  73 65 68 61 6e 64 6c 65  |.  .#dbasehandle|
00021480  25 3d 49 25 2a 4c 65 6e  67 74 68 25 0d 12 a1 19  |%=I%*Length%....|
00021490  20 20 d5 23 64 62 61 73  65 68 61 6e 64 6c 65 25  |  .#dbasehandle%|
000214a0  2c 72 65 63 24 0d 12 a2  2e 20 20 c8 99 20 22 48  |,rec$....  .. "H|
000214b0  6f 75 72 67 6c 61 73 73  5f 50 65 72 63 65 6e 74  |ourglass_Percent|
000214c0  61 67 65 22 2c 28 49 25  2a 31 30 30 29 20 81 20  |age",(I%*100) . |
000214d0  52 41 25 0d 12 a3 08 ed  20 49 25 0d 12 a4 22 a2  |RA%..... I%...".|
000214e0  23 64 62 61 73 65 68 61  6e 64 6c 65 25 3d 28 52  |#dbasehandle%=(R|
000214f0  41 25 2b 31 29 2a 4c 65  6e 67 74 68 25 0d 12 a5  |A%+1)*Length%...|
00021500  1d f2 63 6c 6f 73 65 5f  66 69 6c 65 28 64 62 61  |..close_file(dba|
00021510  73 65 68 61 6e 64 6c 65  25 29 0d 12 a6 1b c8 99  |sehandle%)......|
00021520  20 22 4f 53 5f 46 69 6c  65 22 2c 31 38 2c 66 24  | "OS_File",18,f$|
00021530  2c 26 37 66 32 0d 12 a7  16 c8 99 20 22 48 6f 75  |,&7f2...... "Hou|
00021540  72 67 6c 61 73 73 5f 4f  66 66 22 0d 12 a8 05 e1  |rglass_Off".....|
00021550  0d 12 a9 05 3a 0d 12 aa  0c dd 20 f2 63 6c 65 61  |....:..... .clea|
00021560  72 0d 12 ab 1b ea 20 52  45 43 25 2c 61 63 74 69  |r..... REC%,acti|
00021570  6f 6e 24 2c 65 78 25 2c  70 74 72 25 0d 12 ac 38  |on$,ex%,ptr%...8|
00021580  53 65 61 72 63 68 24 3d  a4 70 61 72 73 65 28 24  |Search$=.parse($|
00021590  a4 74 65 78 74 28 6d 6f  76 65 57 25 2c 37 29 2c  |.text(moveW%,7),|
000215a0  a4 73 65 6c 65 63 74 65  64 28 6d 6f 76 65 57 25  |.selected(moveW%|
000215b0  2c 39 29 29 0d 12 ad 39  c8 99 20 22 57 69 6d 70  |,9))...9.. "Wimp|
000215c0  5f 57 68 69 63 68 49 63  6f 6e 22 2c 6d 6f 76 65  |_WhichIcon",move|
000215d0  57 25 2c 62 6c 6f 63 6b  25 2c 26 30 30 33 46 30  |W%,block%,&003F0|
000215e0  30 30 30 2c 26 30 30 32  31 30 30 30 30 0d 12 ae  |000,&00210000...|
000215f0  17 6d 6f 76 65 74 79 70  65 25 3d 21 62 6c 6f 63  |.movetype%=!bloc|
00021600  6b 25 2d 31 0d 12 af 29  50 25 3d a7 54 69 74 6c  |k%-1...)P%=.Titl|
00021610  65 24 2c 22 2e 20 22 29  2b 32 3a 54 69 74 6c 65  |e$,". ")+2:Title|
00021620  24 3d c1 54 69 74 6c 65  24 2c 50 25 29 0d 12 b0  |$=.Title$,P%)...|
00021630  48 e7 20 54 69 74 6c 65  24 3c 3e 22 41 6c 6c 20  |H. Title$<>"All |
00021640  72 65 63 6f 72 64 73 22  20 8c 20 54 69 74 6c 65  |records" . Title|
00021650  24 3d 22 20 77 68 65 6e  20 22 2b 54 69 74 6c 65  |$=" when "+Title|
00021660  24 20 8b 20 54 69 74 6c  65 24 3d 22 20 22 2b 54  |$ . Title$=" "+T|
00021670  69 74 6c 65 24 0d 12 b1  39 61 63 74 69 6f 6e 24  |itle$...9action$|
00021680  3d c1 22 4d 6f 76 65 20  88 44 65 6c 65 74 65 4d  |=."Move .DeleteM|
00021690  6f 76 65 20 89 22 2c 6d  6f 76 65 74 79 70 65 25  |ove .",movetype%|
000216a0  2a 36 2b 37 2c 36 29 2b  54 69 74 6c 65 24 0d 12  |*6+7,6)+Title$..|
000216b0  b2 1d e7 20 ac 20 a4 63  6f 6e 66 69 72 6d 28 61  |... . .confirm(a|
000216c0  63 74 69 6f 6e 24 29 20  8c 20 e1 0d 12 b3 15 c8  |ction$) . ......|
000216d0  99 20 22 48 6f 75 72 67  6c 61 73 73 5f 4f 6e 22  |. "Hourglass_On"|
000216e0  0d 12 b4 2a 64 62 61 73  65 68 61 6e 64 6c 65 25  |...*dbasehandle%|
000216f0  3d 8e 28 24 64 61 74 61  62 61 73 65 25 2b 22 2e  |=.($database%+".|
00021700  44 61 74 61 62 61 73 65  22 29 0d 12 b5 0c f2 65  |Database").....e|
00021710  61 72 6d 61 72 6b 0d 12  b6 1d f2 63 6c 6f 73 65  |armark.....close|
00021720  5f 66 69 6c 65 28 64 62  61 73 65 68 61 6e 64 6c  |_file(dbasehandl|
00021730  65 25 29 0d 12 b7 15 70  74 72 25 3d 21 74 65 6d  |e%)....ptr%=!tem|
00021740  70 61 6e 63 68 6f 72 25  0d 12 b8 25 73 75 62 74  |panchor%...%subt|
00021750  6f 74 61 6c 25 3d a4 63  6f 75 6e 74 5f 72 65 63  |otal%=.count_rec|
00021760  73 28 6b 65 79 25 2c 7a  65 72 6f 25 29 0d 12 b9  |s(key%,zero%)...|
00021770  14 e3 20 52 45 43 25 3d  30 20 b8 20 52 41 25 2d  |.. REC%=0 . RA%-|
00021780  31 0d 12 ba 3c 20 20 65  78 25 2b 3d 31 3a c8 99  |1...<  ex%+=1:..|
00021790  20 22 48 6f 75 72 67 6c  61 73 73 5f 50 65 72 63  | "Hourglass_Perc|
000217a0  65 6e 74 61 67 65 22 2c  28 65 78 25 2a 31 30 30  |entage",(ex%*100|
000217b0  29 20 81 20 73 75 62 74  6f 74 61 6c 25 0d 12 bb  |) . subtotal%...|
000217c0  17 20 20 e7 20 70 74 72  25 3f 52 45 43 25 3d 32  |.  . ptr%?REC%=2|
000217d0  35 35 20 8c 0d 12 bc 28  20 20 20 20 f2 72 65 61  |55 ....(    .rea|
000217e0  64 28 66 69 65 6c 64 73  25 2c b9 2c 52 45 43 25  |d(fields%,.,REC%|
000217f0  2c 24 64 61 74 61 62 61  73 65 25 29 0d 12 bd 25  |,$database%)...%|
00021800  20 20 20 20 61 64 64 72  3d a4 73 68 69 66 74 28  |    addr=.shift(|
00021810  6d 6f 76 65 74 79 70 65  25 2c 6b 65 79 25 2c 30  |movetype%,key%,0|
00021820  29 0d 12 be 07 20 20 cd  0d 12 bf 0a ed 20 52 45  |)....  ...... RE|
00021830  43 25 0d 12 c0 25 f2 73  63 72 61 70 5f 73 6c 69  |C%...%.scrap_sli|
00021840  64 69 6e 67 5f 62 6c 6f  63 6b 28 74 65 6d 70 61  |ding_block(tempa|
00021850  6e 63 68 6f 72 25 29 0d  12 c1 16 c8 99 20 22 48  |nchor%)...... "H|
00021860  6f 75 72 67 6c 61 73 73  5f 4f 66 66 22 0d 12 c2  |ourglass_Off"...|
00021870  1c c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |... "Wimp_Create|
00021880  4d 65 6e 75 22 2c 2c 2d  31 0d 12 c3 1c 61 64 64  |Menu",,-1....add|
00021890  72 3d a4 6d 6f 76 65 74  6f 28 6b 65 79 25 2c 74  |r=.moveto(key%,t|
000218a0  6f 70 2c 31 29 0d 12 c4  05 e1 0d 12 c5 05 3a 0d  |op,1).........:.|
000218b0  12 c6 18 dd 20 f2 65 78  70 6f 72 74 5f 73 75 62  |.... .export_sub|
000218c0  73 65 74 28 66 24 29 0d  12 c7 4d ea 20 49 25 2c  |set(f$)...M. I%,|
000218d0  46 2c 52 25 2c 72 65 63  73 25 2c 70 74 72 25 2c  |F,R%,recs%,ptr%,|
000218e0  63 6f 75 6e 74 25 2c 73  75 62 74 6f 74 61 6c 25  |count%,subtotal%|
000218f0  2c 62 6c 6f 62 73 25 2c  65 78 25 2c 5a 25 2c 6c  |,blobs%,ex%,Z%,l|
00021900  65 6e 25 2c 73 6f 75 72  63 65 24 2c 64 65 73 74  |en%,source$,dest|
00021910  24 2c 4f 24 0d 12 c8 3b  c8 99 20 22 4f 53 5f 43  |$,O$...;.. "OS_C|
00021920  4c 49 22 2c 22 43 6f 70  79 20 22 2b 24 64 61 74  |LI","Copy "+$dat|
00021930  61 62 61 73 65 25 2b 22  2e 46 6f 72 6d 20 22 2b  |abase%+".Form "+|
00021940  66 24 2b 22 2e 46 6f 72  6d 20 7e 43 7e 56 22 0d  |f$+".Form ~C~V".|
00021950  12 c9 51 e7 20 6c 69 6e  6b 24 28 30 29 3d 22 4c  |..Q. link$(0)="L|
00021960  4f 41 44 45 44 22 20 8c  20 c8 99 20 22 4f 53 5f  |OADED" . .. "OS_|
00021970  43 4c 49 22 2c 22 43 6f  70 79 20 22 2b 24 64 61  |CLI","Copy "+$da|
00021980  74 61 62 61 73 65 25 2b  22 2e 4c 69 6e 6b 20 22  |tabase%+".Link "|
00021990  2b 66 24 2b 22 2e 4c 69  6e 6b 20 7e 43 7e 56 22  |+f$+".Link ~C~V"|
000219a0  0d 12 ca 51 e7 20 63 61  6c 63 24 28 30 29 3d 22  |...Q. calc$(0)="|
000219b0  4c 4f 41 44 45 44 22 20  8c 20 c8 99 20 22 4f 53  |LOADED" . .. "OS|
000219c0  5f 43 4c 49 22 2c 22 43  6f 70 79 20 22 2b 24 64  |_CLI","Copy "+$d|
000219d0  61 74 61 62 61 73 65 25  2b 22 2e 43 61 6c 63 20  |atabase%+".Calc |
000219e0  22 2b 66 24 2b 22 2e 43  61 6c 63 20 7e 43 7e 56  |"+f$+".Calc ~C~V|
000219f0  22 0d 12 cb 46 c8 99 20  22 4f 53 5f 43 4c 49 22  |"...F.. "OS_CLI"|
00021a00  2c 22 43 6f 70 79 20 22  2b 24 64 61 74 61 62 61  |,"Copy "+$databa|
00021a10  73 65 25 2b 22 2e 56 61  6c 54 61 62 6c 65 73 20  |se%+".ValTables |
00021a20  22 2b 66 24 2b 22 2e 56  61 6c 74 61 62 6c 65 73  |"+f$+".Valtables|
00021a30  20 7e 43 7e 56 52 22 0d  12 cc 42 c8 99 20 22 4f  | ~C~VR"...B.. "O|
00021a40  53 5f 43 4c 49 22 2c 22  43 6f 70 79 20 22 2b 24  |S_CLI","Copy "+$|
00021a50  64 61 74 61 62 61 73 65  25 2b 22 2e 43 6f 6c 6f  |database%+".Colo|
00021a60  75 72 73 20 22 2b 66 24  2b 22 2e 43 6f 6c 6f 75  |urs "+f$+".Colou|
00021a70  72 73 20 7e 43 46 7e 56  22 0d 12 cd 2f c8 99 20  |rs ~CF~V".../.. |
00021a80  22 4f 53 5f 46 69 6c 65  22 2c 35 2c 24 64 61 74  |"OS_File",5,$dat|
00021a90  61 62 61 73 65 25 2b 22  2e 55 73 65 72 46 75 6e  |abase%+".UserFun|
00021aa0  63 73 22 20 b8 20 64 25  0d 12 ce 4f e7 20 64 25  |cs" . d%...O. d%|
00021ab0  3d 31 20 8c 20 c8 99 20  22 4f 53 5f 43 4c 49 22  |=1 . .. "OS_CLI"|
00021ac0  2c 22 43 6f 70 79 20 22  2b 24 64 61 74 61 62 61  |,"Copy "+$databa|
00021ad0  73 65 25 2b 22 2e 55 73  65 72 46 75 6e 63 73 20  |se%+".UserFuncs |
00021ae0  22 2b 66 24 2b 22 2e 55  73 65 72 46 75 6e 63 73  |"+f$+".UserFuncs|
00021af0  20 7e 43 46 7e 56 22 0d  12 cf 30 c8 99 20 22 4f  | ~CF~V"...0.. "O|
00021b00  53 5f 46 69 6c 65 22 2c  35 2c 24 64 61 74 61 62  |S_File",5,$datab|
00021b10  61 73 65 25 2b 22 2e 55  73 72 53 70 72 69 74 65  |ase%+".UsrSprite|
00021b20  73 22 20 b8 20 64 25 0d  12 d0 51 e7 20 64 25 3d  |s" . d%...Q. d%=|
00021b30  31 20 8c 20 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |1 . .. "OS_CLI",|
00021b40  22 43 6f 70 79 20 22 2b  24 64 61 74 61 62 61 73  |"Copy "+$databas|
00021b50  65 25 2b 22 2e 55 73 72  53 70 72 69 74 65 73 20  |e%+".UsrSprites |
00021b60  22 2b 66 24 2b 22 2e 55  73 72 53 70 72 69 74 65  |"+f$+".UsrSprite|
00021b70  73 20 7e 43 46 7e 56 22  0d 12 d1 15 c8 99 20 22  |s ~CF~V"...... "|
00021b80  48 6f 75 72 67 6c 61 73  73 5f 4f 6e 22 0d 12 d2  |Hourglass_On"...|
00021b90  22 62 6c 6f 62 73 25 3d  a4 66 69 6e 64 5f 62 6c  |"blobs%=.find_bl|
00021ba0  6f 62 73 28 24 64 61 74  61 62 61 73 65 25 29 0d  |obs($database%).|
00021bb0  12 d3 3e 53 65 61 72 63  68 24 3d a4 70 61 72 73  |..>Search$=.pars|
00021bc0  65 28 24 a4 74 65 78 74  28 73 61 76 65 73 75 62  |e($.text(savesub|
00021bd0  57 25 2c 30 29 2c a4 73  65 6c 65 63 74 65 64 28  |W%,0),.selected(|
00021be0  73 61 76 65 73 75 62 57  25 2c 35 29 29 0d 12 d4  |savesubW%,5))...|
00021bf0  2a 64 62 61 73 65 68 61  6e 64 6c 65 25 3d 8e 28  |*dbasehandle%=.(|
00021c00  24 64 61 74 61 62 61 73  65 25 2b 22 2e 44 61 74  |$database%+".Dat|
00021c10  61 62 61 73 65 22 29 0d  12 d5 0c f2 65 61 72 6d  |abase").....earm|
00021c20  61 72 6b 0d 12 d6 17 46  3d ae 28 66 24 2b 22 2e  |ark....F=.(f$+".|
00021c30  44 61 74 61 62 61 73 65  22 29 0d 12 d7 15 70 74  |Database")....pt|
00021c40  72 25 3d 21 74 65 6d 70  61 6e 63 68 6f 72 25 0d  |r%=!tempanchor%.|
00021c50  12 d8 25 73 75 62 74 6f  74 61 6c 25 3d a4 63 6f  |..%subtotal%=.co|
00021c60  75 6e 74 5f 72 65 63 73  28 6b 65 79 25 2c 7a 65  |unt_recs(key%,ze|
00021c70  72 6f 25 29 0d 12 d9 12  e3 20 49 25 3d 30 20 b8  |ro%)..... I%=0 .|
00021c80  20 52 41 25 2d 31 0d 12  da 15 20 20 e7 20 70 74  | RA%-1....  . pt|
00021c90  72 25 3f 49 25 3d 32 35  35 20 8c 0d 12 db 0e 20  |r%?I%=255 ..... |
00021ca0  20 20 20 65 78 25 3d 2d  31 0d 12 dc 15 20 20 20  |   ex%=-1....   |
00021cb0  20 c8 95 20 65 78 25 3c  62 6c 6f 62 73 25 0d 12  | .. ex%<blobs%..|
00021cc0  dd 1d 20 20 20 20 20 20  65 78 25 2b 3d 31 3a 46  |..      ex%+=1:F|
00021cd0  25 3d 45 78 74 25 28 65  78 25 29 0d 12 de 40 20  |%=Ext%(ex%)...@ |
00021ce0  20 20 20 20 20 f2 63 6f  70 79 5f 62 6c 6f 62 28  |     .copy_blob(|
00021cf0  24 64 61 74 61 62 61 73  65 25 2c 66 24 2c 49 25  |$database%,f$,I%|
00021d00  2c 72 65 63 73 25 2c 46  25 2c 46 25 2c 63 68 61  |,recs%,F%,F%,cha|
00021d10  72 74 79 70 65 25 28 46  25 29 29 0d 12 df 09 20  |rtype%(F%)).... |
00021d20  20 20 20 ce 0d 12 e0 3c  20 20 20 20 f2 72 65 61  |   ....<    .rea|
00021d30  64 73 6d 61 72 72 61 79  28 64 62 61 73 65 68 61  |dsmarray(dbaseha|
00021d40  6e 64 6c 65 25 2c 49 25  29 3a f2 77 72 69 74 65  |ndle%,I%):.write|
00021d50  73 6d 61 72 72 61 79 28  46 2c 72 65 63 73 25 29  |smarray(F,recs%)|
00021d60  0d 12 e1 11 20 20 20 20  63 6f 75 6e 74 25 2b 3d  |....    count%+=|
00021d70  31 0d 12 e2 3a 20 20 20  20 c8 99 20 22 48 6f 75  |1...:    .. "Hou|
00021d80  72 67 6c 61 73 73 5f 50  65 72 63 65 6e 74 61 67  |rglass_Percentag|
00021d90  65 22 2c 28 63 6f 75 6e  74 25 2a 31 30 30 29 20  |e",(count%*100) |
00021da0  81 20 73 75 62 74 6f 74  61 6c 25 0d 12 e3 07 20  |. subtotal%.... |
00021db0  20 cd 0d 12 e4 08 ed 20  49 25 0d 12 e5 25 f2 73  | ...... I%...%.s|
00021dc0  63 72 61 70 5f 73 6c 69  64 69 6e 67 5f 62 6c 6f  |crap_sliding_blo|
00021dd0  63 6b 28 74 65 6d 70 61  6e 63 68 6f 72 25 29 0d  |ck(tempanchor%).|
00021de0  12 e6 3d 46 24 28 29 3d  22 22 3a f2 77 72 69 74  |..=F$()="":.writ|
00021df0  65 73 6d 61 72 72 61 79  28 46 2c 72 65 63 73 25  |esmarray(F,recs%|
00021e00  29 3a a2 23 46 3d 4c 65  6e 67 74 68 25 2a 72 65  |):.#F=Length%*re|
00021e10  63 73 25 3a 72 65 63 73  25 2d 3d 31 0d 12 e7 12  |cs%:recs%-=1....|
00021e20  e3 20 4b 25 3d 30 20 b8  20 4b 65 79 73 25 0d 12  |. K%=0 . Keys%..|
00021e30  e8 2c 20 20 4b 4c 25 28  4d 61 78 4b 65 79 73 25  |.,  KL%(MaxKeys%|
00021e40  2b 31 29 3d 4b 4c 25 28  4b 25 29 3a 76 61 6c 24  |+1)=KL%(K%):val$|
00021e50  3d a4 74 79 70 65 28 4b  25 29 0d 12 e9 21 20 20  |=.type(K%)...!  |
00021e60  4b 46 25 28 4d 61 78 4b  65 79 73 25 2b 31 2c 30  |KF%(MaxKeys%+1,0|
00021e70  29 3d 4b 46 25 28 4b 25  2c 30 29 0d 12 ea 21 20  |)=KF%(K%,0)...! |
00021e80  20 4b 46 25 28 4d 61 78  4b 65 79 73 25 2b 31 2c  | KF%(MaxKeys%+1,|
00021e90  31 29 3d 4b 46 25 28 4b  25 2c 31 29 0d 12 eb 10  |1)=KF%(K%,1)....|
00021ea0  20 20 e3 20 49 25 3d 30  20 b8 20 33 0d 12 ec 25  |  . I%=0 . 3...%|
00021eb0  20 20 20 20 4b 57 25 28  4d 61 78 4b 65 79 73 25  |    KW%(MaxKeys%|
00021ec0  2b 31 2c 49 25 29 3d 4b  57 25 28 4b 25 2c 49 25  |+1,I%)=KW%(K%,I%|
00021ed0  29 0d 12 ed 0a 20 20 ed  20 49 25 0d 12 ee 2b 20  |)....  . I%...+ |
00021ee0  20 f2 6d 61 6b 65 5f 65  6d 70 74 79 5f 69 6e 64  | .make_empty_ind|
00021ef0  65 78 28 72 65 63 73 25  2c 4d 61 78 4b 65 79 73  |ex(recs%,MaxKeys|
00021f00  25 2b 31 2c b9 29 0d 12  ef 16 20 20 e3 20 49 25  |%+1,.)....  . I%|
00021f10  3d 30 20 b8 20 72 65 63  73 25 2d 31 0d 12 f0 1a  |=0 . recs%-1....|
00021f20  20 20 20 20 f2 72 65 61  64 73 6d 61 72 72 61 79  |    .readsmarray|
00021f30  28 46 2c 49 25 29 0d 12  f1 18 20 20 20 20 4b 45  |(F,I%)....    KE|
00021f40  59 24 3d a4 6b 65 79 32  28 4b 25 2c 31 29 0d 12  |Y$=.key2(K%,1)..|
00021f50  f2 22 20 20 20 20 f2 69  6e 73 65 72 74 28 b9 2c  |."    .insert(.,|
00021f60  4b 45 59 24 2c 4d 61 78  4b 65 79 73 25 2b 31 29  |KEY$,MaxKeys%+1)|
00021f70  0d 12 f3 32 20 20 20 20  c8 99 20 22 48 6f 75 72  |...2    .. "Hour|
00021f80  67 6c 61 73 73 5f 50 65  72 63 65 6e 74 61 67 65  |glass_Percentage|
00021f90  22 2c 28 49 25 2a 31 30  30 29 20 81 20 72 65 63  |",(I%*100) . rec|
00021fa0  73 25 0d 12 f4 0a 20 20  ed 20 49 25 0d 12 f5 26  |s%....  . I%...&|
00021fb0  20 20 6b 65 79 62 61 73  65 25 3d 21 6b 65 79 61  |  keybase%=!keya|
00021fc0  6e 63 68 6f 72 25 28 4d  61 78 4b 65 79 73 25 2b  |nchor%(MaxKeys%+|
00021fd0  31 29 0d 12 f6 5c 20 20  c8 99 20 22 53 6c 69 64  |1)...\  .. "Slid|
00021fe0  69 6e 67 48 65 61 70 5f  44 65 73 63 72 69 62 65  |ingHeap_Describe|
00021ff0  42 6c 6f 63 6b 22 2c 73  6c 69 64 69 6e 67 68 65  |Block",slidinghe|
00022000  61 70 62 61 73 65 25 2c  6b 65 79 61 6e 63 68 6f  |apbase%,keyancho|
00022010  72 25 28 4d 61 78 4b 65  79 73 25 2b 31 29 20 b8  |r%(MaxKeys%+1) .|
00022020  20 2c 2c 66 69 6c 65 6c  65 6e 67 74 68 25 0d 12  | ,,filelength%..|
00022030  f7 2c 20 20 e7 20 4b 25  3e 30 20 8c 20 69 6e 64  |.,  . K%>0 . ind|
00022040  65 78 24 3d 22 49 6e 64  69 63 65 73 2e 22 20 8b  |ex$="Indices." .|
00022050  20 69 6e 64 65 78 24 3d  22 22 0d 12 f8 52 20 20  | index$=""...R  |
00022060  c8 99 20 22 4f 53 5f 46  69 6c 65 22 2c 31 30 2c  |.. "OS_File",10,|
00022070  66 24 2b 22 2e 22 2b 69  6e 64 65 78 24 2b 49 6e  |f$+"."+index$+In|
00022080  64 65 78 24 28 4b 25 29  2c 26 37 66 30 2c 2c 6b  |dex$(K%),&7f0,,k|
00022090  65 79 62 61 73 65 25 2c  6b 65 79 62 61 73 65 25  |eybase%,keybase%|
000220a0  2b 66 69 6c 65 6c 65 6e  67 74 68 25 0d 12 f9 32  |+filelength%...2|
000220b0  20 20 f2 73 63 72 61 70  5f 73 6c 69 64 69 6e 67  |  .scrap_sliding|
000220c0  5f 62 6c 6f 63 6b 28 6b  65 79 61 6e 63 68 6f 72  |_block(keyanchor|
000220d0  25 28 4d 61 78 4b 65 79  73 25 2b 31 29 29 0d 12  |%(MaxKeys%+1))..|
000220e0  fa 08 ed 20 4b 25 0d 12  fb 12 f2 63 6c 6f 73 65  |... K%.....close|
000220f0  5f 66 69 6c 65 28 46 29  0d 12 fc 1d f2 63 6c 6f  |_file(F).....clo|
00022100  73 65 5f 66 69 6c 65 28  64 62 61 73 65 68 61 6e  |se_file(dbasehan|
00022110  64 6c 65 25 29 0d 12 fd  27 c8 99 20 22 4f 53 5f  |dle%)...'.. "OS_|
00022120  46 69 6c 65 22 2c 31 38  2c 66 24 2b 22 2e 44 61  |File",18,f$+".Da|
00022130  74 61 62 61 73 65 22 2c  26 37 66 32 0d 12 fe 0d  |tabase",&7f2....|
00022140  65 78 70 6f 72 74 25 3d  a3 0d 12 ff 16 c8 99 20  |export%=....... |
00022150  22 48 6f 75 72 67 6c 61  73 73 5f 4f 66 66 22 0d  |"Hourglass_Off".|
00022160  13 00 05 e1 0d 13 01 05  3a 0d 13 02 15 dd 20 a4  |........:..... .|
00022170  66 69 6e 64 5f 62 6c 6f  62 73 28 66 24 29 0d 13  |find_blobs(f$)..|
00022180  03 0f ea 20 4e 25 2c 52  34 25 2c 53 24 0d 13 04  |... N%,R4%,S$...|
00022190  09 4e 25 3d 2d 31 0d 13  05 0e c8 95 20 52 34 25  |.N%=-1...... R4%|
000221a0  3c 3e 2d 31 0d 13 06 33  20 20 c8 99 20 22 4f 53  |<>-1...3  .. "OS|
000221b0  5f 47 42 50 42 22 2c 39  2c 66 24 2c 62 6c 6f 63  |_GBPB",9,f$,bloc|
000221c0  6b 25 2c 31 2c 52 34 25  2c 31 31 20 b8 20 2c 2c  |k%,1,R4%,11 . ,,|
000221d0  53 24 2c 2c 52 34 25 0d  13 07 11 20 20 c8 8e 20  |S$,,R4%....  .. |
000221e0  c0 53 24 2c 34 29 20 ca  0d 13 08 29 20 20 20 20  |.S$,4) ....)    |
000221f0  c9 20 22 4d 65 6d 6f 22  3a 4e 25 2b 3d 31 3a 45  |. "Memo":N%+=1:E|
00022200  78 74 25 28 4e 25 29 3d  bb 28 c1 53 24 2c 35 29  |xt%(N%)=.(.S$,5)|
00022210  29 0d 13 09 29 20 20 20  20 c9 20 22 44 72 61 77  |)...)    . "Draw|
00022220  22 3a 4e 25 2b 3d 31 3a  45 78 74 25 28 4e 25 29  |":N%+=1:Ext%(N%)|
00022230  3d bb 28 c1 53 24 2c 35  29 29 0d 13 0a 29 20 20  |=.(.S$,5))...)  |
00022240  20 20 c9 20 22 53 70 72  69 22 3a 4e 25 2b 3d 31  |  . "Spri":N%+=1|
00022250  3a 45 78 74 25 28 4e 25  29 3d bb 28 c1 53 24 2c  |:Ext%(N%)=.(.S$,|
00022260  37 29 29 0d 13 0b 07 20  20 cb 0d 13 0c 05 ce 0d  |7))....  .......|
00022270  13 0d 07 3d 4e 25 0d 13  0e 05 3a 0d 13 0f 0e dd  |...=N%....:.....|
00022280  20 f2 65 61 72 6d 61 72  6b 0d 13 10 0b ea 20 49  | .earmark..... I|
00022290  25 2c 50 25 0d 13 11 35  e7 20 74 65 6d 70 61 6e  |%,P%...5. tempan|
000222a0  63 68 6f 72 25 20 8c 20  f2 73 63 72 61 70 5f 73  |chor% . .scrap_s|
000222b0  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 74 65 6d  |liding_block(tem|
000222c0  70 61 6e 63 68 6f 72 25  29 0d 13 12 30 f2 63 72  |panchor%)...0.cr|
000222d0  65 61 74 65 5f 6e 61 6d  65 64 5f 73 6c 69 64 69  |eate_named_slidi|
000222e0  6e 67 5f 62 6c 6f 63 6b  28 74 65 6d 70 61 6e 63  |ng_block(tempanc|
000222f0  68 6f 72 25 2c 52 41 25  29 0d 13 13 15 70 74 72  |hor%,RA%)....ptr|
00022300  25 3d 21 74 65 6d 70 61  6e 63 68 6f 72 25 0d 13  |%=!tempanchor%..|
00022310  14 12 e3 20 49 25 3d 30  20 b8 20 52 41 25 2d 31  |... I%=0 . RA%-1|
00022320  0d 13 15 0f 20 20 70 74  72 25 3f 49 25 3d 30 0d  |....  ptr%?I%=0.|
00022330  13 16 08 ed 20 49 25 0d  13 17 1d 50 25 3d a4 6e  |.... I%....P%=.n|
00022340  65 69 67 68 62 6f 75 72  28 6b 65 79 25 2c 74 6f  |eighbour(key%,to|
00022350  70 2c 31 29 0d 13 18 20  f2 73 63 61 6e 5f 66 69  |p,1)... .scan_fi|
00022360  6c 65 28 22 50 25 3c 3e  74 6f 70 22 2c 6b 65 79  |le("P%<>top",key|
00022370  25 2c 32 29 0d 13 19 05  e1 0d 13 1a 05 3a 0d 13  |%,2).........:..|
00022380  1b 0d dd 20 f2 72 6f 74  61 74 65 0d 13 1c 13 e7  |... .rotate.....|
00022390  20 ac 20 41 63 63 65 73  73 25 20 8c 20 e1 0d 13  | . Access% . ...|
000223a0  1d 1e e7 20 a4 63 6f 6e  66 69 72 6d 28 a4 6d 73  |... .confirm(.ms|
000223b0  67 28 34 39 29 29 3d a3  20 8c 20 e1 0d 13 1e 0e  |g(49))=. . .....|
000223c0  ea 20 6b 65 79 62 61 73  65 25 0d 13 1f 1c ea 20  |. keybase%..... |
000223d0  49 25 2c 4c 25 2c 5a 25  2c 51 25 2c 52 25 2c 53  |I%,L%,Z%,Q%,R%,S|
000223e0  25 2c 6b 65 79 25 0d 13  20 14 e3 20 6b 65 79 25  |%,key%.. .. key%|
000223f0  3d 30 20 b8 20 4b 65 79  73 25 0d 13 21 20 20 20  |=0 . Keys%..!   |
00022400  6b 65 79 62 61 73 65 25  3d 21 6b 65 79 61 6e 63  |keybase%=!keyanc|
00022410  68 6f 72 25 28 6b 65 79  25 29 0d 13 22 0f 20 20  |hor%(key%)..".  |
00022420  53 25 3d 4c 48 25 2b 34  30 0d 13 23 14 20 20 5a  |S%=LH%+40..#.  Z|
00022430  25 3d 6b 65 79 62 61 73  65 25 21 53 25 0d 13 24  |%=keybase%!S%..$|
00022440  1b 20 20 e3 20 49 25 3d  53 25 2d 38 20 b8 20 53  |.  . I%=S%-8 . S|
00022450  25 2d 34 30 20 88 2d 38  0d 13 25 29 20 20 20 20  |%-40 .-8..%)    |
00022460  4c 25 3d 6b 65 79 62 61  73 65 25 21 49 25 3a 52  |L%=keybase%!I%:R|
00022470  25 3d 6b 65 79 62 61 73  65 25 21 28 49 25 2b 34  |%=keybase%!(I%+4|
00022480  29 0d 13 26 3d 20 20 20  20 e7 20 4c 25 3e 30 20  |)..&=    . L%>0 |
00022490  8c 20 6b 65 79 62 61 73  65 25 21 28 49 25 2b 38  |. keybase%!(I%+8|
000224a0  29 3d 4c 25 20 8b 20 6b  65 79 62 61 73 65 25 21  |)=L% . keybase%!|
000224b0  28 49 25 2b 38 29 3d 2d  28 49 25 2b 38 29 0d 13  |(I%+8)=-(I%+8)..|
000224c0  27 0a 20 20 ed 20 49 25  0d 13 28 3e 20 20 e7 20  |'.  . I%..(>  . |
000224d0  5a 25 3e 30 20 8c 20 6b  65 79 62 61 73 65 25 21  |Z%>0 . keybase%!|
000224e0  28 53 25 2d 34 30 29 3d  5a 25 20 8b 20 6b 65 79  |(S%-40)=Z% . key|
000224f0  62 61 73 65 25 21 28 53  25 2d 34 30 29 3d 2d 28  |base%!(S%-40)=-(|
00022500  53 25 2d 34 30 29 0d 13  29 19 20 20 e3 20 49 25  |S%-40)..).  . I%|
00022510  3d 53 25 2d 34 30 20 b8  20 53 25 20 88 20 38 0d  |=S%-40 . S% . 8.|
00022520  13 2a 0f 20 20 20 20 51  25 3d 49 25 2d 38 0d 13  |.*.    Q%=I%-8..|
00022530  2b 1a 20 20 20 20 e7 20  51 25 3d 53 25 2d 34 38  |+.    . Q%=S%-48|
00022540  20 8c 20 51 25 3d 53 25  0d 13 2c 21 20 20 20 20  | . Q%=S%..,!    |
00022550  50 52 25 3d a4 6e 65 69  67 68 62 6f 75 72 28 6b  |PR%=.neighbour(k|
00022560  65 79 25 2c 49 25 2c 30  29 0d 13 2d 21 20 20 20  |ey%,I%,0)..-!   |
00022570  20 53 55 25 3d a4 6e 65  69 67 68 62 6f 75 72 28  | SU%=.neighbour(|
00022580  6b 65 79 25 2c 49 25 2c  31 29 0d 13 2e 27 20 20  |key%,I%,1)...'  |
00022590  20 20 e7 20 50 52 25 3e  53 25 20 8c 20 6b 65 79  |  . PR%>S% . key|
000225a0  62 61 73 65 25 21 28 50  52 25 2b 34 29 3d 2d 49  |base%!(PR%+4)=-I|
000225b0  25 0d 13 2f 23 20 20 20  20 e7 20 53 55 25 3e 53  |%../#    . SU%>S|
000225c0  25 20 8c 20 6b 65 79 62  61 73 65 25 21 53 55 25  |% . keybase%!SU%|
000225d0  3d 2d 49 25 0d 13 30 0a  20 20 ed 20 49 25 0d 13  |=-I%..0.  . I%..|
000225e0  31 0a ed 20 6b 65 79 25  0d 13 32 13 24 64 61 74  |1.. key%..2.$dat|
000225f0  65 25 3d c4 36 2c bd 28  31 29 29 0d 13 33 0b 77  |e%=.6,.(1))..3.w|
00022600  61 72 6e 25 3d b9 0d 13  34 05 e1 0d 13 35 05 3a  |arn%=...4....5.:|
00022610  0d 13 36 13 dd 20 f2 63  72 65 61 74 65 5f 69 6e  |..6.. .create_in|
00022620  64 65 78 0d 13 37 1f e7  20 69 6e 64 65 78 69 6e  |dex..7.. indexin|
00022630  67 25 20 84 20 70 72 69  6e 74 69 6e 67 25 20 8c  |g% . printing% .|
00022640  20 e1 0d 13 38 30 e7 20  4b 65 79 73 25 3d 4d 61  | ...80. Keys%=Ma|
00022650  78 4b 65 79 73 25 20 8c  20 f2 73 6f 66 74 65 72  |xKeys% . .softer|
00022660  72 6f 72 28 c3 28 4b 65  79 73 25 29 2c 39 35 29  |ror(.(Keys%),95)|
00022670  3a e1 0d 13 39 37 ea 20  66 69 6c 65 25 2c 74 6f  |:...97. file%,to|
00022680  70 2c 50 25 2c 4b 45 59  24 2c 52 45 43 25 2c 76  |p,P%,KEY$,REC%,v|
00022690  61 6c 24 2c 7a 65 72 6f  25 2c 61 62 6f 72 74 25  |al$,zero%,abort%|
000226a0  2c 72 65 70 6c 61 63 65  25 0d 13 3a 0d 6e 65 77  |,replace%..:.new|
000226b0  6b 65 79 25 3d 30 0d 13  3b 3b 66 24 3d 54 61 67  |key%=0..;;f$=Tag|
000226c0  24 28 4b 65 79 66 6c 64  30 25 29 3a e7 20 4b 65  |$(Keyfld0%):. Ke|
000226d0  79 66 6c 64 31 25 3e 30  20 8c 20 66 24 2b 3d 22  |yfld1%>0 . f$+="|
000226e0  2b 22 2b 54 61 67 24 28  4b 65 79 66 6c 64 31 25  |+"+Tag$(Keyfld1%|
000226f0  29 0d 13 3c 05 f5 0d 13  3d 10 20 20 6e 65 77 6b  |)..<....=.  newk|
00022700  65 79 25 2b 3d 31 0d 13  3e 28 fd 20 49 6e 64 65  |ey%+=1..>(. Inde|
00022710  78 24 28 6e 65 77 6b 65  79 25 29 3d 66 24 20 84  |x$(newkey%)=f$ .|
00022720  20 6e 65 77 6b 65 79 25  3e 4b 65 79 73 25 0d 13  | newkey%>Keys%..|
00022730  3f 0a c8 8e 20 b9 20 ca  0d 13 40 17 20 20 c9 20  |?... . ...@.  . |
00022740  6e 65 77 6b 65 79 25 3c  3d 4b 65 79 73 25 3a 0d  |newkey%<=Keys%:.|
00022750  13 41 20 20 20 20 20 e7  20 a4 63 6f 6e 66 69 72  |.A     . .confir|
00022760  6d 28 a4 6d 73 67 28 35  30 29 29 3d b9 20 8c 0d  |m(.msg(50))=. ..|
00022770  13 42 33 20 20 20 20 20  20 f2 73 63 72 61 70 5f  |.B3      .scrap_|
00022780  73 6c 69 64 69 6e 67 5f  62 6c 6f 63 6b 28 6b 65  |sliding_block(ke|
00022790  79 61 6e 63 68 6f 72 25  28 6e 65 77 6b 65 79 25  |yanchor%(newkey%|
000227a0  29 29 0d 13 43 14 20 20  20 20 20 20 72 65 70 6c  |))..C.      repl|
000227b0  61 63 65 25 3d b9 0d 13  44 14 20 20 20 20 20 20  |ace%=...D.      |
000227c0  cc 20 61 62 6f 72 74 25  3d b9 0d 13 45 09 20 20  |. abort%=...E.  |
000227d0  20 20 cd 0d 13 46 3a 20  20 c9 20 4b 65 79 73 25  |  ...F:  . Keys%|
000227e0  3e 4d 61 78 4b 65 79 73  25 3a 4b 65 79 73 25 2d  |>MaxKeys%:Keys%-|
000227f0  3d 31 3a f2 73 6f 66 74  65 72 72 6f 72 28 22 22  |=1:.softerror(""|
00022800  2c 33 31 29 3a 61 62 6f  72 74 25 3d b9 0d 13 47  |,31):abort%=...G|
00022810  15 20 20 7f 3a 4b 65 79  73 25 3d 6e 65 77 6b 65  |.  .:Keys%=newke|
00022820  79 25 0d 13 48 05 cb 0d  13 49 10 e7 20 61 62 6f  |y%..H....I.. abo|
00022830  72 74 25 20 8c 20 e1 0d  13 4a 2a 62 6c 6f 63 6b  |rt% . ...J*block|
00022840  25 21 38 3d 30 3a 62 6c  6f 63 6b 25 21 31 32 3d  |%!8=0:block%!12=|
00022850  6b 65 79 57 25 3a 62 6c  6f 63 6b 25 21 31 36 3d  |keyW%:block%!16=|
00022860  37 0d 13 4b 25 c8 99 20  22 49 6e 74 65 72 66 61  |7..K%.. "Interfa|
00022870  63 65 5f 53 6c 61 62 42  75 74 74 6f 6e 22 2c 2c  |ce_SlabButton",,|
00022880  62 6c 6f 63 6b 25 0d 13  4c 1a f2 63 6f 70 79 5f  |block%..L..copy_|
00022890  6b 65 79 64 61 74 61 28  6e 65 77 6b 65 79 25 29  |keydata(newkey%)|
000228a0  0d 13 4d 16 49 6e 64 65  78 24 28 6e 65 77 6b 65  |..M.Index$(newke|
000228b0  79 25 29 3d 66 24 0d 13  4e 2d 66 24 3d 24 64 61  |y%)=f$..N-f$=$da|
000228c0  74 61 62 61 73 65 25 2b  22 2e 49 6e 64 69 63 65  |tabase%+".Indice|
000228d0  73 2e 22 2b 49 6e 64 65  78 24 28 6e 65 77 6b 65  |s."+Index$(newke|
000228e0  79 25 29 0d 13 4f 24 f2  6d 61 6b 65 5f 65 6d 70  |y%)..O$.make_emp|
000228f0  74 79 5f 69 6e 64 65 78  28 52 41 25 2c 6e 65 77  |ty_index(RA%,new|
00022900  6b 65 79 25 2c b9 29 0d  13 50 16 f2 6c 69 74 28  |key%,.)..P..lit(|
00022910  6d 65 6e 75 25 28 30 29  2c 32 2c a3 29 0d 13 51  |menu%(0),2,.)..Q|
00022920  15 f2 6c 69 6d 69 74 5f  61 63 74 69 6f 6e 73 28  |..limit_actions(|
00022930  a3 29 0d 13 52 07 ea 20  85 0d 13 53 20 ee 20 85  |.)..R.. ...S . .|
00022940  20 ea 3a f7 20 85 3a f2  61 62 6f 72 74 5f 69 6e  | .:. .:.abort_in|
00022950  64 65 78 28 66 24 29 3a  e1 0d 13 54 2a 64 62 61  |dex(f$):...T*dba|
00022960  73 65 68 61 6e 64 6c 65  25 3d 8e 28 24 64 61 74  |sehandle%=.($dat|
00022970  61 62 61 73 65 25 2b 22  2e 44 61 74 61 62 61 73  |abase%+".Databas|
00022980  65 22 29 0d 13 55 0f 69  6e 64 65 78 69 6e 67 25  |e")..U.indexing%|
00022990  3d b9 0d 13 56 11 f2 75  70 64 61 74 65 5f 73 74  |=...V..update_st|
000229a0  61 74 73 0d 13 57 11 e3  20 66 69 6c 65 25 3d 30  |ats..W.. file%=0|
000229b0  20 b8 20 35 0d 13 58 15  20 20 74 6f 70 3d 66 69  | . 5..X.  top=fi|
000229c0  6c 65 25 2a 38 2b 4c 48  25 0d 13 59 1f 20 20 50  |le%*8+LH%..Y.  P|
000229d0  25 3d a4 6e 65 69 67 68  62 6f 75 72 28 6b 65 79  |%=.neighbour(key|
000229e0  25 2c 74 6f 70 2c 31 29  0d 13 5a 19 20 20 76 61  |%,top,1)..Z.  va|
000229f0  6c 24 3d a4 74 79 70 65  28 6e 65 77 6b 65 79 25  |l$=.type(newkey%|
00022a00  29 0d 13 5b 17 20 20 c8  99 20 22 48 6f 75 72 67  |)..[.  .. "Hourg|
00022a10  6c 61 73 73 5f 4f 6e 22  0d 13 5c 22 20 20 f2 73  |lass_On"..\"  .s|
00022a20  63 61 6e 5f 66 69 6c 65  28 22 50 25 3c 3e 74 6f  |can_file("P%<>to|
00022a30  70 22 2c 6b 65 79 25 2c  34 29 0d 13 5d 0b ed 20  |p",key%,4)..].. |
00022a40  66 69 6c 65 25 0d 13 5e  0e f2 65 6e 64 5f 69 6e  |file%..^..end_in|
00022a50  64 65 78 0d 13 5f 16 f2  63 6f 6c 6f 75 72 28 6e  |dex.._..colour(n|
00022a60  65 77 6b 65 79 25 2c 32  29 0d 13 60 0b 77 61 72  |ewkey%,2)..`.war|
00022a70  6e 25 3d b9 0d 13 61 07  f7 20 85 0d 13 62 4d e7  |n%=...a.. ...bM.|
00022a80  20 a4 73 65 6c 65 63 74  65 64 28 70 61 73 73 57  | .selected(passW|
00022a90  25 2c 31 36 29 20 8c 20  d5 23 6c 6f 67 68 61 6e  |%,16) . .#loghan|
00022aa0  64 6c 65 25 2c 22 49 6e  64 65 78 20 22 2b 49 6e  |dle%,"Index "+In|
00022ab0  64 65 78 24 28 6e 65 77  6b 65 79 25 29 2b 22 20  |dex$(newkey%)+" |
00022ac0  63 72 65 61 74 65 64 22  0d 13 63 05 e1 0d 13 64  |created"..c....d|
00022ad0  05 3a 0d 13 65 16 dd 20  f2 61 62 6f 72 74 5f 69  |.:..e.. .abort_i|
00022ae0  6e 64 65 78 28 66 24 29  0d 13 66 0e f2 65 6e 64  |ndex(f$)..f..end|
00022af0  5f 69 6e 64 65 78 0d 13  67 10 e7 20 72 65 70 6c  |_index..g.. repl|
00022b00  61 63 65 25 20 8c 0d 13  68 1d 20 20 f2 6f 70 65  |ace% ...h.  .ope|
00022b10  6e 5f 69 6e 64 65 78 28  66 24 2c 6e 65 77 6b 65  |n_index(f$,newke|
00022b20  79 25 29 0d 13 69 07 20  20 cc 0d 13 6a 1e 20 20  |y%)..i.  ...j.  |
00022b30  e3 20 69 6e 64 65 78 25  3d 6e 65 77 6b 65 79 25  |. index%=newkey%|
00022b40  20 b8 20 4b 65 79 73 25  0d 13 6b 29 20 20 20 20  | . Keys%..k)    |
00022b50  49 6e 64 65 78 24 28 6e  65 77 6b 65 79 25 29 3d  |Index$(newkey%)=|
00022b60  49 6e 64 65 78 24 28 6e  65 77 6b 65 79 25 2b 31  |Index$(newkey%+1|
00022b70  29 0d 13 6c 0e 20 20 ed  20 69 6e 64 65 78 25 0d  |)..l.  . index%.|
00022b80  13 6d 2f 20 20 f2 73 63  72 61 70 5f 73 6c 69 64  |.m/  .scrap_slid|
00022b90  69 6e 67 5f 62 6c 6f 63  6b 28 6b 65 79 61 6e 63  |ing_block(keyanc|
00022ba0  68 6f 72 25 28 6e 65 77  6b 65 79 25 29 29 0d 13  |hor%(newkey%))..|
00022bb0  6e 0e 20 20 4b 65 79 73  25 2d 3d 31 0d 13 6f 0f  |n.  Keys%-=1..o.|
00022bc0  20 20 6e 65 77 6b 65 79  25 3d 30 0d 13 70 05 cd  |  newkey%=0..p..|
00022bd0  0d 13 71 0c e7 20 9f 3d  31 37 20 8c 0d 13 72 17  |..q.. .=17 ...r.|
00022be0  20 20 f2 73 6f 66 74 65  72 72 6f 72 28 22 22 2c  |  .softerror("",|
00022bf0  34 33 29 0d 13 73 1d 20  20 cc 20 f2 77 69 6d 70  |43)..s.  . .wimp|
00022c00  5f 65 72 72 6f 72 28 b9  2c 9f 2c 9e 2c f6 24 29  |_error(.,.,.,.$)|
00022c10  0d 13 74 05 cd 0d 13 75  05 e1 0d 13 76 05 3a 0d  |..t....u....v.:.|
00022c20  13 77 10 dd 20 f2 65 6e  64 5f 69 6e 64 65 78 0d  |.w.. .end_index.|
00022c30  13 78 18 c8 99 20 22 48  6f 75 72 67 6c 61 73 73  |.x... "Hourglass|
00022c40  5f 53 6d 61 73 68 22 0d  13 79 0f 69 6e 64 65 78  |_Smash"..y.index|
00022c50  69 6e 67 25 3d a3 0d 13  7a 1b f2 6c 69 6d 69 74  |ing%=...z..limit|
00022c60  5f 61 63 74 69 6f 6e 73  28 41 63 63 65 73 73 25  |_actions(Access%|
00022c70  29 0d 13 7b 1c c8 99 20  22 57 69 6d 70 5f 43 72  |)..{... "Wimp_Cr|
00022c80  65 61 74 65 4d 65 6e 75  22 2c 2c 2d 31 0d 13 7c  |eateMenu",,-1..||
00022c90  1c f2 6c 69 74 28 6d 65  6e 75 25 28 30 29 2c 32  |..lit(menu%(0),2|
00022ca0  2c 4d 6f 64 69 66 79 25  29 0d 13 7d 1d f2 63 6c  |,Modify%)..}..cl|
00022cb0  6f 73 65 5f 66 69 6c 65  28 64 62 61 73 65 68 61  |ose_file(dbaseha|
00022cc0  6e 64 6c 65 25 29 0d 13  7e 05 e1 0d 13 7f 05 3a  |ndle%)..~......:|
00022cd0  0d 13 80 16 dd 20 a4 73  68 69 66 74 28 74 25 2c  |..... .shift(t%,|
00022ce0  6b 25 2c 6d 25 29 0d 13  81 17 ea 20 61 25 2c 6b  |k%,m%)..... a%,k|
00022cf0  65 79 25 2c 66 69 25 2c  49 25 2c 46 24 0d 13 82  |ey%,fi%,I%,F$...|
00022d00  16 e7 20 ac 20 41 63 63  65 73 73 25 20 8c 3d 61  |.. . Access% .=a|
00022d10  64 64 72 0d 13 83 15 e7  20 52 45 43 25 3d 52 41  |ddr..... REC%=RA|
00022d20  25 20 8c 3d 61 64 64 72  0d 13 84 31 e7 20 74 25  |% .=addr...1. t%|
00022d30  3d 30 20 80 20 6d 25 3d  31 20 8c 20 e7 20 a4 63  |=0 . m%=1 . . .c|
00022d40  6f 6e 66 69 72 6d 28 a4  6d 73 67 28 35 31 29 29  |onfirm(.msg(51))|
00022d50  3d a3 20 8c 3d 61 64 64  72 0d 13 85 14 e3 20 6b  |=. .=addr..... k|
00022d60  65 79 25 3d 30 20 b8 20  4b 65 79 73 25 0d 13 86  |ey%=0 . Keys%...|
00022d70  32 20 20 4e 24 3d a4 6b  65 79 28 6b 65 79 25 29  |2  N$=.key(key%)|
00022d80  3a 6b 6c 25 3d 4b 4c 25  28 6b 65 79 25 29 3a 76  |:kl%=KL%(key%):v|
00022d90  61 6c 24 3d a4 74 79 70  65 28 6b 65 79 25 29 0d  |al$=.type(key%).|
00022da0  13 87 16 20 20 f2 64 65  6c 65 74 65 28 4e 24 2c  |...  .delete(N$,|
00022db0  6b 65 79 25 29 0d 13 88  1c 20 20 e7 20 4e 24 3d  |key%)....  . N$=|
00022dc0  22 2a 46 61 69 6c 65 64  2a 22 20 8c 3d 61 64 64  |"*Failed*" .=add|
00022dd0  72 0d 13 89 18 20 20 e7  20 6b 65 79 25 3d 6b 25  |r....  . key%=k%|
00022de0  20 8c 20 61 25 3d 53 55  25 0d 13 8a 20 20 20 e7  | . a%=SU%...   .|
00022df0  20 74 25 3d 31 20 8c 20  66 69 25 3d 28 66 69 6c  | t%=1 . fi%=(fil|
00022e00  65 25 2b 31 29 20 83 20  36 0d 13 8b 29 20 20 e7  |e%+1) . 6...)  .|
00022e10  20 74 25 3d 2d 31 20 8c  20 66 69 25 3d 28 66 69  | t%=-1 . fi%=(fi|
00022e20  6c 65 25 2d 31 2d 36 2a  28 66 69 6c 65 25 3d 30  |le%-1-6*(file%=0|
00022e30  29 29 0d 13 8c 13 20 20  74 6f 70 3d 38 2a 66 69  |))....  top=8*fi|
00022e40  25 2b 4c 48 25 0d 13 8d  0d 20 20 c8 8e 20 74 25  |%+LH%....  .. t%|
00022e50  20 ca 0d 13 8e 0c 20 20  20 20 c9 20 30 3a 0d 13  | .....    . 0:..|
00022e60  8f 18 20 20 20 20 e3 20  49 25 3d 31 20 b8 20 66  |..    . I%=1 . f|
00022e70  69 65 6c 64 73 25 0d 13  90 1a 20 20 20 20 20 20  |ields%....      |
00022e80  56 25 3d 63 68 61 72 74  79 70 65 25 28 49 25 29  |V%=chartype%(I%)|
00022e90  0d 13 91 11 20 20 20 20  20 20 c8 8e 20 56 25 20  |....      .. V% |
00022ea0  ca 0d 13 92 14 20 20 20  20 20 20 20 20 c9 20 33  |.....        . 3|
00022eb0  36 2c 33 39 3a 0d 13 93  52 20 20 20 20 20 20 20  |6,39:...R       |
00022ec0  20 e7 20 a4 62 6c 6f 62  5f 70 61 74 68 28 a3 2c  | . .blob_path(.,|
00022ed0  24 64 61 74 61 62 61 73  65 25 2c 52 45 43 25 2c  |$database%,REC%,|
00022ee0  49 25 2c 56 25 2c 46 24  29 3e 3d 30 20 8c 3a c8  |I%,V%,F$)>=0 .:.|
00022ef0  99 20 22 4f 53 5f 43 4c  49 22 2c 22 44 65 6c 65  |. "OS_CLI","Dele|
00022f00  74 65 20 22 2b 46 24 0d  13 94 13 20 20 20 20 20  |te "+F$....     |
00022f10  20 20 20 c9 20 39 2c 33  37 3a 0d 13 95 52 20 20  |   . 9,37:...R  |
00022f20  20 20 20 20 20 20 e7 20  a4 62 6c 6f 62 5f 70 61  |      . .blob_pa|
00022f30  74 68 28 a3 2c 24 64 61  74 61 62 61 73 65 25 2c  |th(.,$database%,|
00022f40  52 45 43 25 2c 49 25 2c  56 25 2c 46 24 29 3e 3d  |REC%,I%,V%,F$)>=|
00022f50  30 20 8c 3a c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |0 .:.. "OS_CLI",|
00022f60  22 44 65 6c 65 74 65 20  22 2b 46 24 0d 13 96 11  |"Delete "+F$....|
00022f70  20 20 20 20 20 20 20 20  c9 20 33 38 3a 0d 13 97  |        . 38:...|
00022f80  52 20 20 20 20 20 20 20  20 e7 20 a4 62 6c 6f 62  |R        . .blob|
00022f90  5f 70 61 74 68 28 a3 2c  24 64 61 74 61 62 61 73  |_path(.,$databas|
00022fa0  65 25 2c 52 45 43 25 2c  49 25 2c 56 25 2c 46 24  |e%,REC%,I%,V%,F$|
00022fb0  29 3e 3d 30 20 8c 3a c8  99 20 22 4f 53 5f 43 4c  |)>=0 .:.. "OS_CL|
00022fc0  49 22 2c 22 44 65 6c 65  74 65 20 22 2b 46 24 0d  |I","Delete "+F$.|
00022fd0  13 98 0b 20 20 20 20 20  20 cb 0d 13 99 0c 20 20  |...      .....  |
00022fe0  20 20 ed 20 49 25 0d 13  9a 0a 20 20 20 20 7f 3a  |  . I%....    .:|
00022ff0  0d 13 9b 38 20 20 20 20  f2 69 6e 73 65 72 74 28  |...8    .insert(|
00023000  a3 2c 4e 24 2c 6b 65 79  25 29 3a 64 61 74 65 25  |.,N$,key%):date%|
00023010  3f 66 69 25 3d 31 3a 24  44 61 74 65 25 28 66 69  |?fi%=1:$Date%(fi|
00023020  25 29 3d a4 64 61 74 65  0d 13 9c 07 20 20 cb 0d  |%)=.date....  ..|
00023030  13 9d 15 20 20 74 6f 70  3d 38 2a 66 69 6c 65 25  |...  top=8*file%|
00023040  2b 4c 48 25 0d 13 9e 13  20 20 64 61 74 65 25 3f  |+LH%....  date%?|
00023050  66 69 6c 65 25 3d 31 0d  13 9f 19 20 20 24 44 61  |file%=1....  $Da|
00023060  74 65 25 28 66 69 6c 65  25 29 3d a4 64 61 74 65  |te%(file%)=.date|
00023070  0d 13 a0 0a ed 20 6b 65  79 25 0d 13 a1 1c e7 20  |..... key%..... |
00023080  a4 73 65 6c 65 63 74 65  64 28 70 61 73 73 57 25  |.selected(passW%|
00023090  2c 31 36 29 20 8c 0d 13  a2 0e 20 20 e7 20 74 25  |,16) .....  . t%|
000230a0  3d 30 20 8c 0d 13 a3 29  20 20 20 20 d5 23 6c 6f  |=0 ....)    .#lo|
000230b0  67 68 61 6e 64 6c 65 25  2c 6c 6f 67 65 6e 74 72  |ghandle%,logentr|
000230c0  79 24 2b 22 20 44 65 6c  65 74 65 64 22 0d 13 a4  |y$+" Deleted"...|
000230d0  38 20 20 20 20 cc 20 d5  23 6c 6f 67 68 61 6e 64  |8    . .#loghand|
000230e0  6c 65 25 2c 6c 6f 67 65  6e 74 72 79 24 2b 22 20  |le%,logentry$+" |
000230f0  3d 3d 3d 3e 20 73 75 62  66 69 6c 65 20 22 2b c3  |===> subfile "+.|
00023100  28 66 69 25 29 0d 13 a5  07 20 20 cd 0d 13 a6 05  |(fi%)....  .....|
00023110  cd 0d 13 a7 0b 77 61 72  6e 25 3d b9 0d 13 a8 07  |.....warn%=.....|
00023120  3d 61 25 0d 13 a9 05 3a  0d 13 aa 11 dd 20 a4 74  |=a%....:..... .t|
00023130  79 70 65 28 6b 65 79 25  29 0d 13 ab 0b ea 20 46  |ype(key%)..... F|
00023140  25 2c 56 24 0d 13 ac 29  e7 20 6b 65 79 25 3e 3d  |%,V$...). key%>=|
00023150  30 20 8c 20 46 25 3d 4b  46 25 28 6b 65 79 25 2c  |0 . F%=KF%(key%,|
00023160  30 29 20 8b 20 46 25 3d  2d 6b 65 79 25 0d 13 ad  |0) . F%=-key%...|
00023170  16 c8 8e 20 63 68 61 72  74 79 70 65 25 28 46 25  |... chartype%(F%|
00023180  29 20 ca 0d 13 ae 23 20  20 c9 20 33 2c 36 2c 34  |) ....#  . 3,6,4|
00023190  36 2c 34 37 2c 35 34 2c  35 36 2c 35 37 3a 56 24  |6,47,54,56,57:V$|
000231a0  3d 22 56 41 4c 22 0d 13  af 05 cb 0d 13 b0 07 3d  |="VAL".........=|
000231b0  56 24 0d 13 b1 05 3a 0d  13 b2 17 dd 20 a4 63 6f  |V$....:..... .co|
000231c0  6e 66 69 72 6d 28 73 74  72 69 6e 67 24 29 0d 13  |nfirm(string$)..|
000231d0  b3 0f 21 62 6c 6f 63 6b  25 3d 32 35 35 0d 13 b4  |..!block%=255...|
000231e0  17 24 28 62 6c 6f 63 6b  25 2b 34 29 3d 73 74 72  |.$(block%+4)=str|
000231f0  69 6e 67 24 0d 13 b5 5d  c8 99 20 22 57 69 6d 70  |ing$...].. "Wimp|
00023200  5f 52 65 70 6f 72 74 45  72 72 6f 72 22 2c 62 6c  |_ReportError",bl|
00023210  6f 63 6b 25 2c 28 31 3c  3c 30 29 2b 28 31 3c 3c  |ock%,(1<<0)+(1<<|
00023220  31 29 2b 28 31 3c 3c 34  29 2c 22 50 6f 77 65 72  |1)+(1<<4),"Power|
00023230  62 61 73 65 3a 20 70 6c  65 61 73 65 20 63 6f 6e  |base: please con|
00023240  66 69 72 6d 3a 22 20 b8  20 2c 72 65 73 75 6c 74  |firm:" . ,result|
00023250  25 0d 13 b6 0e 3d 72 65  73 75 6c 74 25 3d 31 0d  |%....=result%=1.|
00023260  13 b7 05 3a 0d 13 b8 2c  dd 20 f2 67 65 74 73 63  |...:...,. .getsc|
00023270  72 65 65 6e 73 69 7a 65  28 f8 20 53 5f 57 69 64  |reensize(. S_Wid|
00023280  74 68 25 2c f8 20 53 5f  48 65 69 67 68 74 25 29  |th%,. S_Height%)|
00023290  0d 13 b9 1a ea 20 48 31  25 2c 56 31 25 2c 48 32  |..... H1%,V1%,H2|
000232a0  25 2c 56 32 25 2c 45 6e  64 25 0d 13 ba 24 48 31  |%,V2%,End%...$H1|
000232b0  25 3d 30 3a 56 31 25 3d  34 3a 48 32 25 3d 38 3a  |%=0:V1%=4:H2%=8:|
000232c0  56 32 25 3d 31 32 3a 45  6e 64 25 3d 31 36 0d 13  |V2%=12:End%=16..|
000232d0  bb 39 4d 69 25 21 48 31  25 3d 34 3a 4d 69 25 21  |.9Mi%!H1%=4:Mi%!|
000232e0  56 31 25 3d 35 3a 4d 69  25 21 48 32 25 3d 31 31  |V1%=5:Mi%!H2%=11|
000232f0  3a 4d 69 25 21 56 32 25  3d 31 32 3a 4d 69 25 21  |:Mi%!V2%=12:Mi%!|
00023300  45 6e 64 25 3d 2d 31 0d  13 bc 24 c8 99 20 22 4f  |End%=-1...$.. "O|
00023310  53 5f 52 65 61 64 56 64  75 56 61 72 69 61 62 6c  |S_ReadVduVariabl|
00023320  65 73 22 2c 4d 69 25 2c  4d 6f 25 0d 13 bd 29 53  |es",Mi%,Mo%...)S|
00023330  5f 57 69 64 74 68 25 3d  28 31 3c 3c 28 4d 6f 25  |_Width%=(1<<(Mo%|
00023340  21 48 31 25 29 29 2a 28  28 4d 6f 25 21 48 32 25  |!H1%))*((Mo%!H2%|
00023350  29 2b 31 29 0d 13 be 2a  53 5f 48 65 69 67 68 74  |)+1)...*S_Height|
00023360  25 3d 28 31 3c 3c 28 4d  6f 25 21 56 31 25 29 29  |%=(1<<(Mo%!V1%))|
00023370  2a 28 28 4d 6f 25 21 56  32 25 29 2b 31 29 0d 13  |*((Mo%!V2%)+1)..|
00023380  bf 05 e1 0d 13 c0 05 3a  0d 13 c1 0c dd 20 f2 6d  |.......:..... .m|
00023390  61 74 63 68 0d 13 c2 11  f2 63 68 65 63 6b 5f 63  |atch.....check_c|
000233a0  68 61 6e 67 65 0d 13 c3  26 e7 20 ac 20 63 6f 6d  |hange...&. . com|
000233b0  6d 6f 6e 25 20 8c 20 24  a4 74 65 78 74 28 6d 61  |mon% . $.text(ma|
000233c0  74 63 68 57 25 2c 30 29  3d 22 22 0d 13 c4 1b f2  |tchW%,0)="".....|
000233d0  72 65 64 72 61 77 5f 69  63 6f 6e 28 6d 61 74 63  |redraw_icon(matc|
000233e0  68 57 25 2c 30 29 0d 13  c5 19 f2 6f 70 65 6e 5f  |hW%,0).....open_|
000233f0  77 69 6e 64 6f 77 28 6d  61 74 63 68 57 25 29 0d  |window(matchW%).|
00023400  13 c6 19 f2 73 65 74 5f  63 61 72 65 74 28 6d 61  |....set_caret(ma|
00023410  74 63 68 57 25 2c 30 29  0d 13 c7 26 24 a4 74 65  |tchW%,0)...&$.te|
00023420  78 74 28 6d 61 74 63 68  57 25 2c 33 29 3d 54 61  |xt(matchW%,3)=Ta|
00023430  67 24 28 4d 61 74 63 68  5f 74 61 67 25 29 0d 13  |g$(Match_tag%)..|
00023440  c8 32 f2 74 69 63 6b 5f  6f 6e 65 28 66 69 65 6c  |.2.tick_one(fiel|
00023450  64 6d 65 6e 75 25 2c 30  2c 66 69 65 6c 64 73 25  |dmenu%,0,fields%|
00023460  2d 31 2c 4d 61 74 63 68  5f 74 61 67 25 2d 31 29  |-1,Match_tag%-1)|
00023470  0d 13 c9 1b f2 72 65 64  72 61 77 5f 69 63 6f 6e  |.....redraw_icon|
00023480  28 6d 61 74 63 68 57 25  2c 33 29 0d 13 ca 19 24  |(matchW%,3)....$|
00023490  a4 74 65 78 74 28 6d 61  74 63 68 57 25 2c 31 34  |.text(matchW%,14|
000234a0  29 3d 22 22 0d 13 cb 1c  f2 72 65 64 72 61 77 5f  |)="".....redraw_|
000234b0  69 63 6f 6e 28 6d 61 74  63 68 57 25 2c 31 34 29  |icon(matchW%,14)|
000234c0  0d 13 cc 61 e7 20 a4 73  65 6c 65 63 74 65 64 28  |...a. .selected(|
000234d0  6d 61 74 63 68 57 25 2c  32 37 29 20 8c 20 24 a4  |matchW%,27) . $.|
000234e0  74 65 78 74 28 6d 61 74  63 68 57 25 2c 32 35 29  |text(matchW%,25)|
000234f0  3d 22 4e 75 6d 62 65 72  20 66 6f 75 6e 64 22 20  |="Number found" |
00023500  8b 20 24 a4 74 65 78 74  28 6d 61 74 63 68 57 25  |. $.text(matchW%|
00023510  2c 32 35 29 3d 22 54 69  6d 65 20 74 61 6b 65 6e  |,25)="Time taken|
00023520  22 0d 13 cd 1c f2 72 65  64 72 61 77 5f 69 63 6f  |".....redraw_ico|
00023530  6e 28 6d 61 74 63 68 57  25 2c 32 35 29 0d 13 ce  |n(matchW%,25)...|
00023540  22 66 69 65 6c 64 66 75  6e 63 24 3d 22 6d 61 74  |"fieldfunc$="mat|
00023550  63 68 22 3a 6d 61 74 63  68 69 6e 67 25 3d b9 0d  |ch":matching%=..|
00023560  13 cf 05 e1 0d 13 d0 05  3a 0d 13 d1 49 f4 20 4c  |........:...I. L|
00023570  69 73 74 20 70 72 69 6e  74 69 6e 67 20 2d 2d 2d  |ist printing ---|
00023580  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000235b0  2d 2d 0d 13 d2 05 3a 0d  13 d3 11 dd 20 f2 70 72  |--....:..... .pr|
000235c0  69 6e 74 5f 74 68 69 73  0d 13 d4 25 66 24 3d 24  |int_this...%f$=$|
000235d0  64 61 74 61 62 61 73 65  25 2b 22 2e 50 72 69 6e  |database%+".Prin|
000235e0  74 52 65 73 2e 44 65 66  61 75 6c 74 22 0d 13 d5  |tRes.Default"...|
000235f0  1a c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 35 2c  |... "OS_File",5,|
00023600  66 24 20 b8 20 64 25 0d  13 d6 20 e7 20 64 25 3d  |f$ . d%... . d%=|
00023610  31 20 8c 20 f2 64 72 61  67 5f 73 65 6c 65 63 74  |1 . .drag_select|
00023620  69 6f 6e 28 66 24 29 0d  13 d7 21 6f 6c 64 25 3d  |ion(f$)...!old%=|
00023630  a4 73 65 6c 65 63 74 65  64 5f 65 73 67 28 70 72  |.selected_esg(pr|
00023640  69 6e 74 57 25 2c 33 29  0d 13 d8 1b f2 64 65 73  |intW%,3).....des|
00023650  65 6c 65 63 74 28 70 72  69 6e 74 57 25 2c 6f 6c  |elect(printW%,ol|
00023660  64 25 29 0d 13 d9 17 f2  73 65 6c 65 63 74 28 70  |d%).....select(p|
00023670  72 69 6e 74 57 25 2c 32  34 29 0d 13 da 1c f2 6d  |rintW%,24).....m|
00023680  6f 75 73 65 28 30 2c 30  2c 34 2c 6d 61 74 63 68  |ouse(0,0,4,match|
00023690  57 25 2c 32 34 29 0d 13  db 14 f2 63 6c 65 61 72  |W%,24).....clear|
000236a0  5f 73 65 6c 65 63 74 69  6f 6e 0d 13 dc 19 f2 64  |_selection.....d|
000236b0  65 73 65 6c 65 63 74 28  70 72 69 6e 74 57 25 2c  |eselect(printW%,|
000236c0  32 34 29 0d 13 dd 19 f2  73 65 6c 65 63 74 28 70  |24).....select(p|
000236d0  72 69 6e 74 57 25 2c 6f  6c 64 25 29 0d 13 de 05  |rintW%,old%)....|
000236e0  e1 0d 13 df 05 3a 0d 13  e0 20 dd 20 f2 64 6f 5f  |.....:... . .do_|
000236f0  69 74 28 53 65 61 72 63  68 24 2c 64 69 73 70 6c  |it(Search$,displ|
00023700  61 79 65 64 25 29 0d 13  e1 13 e7 20 70 72 69 6e  |ayed%)..... prin|
00023710  74 69 6e 67 25 20 8c 20  e1 0d 13 e2 13 ea 20 7a  |ting% . ...... z|
00023720  65 72 6f 25 2c 50 25 2c  72 65 63 25 0d 13 e3 07  |ero%,P%,rec%....|
00023730  ea 20 85 0d 13 e4 15 46  6f 72 6d 24 3d 70 72 69  |. .....Form$=pri|
00023740  6e 74 6f 72 64 65 72 24  0d 13 e5 10 e7 20 46 6f  |ntorder$..... Fo|
00023750  72 6d 24 3d 22 22 20 8c  0d 13 e6 10 20 20 e3 20  |rm$="" .....  . |
00023760  57 25 3d 30 20 b8 20 31  0d 13 e7 17 20 20 20 20  |W%=0 . 1....    |
00023770  e7 20 4b 46 25 28 30 2c  57 25 29 3e 30 20 8c 0d  |. KF%(0,W%)>0 ..|
00023780  13 e8 3a 20 20 20 20 20  20 46 24 3d c3 7e 28 4b  |..:      F$=.~(K|
00023790  46 25 28 30 2c 57 25 29  29 3a e7 20 a9 28 46 24  |F%(0,W%)):. .(F$|
000237a0  29 3d 31 20 8c 20 46 24  3d 22 30 22 2b 46 24 3a  |)=1 . F$="0"+F$:|
000237b0  46 6f 72 6d 24 2b 3d 46  24 0d 13 e9 7d 20 20 20  |Form$+=F$...}   |
000237c0  20 20 20 e7 20 ac 20 a4  73 65 6c 65 63 74 65 64  |   . . .selected|
000237d0  28 6d 61 74 63 68 57 25  2c 32 37 29 20 8c 20 f2  |(matchW%,27) . .|
000237e0  73 65 6c 65 63 74 28 6d  61 69 6e 57 25 2c 66 69  |select(mainW%,fi|
000237f0  65 6c 64 25 28 4b 46 25  28 30 2c 57 25 29 29 29  |eld%(KF%(0,W%)))|
00023800  3a 70 72 69 6e 74 6f 72  64 65 72 24 2b 3d 46 24  |:printorder$+=F$|
00023810  3a f2 6c 69 74 28 6d 65  6e 75 25 28 36 29 2c 37  |:.lit(menu%(6),7|
00023820  2c b9 29 3a f2 6c 69 74  28 6d 65 6e 75 25 28 36  |,.):.lit(menu%(6|
00023830  29 2c 38 2c b9 29 0d 13  ea 09 20 20 20 20 cd 0d  |),8,.)....    ..|
00023840  13 eb 0a 20 20 ed 20 57  25 0d 13 ec 05 cd 0d 13  |...  . W%.......|
00023850  ed 23 48 65 61 64 69 6e  67 24 3d 22 22 3a 48 6c  |.#Heading$="":Hl|
00023860  6f 6e 67 65 73 74 25 3d  30 3a 53 75 6d 28 29 3d  |ongest%=0:Sum()=|
00023870  30 0d 13 ee 2b 43 6f 75  6e 74 25 3d 30 3a 65 78  |0...+Count%=0:ex|
00023880  61 6d 69 6e 65 64 25 3d  30 3a 70 72 69 6e 74 65  |amined%=0:printe|
00023890  64 25 3d 30 3a 73 75 6d  73 25 3d 30 0d 13 ef 17  |d%=0:sums%=0....|
000238a0  f2 72 65 61 64 5f 70 72  69 6e 74 5f 6f 70 74 69  |.read_print_opti|
000238b0  6f 6e 73 0d 13 f0 4e e7  20 a4 73 65 6c 65 63 74  |ons...N. .select|
000238c0  65 64 28 70 72 69 6e 74  57 25 2c 34 30 29 20 8c  |ed(printW%,40) .|
000238d0  20 f2 66 69 6e 64 5f 6d  61 78 5f 6c 65 6e 67 74  | .find_max_lengt|
000238e0  68 73 28 64 69 73 70 6c  61 79 65 64 25 29 20 8b  |hs(displayed%) .|
000238f0  20 6d 61 78 6c 65 6e 25  28 29 3d 6c 65 6e 25 28  | maxlen%()=len%(|
00023900  29 0d 13 f1 1c 4c 65 6e  4c 69 6e 65 25 3d a4 69  |)....LenLine%=.i|
00023910  6e 63 6c 75 64 65 5f 66  69 65 6c 64 73 0d 13 f2  |nclude_fields...|
00023920  2c 6e 75 6d 66 69 72 73  74 25 3d a4 6d 61 72 67  |,numfirst%=.marg|
00023930  69 6e 5f 77 61 72 6e 3a  e7 20 6e 75 6d 66 69 72  |in_warn:. numfir|
00023940  73 74 25 3c 30 20 8c 20  e1 0d 13 f3 11 f2 6c 69  |st%<0 . ......li|
00023950  73 74 5f 68 65 61 64 28  30 29 0d 13 f4 24 c8 99  |st_head(0)...$..|
00023960  20 22 57 69 6d 70 5f 47  65 74 50 6f 69 6e 74 65  | "Wimp_GetPointe|
00023970  72 49 6e 66 6f 22 2c 2c  62 6c 6f 63 6b 25 0d 13  |rInfo",,block%..|
00023980  f5 15 f2 6c 69 6d 69 74  5f 61 63 74 69 6f 6e 73  |...limit_actions|
00023990  28 a3 29 0d 13 f6 16 f2  6c 69 74 28 6d 65 6e 75  |(.).....lit(menu|
000239a0  25 28 30 29 2c 32 2c 30  29 0d 13 f7 0f 70 72 69  |%(0),2,0)....pri|
000239b0  6e 74 69 6e 67 25 3d b9  0d 13 f8 26 c8 99 20 22  |nting%=....&.. "|
000239c0  4f 53 5f 52 65 61 64 4d  6f 6e 6f 74 6f 6e 69 63  |OS_ReadMonotonic|
000239d0  54 69 6d 65 22 20 b8 20  73 74 69 6d 65 25 0d 13  |Time" . stime%..|
000239e0  f9 1f ee 20 85 20 ea 3a  f7 20 85 3a f2 61 62 6f  |... . .:. .:.abo|
000239f0  72 74 5f 70 72 69 6e 74  69 6e 67 3a e1 0d 13 fa  |rt_printing:....|
00023a00  2a 64 62 61 73 65 68 61  6e 64 6c 65 25 3d 8e 28  |*dbasehandle%=.(|
00023a10  24 64 61 74 61 62 61 73  65 25 2b 22 2e 44 61 74  |$database%+".Dat|
00023a20  61 62 61 73 65 22 29 0d  13 fb 15 c8 99 20 22 48  |abase")...... "H|
00023a30  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 13 fc 0a  |ourglass_On"....|
00023a40  c8 8e 20 b9 20 ca 0d 13  fd 13 20 20 c9 20 64 69  |.. . .....  . di|
00023a50  73 70 6c 61 79 65 64 25  3a 0d 13 fe 25 20 20 f2  |splayed%:...%  .|
00023a60  72 65 61 64 73 6d 61 72  72 61 79 28 64 62 61 73  |readsmarray(dbas|
00023a70  65 68 61 6e 64 6c 65 25  2c 52 45 43 25 29 0d 13  |ehandle%,REC%)..|
00023a80  ff 19 20 20 f2 70 72 69  6e 74 5f 72 65 63 6f 72  |..  .print_recor|
00023a90  64 28 52 45 43 25 29 0d  14 00 2d 20 20 c9 20 75  |d(REC%)...-  . u|
00023aa0  73 65 6b 65 79 25 3d 2d  31 20 84 20 a4 73 65 6c  |sekey%=-1 . .sel|
00023ab0  65 63 74 65 64 28 6d 61  74 63 68 57 25 2c 32 33  |ected(matchW%,23|
00023ac0  29 3d a3 3a 0d 14 01 3c  20 20 50 25 3d a4 6e 65  |)=.:...<  P%=.ne|
00023ad0  69 67 68 62 6f 75 72 28  6b 65 79 25 2c 74 6f 70  |ighbour(key%,top|
00023ae0  2c 31 29 3a f2 73 63 61  6e 5f 66 69 6c 65 28 22  |,1):.scan_file("|
00023af0  50 25 3c 3e 74 6f 70 22  2c 6b 65 79 25 2c 31 29  |P%<>top",key%,1)|
00023b00  0d 14 02 08 20 20 7f 3a  0d 14 03 23 20 20 50 25  |....  .:...#  P%|
00023b10  3d a4 73 65 61 72 63 68  28 75 73 65 76 61 6c 24  |=.search(useval$|
00023b20  2c 75 73 65 6b 65 79 25  2c 31 29 0d 14 04 49 20  |,usekey%,1)...I |
00023b30  20 e7 20 50 25 3e 3d 30  20 8c 20 6b 24 3d 75 73  | . P%>=0 . k$=us|
00023b40  65 76 61 6c 24 3a f2 73  63 61 6e 5f 66 69 6c 65  |eval$:.scan_file|
00023b50  28 22 50 25 3c 3e 74 6f  70 20 41 4e 44 20 6b 24  |("P%<>top AND k$|
00023b60  3d 75 73 65 76 61 6c 24  22 2c 75 73 65 6b 65 79  |=useval$",usekey|
00023b70  25 2c 31 29 0d 14 05 05  cb 0d 14 06 07 f7 20 85  |%,1).......... .|
00023b80  0d 14 07 11 f2 65 6e 64  5f 70 72 69 6e 74 69 6e  |.....end_printin|
00023b90  67 0d 14 08 05 e1 0d 14  09 05 3a 0d 14 0a 15 dd  |g.........:.....|
00023ba0  20 f2 61 62 6f 72 74 5f  70 72 69 6e 74 69 6e 67  | .abort_printing|
00023bb0  0d 14 0b 11 f2 65 6e 64  5f 70 72 69 6e 74 69 6e  |.....end_printin|
00023bc0  67 0d 14 0c 0c e7 20 9f  3d 31 37 20 8c 0d 14 0d  |g..... .=17 ....|
00023bd0  17 20 20 f2 73 6f 66 74  65 72 72 6f 72 28 22 22  |.  .softerror(""|
00023be0  2c 32 39 29 0d 14 0e 1d  20 20 cc 20 f2 77 69 6d  |,29)....  . .wim|
00023bf0  70 5f 65 72 72 6f 72 28  b9 2c 9f 2c 9e 2c f6 24  |p_error(.,.,.,.$|
00023c00  29 0d 14 0f 05 cd 0d 14  10 05 e1 0d 14 11 05 3a  |)..............:|
00023c10  0d 14 12 13 dd 20 f2 65  6e 64 5f 70 72 69 6e 74  |..... .end_print|
00023c20  69 6e 67 0d 14 13 0b ea  20 74 69 6d 65 25 0d 14  |ing..... time%..|
00023c30  14 32 e7 20 66 6f 72 6d  61 74 24 3d 22 6c 61 62  |.2. format$="lab|
00023c40  65 6c 22 20 80 20 74 68  69 73 6c 61 62 25 3e 30  |el" . thislab%>0|
00023c50  20 8c 20 f2 70 72 69 6e  74 5f 6c 61 62 65 6c 73  | . .print_labels|
00023c60  0d 14 15 26 c8 99 20 22  4f 53 5f 52 65 61 64 4d  |...&.. "OS_ReadM|
00023c70  6f 6e 6f 74 6f 6e 69 63  54 69 6d 65 22 20 b8 20  |onotonicTime" . |
00023c80  65 74 69 6d 65 25 0d 14  16 17 74 69 6d 65 25 3d  |etime%....time%=|
00023c90  65 74 69 6d 65 25 2d 73  74 69 6d 65 25 0d 14 17  |etime%-stime%...|
00023ca0  7a e7 20 a4 73 65 6c 65  63 74 65 64 28 6d 61 74  |z. .selected(mat|
00023cb0  63 68 57 25 2c 32 37 29  20 8c 20 24 a4 74 65 78  |chW%,27) . $.tex|
00023cc0  74 28 6d 61 74 63 68 57  25 2c 31 34 29 3d c3 28  |t(matchW%,14)=.(|
00023cd0  70 72 69 6e 74 65 64 25  29 20 8b 20 24 a4 74 65  |printed%) . $.te|
00023ce0  78 74 28 6d 61 74 63 68  57 25 2c 31 34 29 3d c3  |xt(matchW%,14)=.|
00023cf0  28 74 69 6d 65 25 20 81  20 31 30 30 29 2b 22 2e  |(time% . 100)+".|
00023d00  22 2b c3 28 74 69 6d 65  25 20 83 20 31 30 30 29  |"+.(time% . 100)|
00023d10  2b 22 20 73 65 63 22 0d  14 18 1c f2 72 65 64 72  |+" sec".....redr|
00023d20  61 77 5f 69 63 6f 6e 28  6d 61 74 63 68 57 25 2c  |aw_icon(matchW%,|
00023d30  31 34 29 0d 14 19 18 c8  99 20 22 48 6f 75 72 67  |14)...... "Hourg|
00023d40  6c 61 73 73 5f 53 6d 61  73 68 22 0d 14 1a 33 e7  |lass_Smash"...3.|
00023d50  20 66 6f 72 6d 61 74 24  3c 3e 22 6c 61 62 65 6c  | format$<>"label|
00023d60  22 20 80 20 64 69 73 70  6c 61 79 65 64 25 3d a3  |" . displayed%=.|
00023d70  20 8c 20 f2 74 6f 74 61  6c 5f 6c 69 73 74 0d 14  | . .total_list..|
00023d80  1b 14 c8 8e 20 72 65 70  6f 72 74 64 65 73 74 24  |.... reportdest$|
00023d90  20 ca 0d 14 1c 11 20 20  c9 20 22 57 69 6e 64 6f  | .....  . "Windo|
00023da0  77 22 3a 0d 14 1d 40 20  20 e7 20 28 ac 20 73 63  |w":...@  . (. sc|
00023db0  72 69 70 74 6f 6e 25 29  20 80 20 28 ac 20 a4 73  |ripton%) . (. .s|
00023dc0  65 6c 65 63 74 65 64 28  6d 61 74 63 68 57 25 2c  |elected(matchW%,|
00023dd0  32 37 29 29 20 8c 20 f2  73 63 72 65 65 6e 5f 6c  |27)) . .screen_l|
00023de0  69 73 74 0d 14 1e 3e 20  20 f2 65 78 74 65 6e 64  |ist...>  .extend|
00023df0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00023e00  6c 6f 63 6b 28 74 65 78  74 61 6e 63 68 6f 72 25  |lock(textanchor%|
00023e10  2c 43 6f 75 6e 74 25 2a  4c 65 6e 4c 69 6e 65 25  |,Count%*LenLine%|
00023e20  29 0d 14 1f 0f 20 20 c9  20 22 46 69 6c 65 22 3a  |)....  . "File":|
00023e30  0d 14 20 36 20 20 f2 63  6c 6f 73 65 5f 66 69 6c  |.. 6  .close_fil|
00023e40  65 28 74 65 78 74 68 61  6e 64 6c 65 25 29 3a c8  |e(texthandle%):.|
00023e50  99 20 22 4f 53 5f 46 69  6c 65 22 2c 31 38 2c 66  |. "OS_File",18,f|
00023e60  24 2c 26 66 66 66 0d 14  21 1b 20 20 f2 63 6c 6f  |$,&fff..!.  .clo|
00023e70  73 65 5f 77 69 6e 64 6f  77 28 73 61 76 65 57 25  |se_window(saveW%|
00023e80  29 0d 14 22 12 20 20 c9  20 22 50 72 69 6e 74 65  |)..".  . "Printe|
00023e90  72 22 3a 0d 14 23 40 20  20 f2 65 78 74 65 6e 64  |r":..#@  .extend|
00023ea0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00023eb0  6c 6f 63 6b 28 74 65 78  74 61 6e 63 68 6f 72 25  |lock(textanchor%|
00023ec0  2c 43 6f 75 6e 74 25 2a  4c 65 6e 4c 69 6e 65 25  |,Count%*LenLine%|
00023ed0  2b 31 29 0d 14 24 42 20  20 53 74 61 72 74 25 3d  |+1)..$B  Start%=|
00023ee0  21 74 65 78 74 61 6e 63  68 6f 72 25 3a 45 6e 64  |!textanchor%:End|
00023ef0  25 3d 53 74 61 72 74 25  2b 43 6f 75 6e 74 25 2a  |%=Start%+Count%*|
00023f00  4c 65 6e 4c 69 6e 65 25  2b 31 3a 54 79 70 65 25  |LenLine%+1:Type%|
00023f10  3d 26 66 66 66 0d 14 25  29 20 20 24 53 74 61 72  |=&fff..%)  $Star|
00023f20  74 25 3d 70 69 74 63 68  24 3a 3f 28 45 6e 64 25  |t%=pitch$:?(End%|
00023f30  2d 31 29 3d 30 3a 3f 45  6e 64 25 3d 31 32 0d 14  |-1)=0:?End%=12..|
00023f40  26 3b 20 20 62 6c 6f 63  6b 25 21 30 3d 32 35 36  |&;  block%!0=256|
00023f50  3a 62 6c 6f 63 6b 25 21  31 32 3d 30 3a 62 6c 6f  |:block%!12=0:blo|
00023f60  63 6b 25 21 31 36 3d 26  38 30 31 34 32 3a 62 6c  |ck%!16=&80142:bl|
00023f70  6f 63 6b 25 21 32 30 3d  30 0d 14 27 44 20 20 62  |ock%!20=0..'D  b|
00023f80  6c 6f 63 6b 25 21 32 34  3d 30 3a 62 6c 6f 63 6b  |lock%!24=0:block|
00023f90  25 21 32 38 3d 30 3a 62  6c 6f 63 6b 25 21 33 32  |%!28=0:block%!32|
00023fa0  3d 30 3a 62 6c 6f 63 6b  25 21 33 36 3d 30 3a 62  |=0:block%!36=0:b|
00023fb0  6c 6f 63 6b 25 21 34 30  3d 26 66 66 66 0d 14 28  |lock%!40=&fff..(|
00023fc0  19 20 20 24 28 62 6c 6f  63 6b 25 2b 34 34 29 3d  |.  $(block%+44)=|
00023fd0  22 4c 69 73 74 22 0d 14  29 27 20 20 c8 99 20 22  |"List"..)'  .. "|
00023fe0  57 69 6d 70 5f 53 65 6e  64 4d 65 73 73 61 67 65  |Wimp_SendMessage|
00023ff0  22 2c 31 38 2c 62 6c 6f  63 6b 25 2c 30 0d 14 2a  |",18,block%,0..*|
00024000  05 cb 0d 14 2b 29 70 72  69 6e 74 69 6e 67 25 3d  |....+)printing%=|
00024010  a3 3a 73 63 72 69 70 74  6f 6e 25 3d a3 3a 73 61  |.:scripton%=.:sa|
00024020  76 65 74 6f 66 69 6c 65  25 3d a3 0d 14 2c 1c f2  |vetofile%=...,..|
00024030  6c 69 74 28 6d 65 6e 75  25 28 30 29 2c 32 2c 4d  |lit(menu%(0),2,M|
00024040  6f 64 69 66 79 25 29 0d  14 2d 1b f2 6c 69 6d 69  |odify%)..-..limi|
00024050  74 5f 61 63 74 69 6f 6e  73 28 41 63 63 65 73 73  |t_actions(Access|
00024060  25 29 0d 14 2e 1d f2 63  6c 6f 73 65 5f 66 69 6c  |%).....close_fil|
00024070  65 28 64 62 61 73 65 68  61 6e 64 6c 65 25 29 0d  |e(dbasehandle%).|
00024080  14 2f 05 e1 0d 14 30 05  3a 0d 14 31 23 dd 20 f2  |./....0.:..1#. .|
00024090  66 69 6e 64 5f 6d 61 78  5f 6c 65 6e 67 74 68 73  |find_max_lengths|
000240a0  28 64 69 73 70 6c 61 79  65 64 25 29 0d 14 32 0b  |(displayed%)..2.|
000240b0  ea 20 50 25 2c 6b 24 0d  14 33 07 ea 20 85 0d 14  |. P%,k$..3.. ...|
000240c0  34 1d ee 20 85 20 ea 3a  f7 20 85 3a f2 65 6e 64  |4.. . .:. .:.end|
000240d0  5f 66 69 6e 64 5f 6d 61  78 3a e1 0d 14 35 0f 6d  |_find_max:...5.m|
000240e0  61 78 6c 65 6e 25 28 29  3d 30 0d 14 36 2a 64 62  |axlen%()=0..6*db|
000240f0  61 73 65 68 61 6e 64 6c  65 25 3d 8e 28 24 64 61  |asehandle%=.($da|
00024100  74 61 62 61 73 65 25 2b  22 2e 44 61 74 61 62 61  |tabase%+".Databa|
00024110  73 65 22 29 0d 14 37 15  c8 99 20 22 48 6f 75 72  |se")..7... "Hour|
00024120  67 6c 61 73 73 5f 4f 6e  22 0d 14 38 1b c8 99 20  |glass_On"..8... |
00024130  22 48 6f 75 72 67 6c 61  73 73 5f 4c 45 44 73 22  |"Hourglass_LEDs"|
00024140  2c 25 31 31 0d 14 39 12  e7 20 64 69 73 70 6c 61  |,%11..9.. displa|
00024150  79 65 64 25 20 8c 0d 14  3a 25 20 20 f2 72 65 61  |yed% ...:%  .rea|
00024160  64 73 6d 61 72 72 61 79  28 64 62 61 73 65 68 61  |dsmarray(dbaseha|
00024170  6e 64 6c 65 25 2c 52 45  43 25 29 0d 14 3b 12 20  |ndle%,REC%)..;. |
00024180  20 f2 67 65 74 5f 6c 65  6e 67 74 68 73 0d 14 3c  | .get_lengths..<|
00024190  07 20 20 cc 0d 14 3d 2e  20 20 e7 20 75 73 65 6b  |.  ...=.  . usek|
000241a0  65 79 25 3d 2d 31 20 84  20 a4 73 65 6c 65 63 74  |ey%=-1 . .select|
000241b0  65 64 28 6d 61 74 63 68  57 25 2c 32 33 29 3d a3  |ed(matchW%,23)=.|
000241c0  20 8c 0d 14 3e 21 20 20  20 20 50 25 3d a4 6e 65  | ...>!    P%=.ne|
000241d0  69 67 68 62 6f 75 72 28  6b 65 79 25 2c 74 6f 70  |ighbour(key%,top|
000241e0  2c 31 29 0d 14 3f 24 20  20 20 20 f2 73 63 61 6e  |,1)..?$    .scan|
000241f0  5f 66 69 6c 65 28 22 50  25 3c 3e 74 6f 70 22 2c  |_file("P%<>top",|
00024200  6b 65 79 25 2c 30 29 0d  14 40 09 20 20 20 20 cc  |key%,0)..@.    .|
00024210  0d 14 41 25 20 20 20 20  50 25 3d a4 73 65 61 72  |..A%    P%=.sear|
00024220  63 68 28 75 73 65 76 61  6c 24 2c 75 73 65 6b 65  |ch(useval$,useke|
00024230  79 25 2c 31 29 0d 14 42  11 20 20 20 20 e7 20 50  |y%,1)..B.    . P|
00024240  25 3e 3d 30 20 8c 0d 14  43 14 20 20 20 20 20 20  |%>=0 ...C.      |
00024250  6b 24 3d 75 73 65 76 61  6c 24 0d 14 44 38 20 20  |k$=useval$..D8  |
00024260  20 20 20 20 f2 73 63 61  6e 5f 66 69 6c 65 28 22  |    .scan_file("|
00024270  50 25 3c 3e 74 6f 70 20  41 4e 44 20 6b 24 3d 75  |P%<>top AND k$=u|
00024280  73 65 76 61 6c 24 22 2c  75 73 65 6b 65 79 25 2c  |seval$",usekey%,|
00024290  30 29 0d 14 45 09 20 20  20 20 cd 0d 14 46 07 20  |0)..E.    ...F. |
000242a0  20 cd 0d 14 47 05 cd 0d  14 48 1b c8 99 20 22 48  | ...G....H... "H|
000242b0  6f 75 72 67 6c 61 73 73  5f 4c 45 44 73 22 2c 25  |ourglass_LEDs",%|
000242c0  30 30 0d 14 49 16 c8 99  20 22 48 6f 75 72 67 6c  |00..I... "Hourgl|
000242d0  61 73 73 5f 4f 66 66 22  0d 14 4a 1d f2 63 6c 6f  |ass_Off"..J..clo|
000242e0  73 65 5f 66 69 6c 65 28  64 62 61 73 65 68 61 6e  |se_file(dbasehan|
000242f0  64 6c 65 25 29 0d 14 4b  05 e1 0d 14 4c 05 3a 0d  |dle%)..K....L.:.|
00024300  14 4d 12 dd 20 f2 67 65  74 5f 6c 65 6e 67 74 68  |.M.. .get_length|
00024310  73 0d 14 4e 14 ea 20 49  25 2c 4c 25 2c 46 25 2c  |s..N.. I%,L%,F%,|
00024320  6c 25 2c 46 24 0d 14 4f  17 49 25 3d 2d 31 3a 4c  |l%,F$..O.I%=-1:L|
00024330  25 3d a9 28 46 6f 72 6d  24 29 2d 31 0d 14 50 0c  |%=.(Form$)-1..P.|
00024340  c8 95 20 49 25 3c 4c 25  0d 14 51 35 20 20 49 25  |.. I%<L%..Q5  I%|
00024350  2b 3d 32 3a 46 25 3d a4  66 6e 75 6d 28 c1 46 6f  |+=2:F%=.fnum(.Fo|
00024360  72 6d 24 2c 49 25 2c 32  29 29 3a 46 24 3d 46 24  |rm$,I%,2)):F$=F$|
00024370  28 46 25 29 3a 6c 25 3d  a9 28 46 24 29 0d 14 52  |(F%):l%=.(F$)..R|
00024380  27 20 20 e7 20 6c 25 3e  6d 61 78 6c 65 6e 25 28  |'  . l%>maxlen%(|
00024390  46 25 29 20 8c 20 6d 61  78 6c 65 6e 25 28 46 25  |F%) . maxlen%(F%|
000243a0  29 3d 6c 25 0d 14 53 05  ce 0d 14 54 05 e1 0d 14  |)=l%..S....T....|
000243b0  55 05 3a 0d 14 56 13 dd  20 f2 65 6e 64 5f 66 69  |U.:..V.. .end_fi|
000243c0  6e 64 5f 6d 61 78 0d 14  57 18 c8 99 20 22 48 6f  |nd_max..W... "Ho|
000243d0  75 72 67 6c 61 73 73 5f  53 6d 61 73 68 22 0d 14  |urglass_Smash"..|
000243e0  58 1d f2 63 6c 6f 73 65  5f 66 69 6c 65 28 64 62  |X..close_file(db|
000243f0  61 73 65 68 61 6e 64 6c  65 25 29 0d 14 59 14 6d  |asehandle%)..Y.m|
00024400  61 78 6c 65 6e 25 28 29  3d 6c 65 6e 25 28 29 0d  |axlen%()=len%().|
00024410  14 5a 0c e7 20 9f 3d 31  37 20 8c 0d 14 5b 17 20  |.Z.. .=17 ...[. |
00024420  20 f2 73 6f 66 74 65 72  72 6f 72 28 22 22 2c 37  | .softerror("",7|
00024430  30 29 0d 14 5c 1d 20 20  cc 20 f2 77 69 6d 70 5f  |0)..\.  . .wimp_|
00024440  65 72 72 6f 72 28 b9 2c  9f 2c 9e 2c f6 24 29 0d  |error(.,.,.,.$).|
00024450  14 5d 05 cd 0d 14 5e 05  e1 0d 14 5f 05 3a 0d 14  |.]....^...._.:..|
00024460  60 19 dd 20 f2 70 72 69  6e 74 5f 72 65 63 6f 72  |`.. .print_recor|
00024470  64 28 52 45 43 25 29 0d  14 61 2b ea 20 49 25 2c  |d(REC%)..a+. I%,|
00024480  46 25 2c 4e 25 2c 46 24  2c 53 46 24 2c 54 61 62  |F%,N%,F$,SF$,Tab|
00024490  25 2c 6e 24 2c 79 24 2c  62 61 73 65 25 2c 70 6f  |%,n$,y$,base%,po|
000244a0  73 25 0d 14 62 24 e7 20  66 6f 72 6d 61 74 24 3c  |s%..b$. format$<|
000244b0  3e 22 6c 61 62 65 6c 22  20 8c 20 70 72 69 6e 74  |>"label" . print|
000244c0  65 64 25 2b 3d 31 0d 14  63 1f e7 20 a4 73 65 6c  |ed%+=1..c.. .sel|
000244d0  65 63 74 65 64 28 6d 61  74 63 68 57 25 2c 32 37  |ected(matchW%,27|
000244e0  29 20 8c 20 e1 0d 14 64  2d 74 68 69 73 72 6f 77  |) . ...d-thisrow|
000244f0  25 3d 2d 31 3a 62 61 73  65 25 3d 21 6c 69 6e 65  |%=-1:base%=!line|
00024500  61 6e 63 68 6f 72 25 3a  70 6f 73 25 3d 62 61 73  |anchor%:pos%=bas|
00024510  65 25 0d 14 65 36 f2 68  65 61 70 5f 73 74 6f 72  |e%..e6.heap_stor|
00024520  65 28 6c 69 6e 65 61 6e  63 68 6f 72 25 2c 4c 65  |e(lineanchor%,Le|
00024530  6e 4c 69 6e 65 25 2c 30  2c 70 6f 73 25 2c 30 2c  |nLine%,0,pos%,0,|
00024540  6d 61 72 67 69 6e 24 29  0d 14 66 1b e3 20 49 25  |margin$)..f.. I%|
00024550  3d 31 20 b8 20 a9 28 46  6f 72 6d 24 29 2d 31 20  |=1 . .(Form$)-1 |
00024560  88 20 32 0d 14 67 1c 20  20 46 25 3d a4 66 6e 75  |. 2..g.  F%=.fnu|
00024570  6d 28 c1 46 6f 72 6d 24  2c 49 25 2c 32 29 29 0d  |m(.Form$,I%,2)).|
00024580  14 68 2d 20 20 e7 20 66  6f 72 6d 61 74 24 3d 22  |.h-  . format$="|
00024590  6c 61 62 65 6c 22 20 8c  20 6e 65 77 6c 69 6e 65  |label" . newline|
000245a0  25 3d ac 20 6e 65 77 6c  69 6e 65 25 0d 14 69 0b  |%=. newline%..i.|
000245b0  20 20 4e 25 2b 3d 31 0d  14 6a 1f 20 20 e7 20 a4  |  N%+=1..j.  . .|
000245c0  73 65 6c 65 63 74 65 64  28 70 72 69 6e 74 57 25  |selected(printW%|
000245d0  2c 31 31 29 20 8c 0d 14  6b 2d 20 20 20 20 46 24  |,11) ...k-    F$|
000245e0  3d a4 65 78 70 61 6e 64  28 46 24 28 46 25 29 2c  |=.expand(F$(F%),|
000245f0  6c 69 6e 6b 24 28 46 25  29 2c 4c 65 6e 25 2c 53  |link$(F%),Len%,S|
00024600  46 24 29 0d 14 6c 09 20  20 20 20 cc 0d 14 6d 21  |F$)..l.    ...m!|
00024610  20 20 20 20 46 24 3d 46  24 28 46 25 29 3a 4c 65  |    F$=F$(F%):Le|
00024620  6e 25 3d 6c 65 6e 25 28  46 25 29 2b 32 0d 14 6e  |n%=len%(F%)+2..n|
00024630  1a 20 20 20 20 c8 8e 20  63 68 61 72 74 79 70 65  |.    .. chartype|
00024640  25 28 46 25 29 20 ca 0d  14 6f 1b 20 20 20 20 20  |%(F%) ...o.     |
00024650  20 c9 20 34 31 2c 34 32  2c 34 33 2c 34 34 2c 34  | . 41,42,43,44,4|
00024660  35 3a 0d 14 70 1e 20 20  20 20 20 20 5a 25 3d a4  |5:..p.      Z%=.|
00024670  6e 6f 5f 79 65 73 28 46  25 2c 6e 24 2c 79 24 29  |no_yes(F%,n$,y$)|
00024680  0d 14 71 22 20 20 20 20  20 20 e7 20 46 24 3d 22  |..q"      . F$="|
00024690  20 22 20 8c 20 46 24 3d  79 24 20 8b 20 46 24 3d  | " . F$=y$ . F$=|
000246a0  6e 24 0d 14 72 21 20 20  20 20 20 20 c9 20 33 2c  |n$..r!      . 3,|
000246b0  36 2c 38 2c 34 36 2c 34  37 2c 35 34 2c 35 36 2c  |6,8,46,47,54,56,|
000246c0  35 37 3a 0d 14 73 2d 20  20 20 20 20 20 f2 73 75  |57:..s-      .su|
000246d0  6d 73 28 46 24 2c 63 61  6c 63 72 6f 77 25 3f 46  |ms(F$,calcrow%?F|
000246e0  25 2c 63 68 61 72 74 79  70 65 25 28 46 25 29 29  |%,chartype%(F%))|
000246f0  0d 14 74 1c 20 20 20 20  20 20 e7 20 66 6f 72 6d  |..t.      . form|
00024700  61 74 24 3d 22 76 65 72  74 22 20 8c 0d 14 75 26  |at$="vert" ...u&|
00024710  20 20 20 20 20 20 20 20  46 24 3d c4 6c 65 6e 25  |        F$=.len%|
00024720  28 46 25 29 2d a9 28 46  24 29 2c 22 20 22 29 2b  |(F%)-.(F$)," ")+|
00024730  46 24 0d 14 76 25 20 20  20 20 20 20 20 20 cc 20  |F$..v%        . |
00024740  46 24 3d a4 6a 75 73 74  69 66 79 28 46 24 2c 4e  |F$=.justify(F$,N|
00024750  25 2c 4e 25 2d 31 29 0d  14 77 0b 20 20 20 20 20  |%,N%-1)..w.     |
00024760  20 cd 0d 14 78 09 20 20  20 20 cb 0d 14 79 07 20  | ...x.    ...y. |
00024770  20 cd 0d 14 7a 29 20 20  e7 20 a4 73 65 6c 65 63  | ...z)  . .selec|
00024780  74 65 64 28 70 72 69 6e  74 57 25 2c 31 32 29 20  |ted(printW%,12) |
00024790  8c 20 46 24 3d a4 75 28  46 24 29 0d 14 7b 18 20  |. F$=.u(F$)..{. |
000247a0  20 c8 8e 20 63 68 61 72  74 79 70 65 25 28 46 25  | .. chartype%(F%|
000247b0  29 20 ca 0d 14 7c 1a 20  20 20 20 c9 20 33 37 3a  |) ...|.    . 37:|
000247c0  46 24 3d 22 3c 53 70 72  69 74 65 3e 22 0d 14 7d  |F$="<Sprite>"..}|
000247d0  1c 20 20 20 20 c9 20 33  38 3a 46 24 3d 22 3c 44  |.    . 38:F$="<D|
000247e0  72 61 77 66 69 6c 65 3e  22 0d 14 7e 07 20 20 cb  |rawfile>"..~.  .|
000247f0  0d 14 7f 12 20 20 c8 8e  20 66 6f 72 6d 61 74 24  |....  .. format$|
00024800  20 ca 0d 14 80 1a 20 20  20 20 c9 20 22 68 6f 72  | .....    . "hor|
00024810  69 7a 22 2c 22 74 61 62  6c 65 22 3a 0d 14 81 3e  |iz","table":...>|
00024820  20 20 20 20 f2 68 65 61  70 5f 73 74 6f 72 65 28  |    .heap_store(|
00024830  6c 69 6e 65 61 6e 63 68  6f 72 25 2c 4c 65 6e 4c  |lineanchor%,LenL|
00024840  69 6e 65 25 2c 30 2c 70  6f 73 25 2c 30 2c a4 74  |ine%,0,pos%,0,.t|
00024850  61 62 28 46 24 2c 4e 25  29 29 0d 14 82 11 20 20  |ab(F$,N%))....  |
00024860  20 20 c9 20 22 76 65 72  74 22 3a 0d 14 83 52 20  |  . "vert":...R |
00024870  20 20 20 e7 20 a4 73 65  6c 65 63 74 65 64 28 70  |   . .selected(p|
00024880  72 69 6e 74 57 25 2c 32  29 20 8c 20 48 65 61 64  |rintW%,2) . Head|
00024890  24 3d 24 a4 74 65 78 74  28 6d 61 69 6e 57 25 2c  |$=$.text(mainW%,|
000248a0  28 64 65 73 63 25 28 46  25 29 29 29 20 8b 20 48  |(desc%(F%))) . H|
000248b0  65 61 64 24 3d 54 61 67  24 28 46 25 29 0d 14 84  |ead$=Tag$(F%)...|
000248c0  38 20 20 20 20 48 65 61  64 24 3d 6d 61 72 67 69  |8    Head$=margi|
000248d0  6e 24 2b c4 54 61 62 25  28 31 29 2d a9 28 48 65  |n$+.Tab%(1)-.(He|
000248e0  61 64 24 29 2c 22 20 22  29 2b 48 65 61 64 24 2b  |ad$)," ")+Head$+|
000248f0  22 20 3a 20 22 0d 14 85  24 20 20 20 20 70 6f 73  |" : "...$    pos|
00024900  25 3d 62 61 73 65 25 3a  4c 25 3d a9 28 48 65 61  |%=base%:L%=.(Hea|
00024910  64 24 29 2b a9 28 46 24  29 0d 14 86 38 20 20 20  |d$)+.(F$)...8   |
00024920  20 f2 68 65 61 70 5f 73  74 6f 72 65 28 6c 69 6e  | .heap_store(lin|
00024930  65 61 6e 63 68 6f 72 25  2c 4c 65 6e 4c 69 6e 65  |eanchor%,LenLine|
00024940  25 2c 30 2c 70 6f 73 25  2c 30 2c 48 65 61 64 24  |%,0,pos%,0,Head$|
00024950  29 0d 14 87 35 20 20 20  20 f2 68 65 61 70 5f 73  |)...5    .heap_s|
00024960  74 6f 72 65 28 6c 69 6e  65 61 6e 63 68 6f 72 25  |tore(lineanchor%|
00024970  2c 4c 65 6e 4c 69 6e 65  25 2c 30 2c 70 6f 73 25  |,LenLine%,0,pos%|
00024980  2c 30 2c 46 24 29 0d 14  88 2a 20 20 20 20 f2 6c  |,0,F$)...*    .l|
00024990  69 73 74 5f 6c 69 6e 65  28 52 45 43 25 2c 6c 69  |ist_line(REC%,li|
000249a0  6e 65 61 6e 63 68 6f 72  25 2c 4c 25 2c 33 32 29  |neanchor%,L%,32)|
000249b0  0d 14 89 44 20 20 20 20  e7 20 63 68 61 72 74 79  |...D    . charty|
000249c0  70 65 25 28 46 25 29 3d  33 36 20 84 20 63 68 61  |pe%(F%)=36 . cha|
000249d0  72 74 79 70 65 25 28 46  25 29 3d 33 39 20 8c 20  |rtype%(F%)=39 . |
000249e0  f2 70 72 69 6e 74 5f 6d  65 6d 6f 28 52 45 43 25  |.print_memo(REC%|
000249f0  2c 46 25 29 0d 14 8a 23  20 20 20 20 f2 65 78 74  |,F%)...#    .ext|
00024a00  72 61 5f 6c 69 6e 65 73  28 6c 69 6e 65 66 65 65  |ra_lines(linefee|
00024a10  64 25 2d 31 2c 30 29 0d  14 8b 12 20 20 20 20 c9  |d%-1,0)....    .|
00024a20  20 22 6c 61 62 65 6c 22  3a 0d 14 8c 14 20 20 20  | "label":....   |
00024a30  20 e7 20 6e 65 77 6c 69  6e 65 25 20 8c 0d 14 8d  | . newline% ....|
00024a40  6e 20 20 20 20 20 20 e7  20 28 46 24 3c 3e 22 22  |n      . (F$<>""|
00024a50  20 84 20 a4 73 65 6c 65  63 74 65 64 28 6c 61 62  | . .selected(lab|
00024a60  65 6c 57 25 2c 31 36 29  3d a3 29 20 80 20 74 68  |elW%,16)=.) . th|
00024a70  69 73 72 6f 77 25 3c 3d  6c 61 62 72 65 70 6c 25  |isrow%<=labrepl%|
00024a80  20 8c 20 74 68 69 73 72  6f 77 25 2b 3d 31 3a 4c  | . thisrow%+=1:L|
00024a90  61 62 65 6c 24 28 74 68  69 73 72 6f 77 25 2c 74  |abel$(thisrow%,t|
00024aa0  68 69 73 6c 61 62 25 29  3d 46 24 0d 14 8e 0b 20  |hislab%)=F$.... |
00024ab0  20 20 20 20 20 cc 0d 14  8f 2f 20 20 20 20 20 20  |     ..../      |
00024ac0  4c 61 62 65 6c 24 28 74  68 69 73 72 6f 77 25 2c  |Label$(thisrow%,|
00024ad0  74 68 69 73 6c 61 62 25  29 2b 3d 73 70 61 63 65  |thislab%)+=space|
00024ae0  72 24 2b 46 24 0d 14 90  09 20 20 20 20 cd 0d 14  |r$+F$....    ...|
00024af0  91 07 20 20 cb 0d 14 92  08 ed 20 49 25 0d 14 93  |..  ...... I%...|
00024b00  10 c8 8e 20 66 6f 72 6d  61 74 24 20 ca 0d 14 94  |... format$ ....|
00024b10  10 20 20 c9 20 22 68 6f  72 69 7a 22 3a 0d 14 95  |.  . "horiz":...|
00024b20  30 20 20 f2 6c 69 73 74  5f 6c 69 6e 65 28 52 45  |0  .list_line(RE|
00024b30  43 25 2c 6c 69 6e 65 61  6e 63 68 6f 72 25 2c 70  |C%,lineanchor%,p|
00024b40  6f 73 25 2d 62 61 73 65  25 2c 33 32 29 0d 14 96  |os%-base%,32)...|
00024b50  21 20 20 f2 65 78 74 72  61 5f 6c 69 6e 65 73 28  |!  .extra_lines(|
00024b60  6c 69 6e 65 66 65 65 64  25 2d 31 2c 30 29 0d 14  |linefeed%-1,0)..|
00024b70  97 0f 20 20 c9 20 22 76  65 72 74 22 3a 0d 14 98  |..  . "vert":...|
00024b80  13 20 20 f2 72 75 6c 65  5f 6f 66 66 28 34 35 29  |.  .rule_off(45)|
00024b90  0d 14 99 10 20 20 c9 20  22 74 61 62 6c 65 22 3a  |....  . "table":|
00024ba0  0d 14 9a 18 20 20 63 6f  6c 70 6f 73 25 3d 70 6f  |....  colpos%=po|
00024bb0  73 25 2d 62 61 73 65 25  0d 14 9b 38 20 20 f2 68  |s%-base%...8  .h|
00024bc0  65 61 70 5f 73 74 6f 72  65 28 6c 69 6e 65 61 6e  |eap_store(linean|
00024bd0  63 68 6f 72 25 2c 4c 65  6e 4c 69 6e 65 25 2c 30  |chor%,LenLine%,0|
00024be0  2c 70 6f 73 25 2c 30 2c  63 6f 6c 75 6d 6e 24 29  |,pos%,0,column$)|
00024bf0  0d 14 9c 30 20 20 f2 6c  69 73 74 5f 6c 69 6e 65  |...0  .list_line|
00024c00  28 52 45 43 25 2c 6c 69  6e 65 61 6e 63 68 6f 72  |(REC%,lineanchor|
00024c10  25 2c 70 6f 73 25 2d 62  61 73 65 25 2c 33 32 29  |%,pos%-base%,32)|
00024c20  0d 14 9d 27 20 20 f2 65  78 74 72 61 5f 6c 69 6e  |...'  .extra_lin|
00024c30  65 73 28 6c 69 6e 65 66  65 65 64 25 2d 31 2c 63  |es(linefeed%-1,c|
00024c40  6f 6c 70 6f 73 25 29 0d  14 9e 10 20 20 c9 20 22  |olpos%)....  . "|
00024c50  6c 61 62 65 6c 22 3a 0d  14 9f 2c 20 20 4c 61 62  |label":...,  Lab|
00024c60  65 6c 24 28 6c 61 62 72  65 70 6c 25 2b 31 2c 74  |el$(labrepl%+1,t|
00024c70  68 69 73 6c 61 62 25 29  3d a4 6b 65 79 32 28 30  |hislab%)=.key2(0|
00024c80  2c 31 29 0d 14 a0 33 20  20 74 68 69 73 6c 61 62  |,1)...3  thislab|
00024c90  25 2b 3d 31 3a e7 20 74  68 69 73 6c 61 62 25 3e  |%+=1:. thislab%>|
00024ca0  6c 61 62 75 70 25 20 8c  20 f2 70 72 69 6e 74 5f  |labup% . .print_|
00024cb0  6c 61 62 65 6c 73 0d 14  a1 05 cb 0d 14 a2 18 e7  |labels..........|
00024cc0  20 66 6f 72 6d 61 74 24  3c 3e 22 6c 61 62 65 6c  | format$<>"label|
00024cd0  22 20 8c 0d 14 a3 4f 20  20 e7 20 28 70 72 69 6e  |" ....O  . (prin|
00024ce0  74 65 64 25 20 83 20 4c  69 6e 65 73 50 65 72 50  |ted% . LinesPerP|
00024cf0  61 67 65 25 29 3d 30 20  80 20 a4 73 65 6c 65 63  |age%)=0 . .selec|
00024d00  74 65 64 28 70 72 69 6e  74 57 25 2c 31 30 29 3d  |ted(printW%,10)=|
00024d10  a3 20 80 20 64 69 73 70  6c 61 79 65 64 25 3d a3  |. . displayed%=.|
00024d20  20 8c 0d 14 a4 4e 20 20  20 20 24 28 21 6c 69 6e  | ....N    $(!lin|
00024d30  65 61 6e 63 68 6f 72 25  29 3d 6d 61 72 67 69 6e  |eanchor%)=margin|
00024d40  24 2b bd 28 31 32 29 3a  f2 6c 69 73 74 5f 6c 69  |$+.(12):.list_li|
00024d50  6e 65 28 2d 31 2c 6c 69  6e 65 61 6e 63 68 6f 72  |ne(-1,lineanchor|
00024d60  25 2c 4c 6d 61 72 67 69  6e 25 2b 31 2c 33 32 29  |%,Lmargin%+1,32)|
00024d70  0d 14 a5 15 20 20 20 20  f2 6c 69 73 74 5f 68 65  |....    .list_he|
00024d80  61 64 28 31 29 0d 14 a6  07 20 20 cd 0d 14 a7 05  |ad(1)....  .....|
00024d90  cd 0d 14 a8 05 e1 0d 14  a9 05 3a 0d 14 aa 1c dd  |..........:.....|
00024da0  20 f2 65 78 74 72 61 5f  6c 69 6e 65 73 28 65 78  | .extra_lines(ex|
00024db0  25 2c 74 61 62 25 29 0d  14 ab 10 ea 20 62 61 73  |%,tab%)..... bas|
00024dc0  65 25 2c 70 6f 73 25 0d  14 ac 0c c8 95 20 65 78  |e%,pos%...... ex|
00024dd0  25 3e 30 0d 14 ad 0f 20  20 c8 8e 20 74 61 62 25  |%>0....  .. tab%|
00024de0  20 ca 0d 14 ae 19 20 20  20 20 c9 20 30 3a f2 72  | .....    . 0:.r|
00024df0  75 6c 65 5f 6f 66 66 28  33 32 29 0d 14 af 0a 20  |ule_off(32).... |
00024e00  20 20 20 7f 3a 0d 14 b0  25 20 20 20 20 62 61 73  |   .:...%    bas|
00024e10  65 25 3d 21 6c 69 6e 65  61 6e 63 68 6f 72 25 3a  |e%=!lineanchor%:|
00024e20  70 6f 73 25 3d 62 61 73  65 25 0d 14 b1 17 20 20  |pos%=base%....  |
00024e30  20 20 e3 20 49 25 3d 30  20 b8 20 74 61 62 25 2d  |  . I%=0 . tab%-|
00024e40  31 0d 14 b2 14 20 20 20  20 20 20 70 6f 73 25 3f  |1....      pos%?|
00024e50  49 25 3d 33 32 0d 14 b3  0c 20 20 20 20 ed 20 49  |I%=32....    . I|
00024e60  25 0d 14 b4 12 20 20 20  20 70 6f 73 25 2b 3d 74  |%....    pos%+=t|
00024e70  61 62 25 0d 14 b5 3a 20  20 20 20 f2 68 65 61 70  |ab%...:    .heap|
00024e80  5f 73 74 6f 72 65 28 6c  69 6e 65 61 6e 63 68 6f  |_store(lineancho|
00024e90  72 25 2c 4c 65 6e 4c 69  6e 65 25 2c 30 2c 70 6f  |r%,LenLine%,0,po|
00024ea0  73 25 2c 30 2c 63 6f 6c  75 6d 6e 24 29 0d 14 b6  |s%,0,column$)...|
00024eb0  32 20 20 20 20 f2 6c 69  73 74 5f 6c 69 6e 65 28  |2    .list_line(|
00024ec0  52 45 43 25 2c 6c 69 6e  65 61 6e 63 68 6f 72 25  |REC%,lineanchor%|
00024ed0  2c 70 6f 73 25 2d 62 61  73 65 25 2c 33 32 29 0d  |,pos%-base%,32).|
00024ee0  14 b7 07 20 20 cb 0d 14  b8 0c 20 20 65 78 25 2d  |...  .....  ex%-|
00024ef0  3d 31 0d 14 b9 05 ce 0d  14 ba 05 e1 0d 14 bb 05  |=1..............|
00024f00  3a 0d 14 bc 18 dd 20 f2  70 72 69 6e 74 5f 6d 65  |:..... .print_me|
00024f10  6d 6f 28 52 25 2c 46 25  29 0d 14 bd 2e ea 20 74  |mo(R%,F%)..... t|
00024f20  65 78 74 25 2c 42 25 2c  46 24 2c 73 70 25 2c 4c  |ext%,B%,F$,sp%,L|
00024f30  25 2c 72 65 6d 24 2c 62  61 73 65 25 2c 70 6f 73  |%,rem$,base%,pos|
00024f40  25 2c 4c 69 6e 65 24 0d  14 be 2f e7 20 a4 62 6c  |%,Line$.../. .bl|
00024f50  6f 62 5f 70 61 74 68 28  a3 2c 24 64 61 74 61 62  |ob_path(.,$datab|
00024f60  61 73 65 25 2c 52 25 2c  46 25 2c 33 36 2c 46 24  |ase%,R%,F%,36,F$|
00024f70  29 3e 3d 30 20 8c 0d 14  bf 11 20 20 74 65 78 74  |)>=0 .....  text|
00024f80  25 3d 8e 28 46 24 29 0d  14 c0 12 20 20 c8 95 20  |%=.(F$)....  .. |
00024f90  ac 20 c5 23 74 65 78 74  25 0d 14 c1 26 20 20 20  |. .#text%...&   |
00024fa0  20 4c 69 6e 65 24 3d 6d  61 72 67 69 6e 24 2b 72  | Line$=margin$+r|
00024fb0  65 6d 24 3a 4c 25 3d a9  28 4c 69 6e 65 24 29 0d  |em$:L%=.(Line$).|
00024fc0  14 c2 09 20 20 20 20 f5  0d 14 c3 14 20 20 20 20  |...    .....    |
00024fd0  20 20 42 25 3d 9a 23 74  65 78 74 25 0d 14 c4 1c  |  B%=.#text%....|
00024fe0  20 20 20 20 20 20 4c 69  6e 65 24 2b 3d bd 28 42  |      Line$+=.(B|
00024ff0  25 29 3a 4c 25 2b 3d 31  0d 14 c5 1a 20 20 20 20  |%):L%+=1....    |
00025000  20 20 e7 20 42 25 3d 33  32 20 8c 20 73 70 25 3d  |  . B%=32 . sp%=|
00025010  4c 25 0d 14 c6 29 20 20  20 20 fd 20 42 25 3d 31  |L%...)    . B%=1|
00025020  30 20 84 20 4c 25 3d 4c  65 6e 4c 69 6e 65 25 2d  |0 . L%=LenLine%-|
00025030  33 20 84 20 c5 23 74 65  78 74 25 0d 14 c7 0e 20  |3 . .#text%.... |
00025040  20 20 20 c8 8e 20 b9 20  ca 0d 14 c8 27 20 20 20  |   .. . ....'   |
00025050  20 20 20 c9 20 42 25 3d  31 30 3a 72 65 6d 24 3d  |   . B%=10:rem$=|
00025060  22 22 3a 4c 69 6e 65 24  3d c0 4c 69 6e 65 24 29  |"":Line$=.Line$)|
00025070  0d 14 c9 1b 20 20 20 20  20 20 c9 20 c5 23 74 65  |....      . .#te|
00025080  78 74 25 3a 72 65 6d 24  3d 22 22 0d 14 ca 32 20  |xt%:rem$=""...2 |
00025090  20 20 20 20 20 7f 3a 72  65 6d 24 3d c1 4c 69 6e  |     .:rem$=.Lin|
000250a0  65 24 2c 73 70 25 2b 31  29 3a 4c 69 6e 65 24 3d  |e$,sp%+1):Line$=|
000250b0  c0 4c 69 6e 65 24 2c 73  70 25 2d 31 29 0d 14 cb  |.Line$,sp%-1)...|
000250c0  09 20 20 20 20 cb 0d 14  cc 19 20 20 20 20 70 6f  |.    .....    po|
000250d0  73 25 3d 21 6c 69 6e 65  61 6e 63 68 6f 72 25 0d  |s%=!lineanchor%.|
000250e0  14 cd 38 20 20 20 20 f2  68 65 61 70 5f 73 74 6f  |..8    .heap_sto|
000250f0  72 65 28 6c 69 6e 65 61  6e 63 68 6f 72 25 2c 4c  |re(lineanchor%,L|
00025100  65 6e 4c 69 6e 65 25 2c  30 2c 70 6f 73 25 2c 30  |enLine%,0,pos%,0|
00025110  2c 4c 69 6e 65 24 29 0d  14 ce 30 20 20 20 20 f2  |,Line$)...0    .|
00025120  6c 69 73 74 5f 6c 69 6e  65 28 52 45 43 25 2c 6c  |list_line(REC%,l|
00025130  69 6e 65 61 6e 63 68 6f  72 25 2c a9 28 4c 69 6e  |ineanchor%,.(Lin|
00025140  65 24 29 2c 33 32 29 0d  14 cf 07 20 20 ce 0d 14  |e$),32)....  ...|
00025150  d0 18 20 20 f2 63 6c 6f  73 65 5f 66 69 6c 65 28  |..  .close_file(|
00025160  74 65 78 74 25 29 0d 14  d1 05 cd 0d 14 d2 05 e1  |text%)..........|
00025170  0d 14 d3 05 3a 0d 14 d4  13 dd 20 f2 70 72 69 6e  |....:..... .prin|
00025180  74 5f 6c 61 62 65 6c 73  0d 14 d5 24 ea 20 49 25  |t_labels...$. I%|
00025190  2c 4c 69 6e 65 24 2c 53  24 2c 6c 69 6e 65 73 70  |,Line$,S$,linesp|
000251a0  72 69 6e 74 65 64 25 2c  70 6f 73 25 0d 14 d6 17  |rinted%,pos%....|
000251b0  e3 20 49 25 3d 30 20 b8  20 6c 61 62 72 65 70 6c  |. I%=0 . labrepl|
000251c0  25 2d 31 0d 14 d7 13 20  20 4c 69 6e 65 24 3d 6d  |%-1....  Line$=m|
000251d0  61 72 67 69 6e 24 0d 14  d8 19 20 20 e3 20 4b 25  |argin$....  . K%|
000251e0  3d 30 20 b8 20 74 68 69  73 6c 61 62 25 2d 31 0d  |=0 . thislab%-1.|
000251f0  14 d9 18 20 20 20 20 53  24 3d 4c 61 62 65 6c 24  |...    S$=Label$|
00025200  28 49 25 2c 4b 25 29 0d  14 da 21 20 20 20 20 e7  |(I%,K%)...!    .|
00025210  20 a4 73 65 6c 65 63 74  65 64 28 6c 61 62 65 6c  | .selected(label|
00025220  57 25 2c 31 31 29 20 8c  0d 14 db 39 20 20 20 20  |W%,11) ....9    |
00025230  20 20 e7 20 49 25 3d 6c  61 62 73 75 62 73 74 25  |  . I%=labsubst%|
00025240  20 80 20 53 24 3d 22 22  20 8c 20 53 24 3d 4c 61  | . S$="" . S$=La|
00025250  62 65 6c 24 28 6c 61 62  72 65 70 6c 25 2c 4b 25  |bel$(labrepl%,K%|
00025260  29 0d 14 dc 09 20 20 20  20 cd 0d 14 dd 39 20 20  |)....    ....9  |
00025270  20 20 e7 20 4b 25 3d 74  68 69 73 6c 61 62 25 2d  |  . K%=thislab%-|
00025280  31 20 8c 20 57 25 3d 6c  6f 6e 67 65 73 74 66 69  |1 . W%=longestfi|
00025290  65 6c 64 25 20 8b 20 57  25 3d 6c 61 62 77 69 64  |eld% . W%=labwid|
000252a0  74 68 25 0d 14 de 1f 20  20 20 20 e7 20 a9 28 53  |th%....    . .(S|
000252b0  24 29 3e 57 25 20 8c 20  53 24 3d c0 53 24 2c 57  |$)>W% . S$=.S$,W|
000252c0  25 29 0d 14 df 20 20 20  20 20 4c 69 6e 65 24 2b  |%)...     Line$+|
000252d0  3d 53 24 2b c4 57 25 2d  a9 28 53 24 29 2c 22 20  |=S$+.W%-.(S$)," |
000252e0  22 29 0d 14 e0 0a 20 20  ed 20 4b 25 0d 14 e1 17  |")....  . K%....|
000252f0  20 20 70 6f 73 25 3d 21  6c 69 6e 65 61 6e 63 68  |  pos%=!lineanch|
00025300  6f 72 25 0d 14 e2 36 20  20 f2 68 65 61 70 5f 73  |or%...6  .heap_s|
00025310  74 6f 72 65 28 6c 69 6e  65 61 6e 63 68 6f 72 25  |tore(lineanchor%|
00025320  2c 4c 65 6e 4c 69 6e 65  25 2c 30 2c 70 6f 73 25  |,LenLine%,0,pos%|
00025330  2c 30 2c 4c 69 6e 65 24  29 0d 14 e3 2e 20 20 f2  |,0,Line$)....  .|
00025340  6c 69 73 74 5f 6c 69 6e  65 28 52 45 43 25 2c 6c  |list_line(REC%,l|
00025350  69 6e 65 61 6e 63 68 6f  72 25 2c a9 28 4c 69 6e  |ineanchor%,.(Lin|
00025360  65 24 29 2c 33 32 29 0d  14 e4 16 20 20 6c 69 6e  |e$),32)....  lin|
00025370  65 73 70 72 69 6e 74 65  64 25 2b 3d 31 0d 14 e5  |esprinted%+=1...|
00025380  08 ed 20 49 25 0d 14 e6  1d e7 20 a4 73 65 6c 65  |.. I%..... .sele|
00025390  63 74 65 64 28 6c 61 62  65 6c 57 25 2c 31 33 29  |cted(labelW%,13)|
000253a0  20 8c 0d 14 e7 13 20 20  f2 72 75 6c 65 5f 6f 66  | .....  .rule_of|
000253b0  66 28 33 32 29 0d 14 e8  0e 20 20 4c 69 6e 65 24  |f(32)....  Line$|
000253c0  3d 22 22 0d 14 e9 19 20  20 e3 20 4b 25 3d 30 20  |=""....  . K%=0 |
000253d0  b8 20 74 68 69 73 6c 61  62 25 2d 31 0d 14 ea 28  |. thislab%-1...(|
000253e0  20 20 20 20 53 24 3d 22  28 22 2b 4c 61 62 65 6c  |    S$="("+Label|
000253f0  24 28 6c 61 62 72 65 70  6c 25 2b 31 2c 4b 25 29  |$(labrepl%+1,K%)|
00025400  2b 22 29 22 0d 14 eb 27  20 20 20 20 4c 69 6e 65  |+")"...'    Line|
00025410  24 2b 3d 53 24 2b c4 6c  61 62 77 69 64 74 68 25  |$+=S$+.labwidth%|
00025420  2d a9 28 53 24 29 2c 22  20 22 29 0d 14 ec 0a 20  |-.(S$)," ").... |
00025430  20 ed 20 4b 25 0d 14 ed  17 20 20 70 6f 73 25 3d  | . K%....  pos%=|
00025440  21 6c 69 6e 65 61 6e 63  68 6f 72 25 0d 14 ee 36  |!lineanchor%...6|
00025450  20 20 f2 68 65 61 70 5f  73 74 6f 72 65 28 6c 69  |  .heap_store(li|
00025460  6e 65 61 6e 63 68 6f 72  25 2c 4c 65 6e 4c 69 6e  |neanchor%,LenLin|
00025470  65 25 2c 30 2c 70 6f 73  25 2c 30 2c 4c 69 6e 65  |e%,0,pos%,0,Line|
00025480  24 29 0d 14 ef 2e 20 20  f2 6c 69 73 74 5f 6c 69  |$)....  .list_li|
00025490  6e 65 28 52 45 43 25 2c  6c 69 6e 65 61 6e 63 68  |ne(REC%,lineanch|
000254a0  6f 72 25 2c a9 28 4c 69  6e 65 24 29 2c 33 32 29  |or%,.(Line$),32)|
000254b0  0d 14 f0 16 20 20 6c 69  6e 65 73 70 72 69 6e 74  |....  linesprint|
000254c0  65 64 25 2b 3d 31 0d 14  f1 05 cd 0d 14 f2 14 72  |ed%+=1.........r|
000254d0  6f 77 73 5f 70 72 69 6e  74 65 64 25 2b 3d 31 0d  |ows_printed%+=1.|
000254e0  14 f3 1e e7 20 72 6f 77  73 5f 70 72 69 6e 74 65  |.... rows_printe|
000254f0  64 25 3d 6c 61 62 72 6f  77 73 25 20 8c 0d 14 f4  |d%=labrows% ....|
00025500  4c 20 20 24 28 21 6c 69  6e 65 61 6e 63 68 6f 72  |L  $(!lineanchor|
00025510  25 29 3d 6d 61 72 67 69  6e 24 2b bd 28 31 32 29  |%)=margin$+.(12)|
00025520  3a f2 6c 69 73 74 5f 6c  69 6e 65 28 2d 31 2c 6c  |:.list_line(-1,l|
00025530  69 6e 65 61 6e 63 68 6f  72 25 2c 4c 6d 61 72 67  |ineanchor%,Lmarg|
00025540  69 6e 25 2b 31 2c 33 32  29 0d 14 f5 13 20 20 f2  |in%+1,32)....  .|
00025550  6c 69 73 74 5f 68 65 61  64 28 31 29 0d 14 f6 15  |list_head(1)....|
00025560  20 20 72 6f 77 73 5f 70  72 69 6e 74 65 64 25 3d  |  rows_printed%=|
00025570  30 0d 14 f7 07 20 20 cc  0d 14 f8 07 20 20 f5 0d  |0....  .....  ..|
00025580  14 f9 15 20 20 20 20 f2  72 75 6c 65 5f 6f 66 66  |...    .rule_off|
00025590  28 33 32 29 0d 14 fa 18  20 20 20 20 6c 69 6e 65  |(32)....    line|
000255a0  73 70 72 69 6e 74 65 64  25 2b 3d 31 0d 14 fb 1f  |sprinted%+=1....|
000255b0  20 20 fd 20 6c 69 6e 65  73 70 72 69 6e 74 65 64  |  . linesprinted|
000255c0  25 3d 6c 61 62 64 65 70  74 68 25 0d 14 fc 05 cd  |%=labdepth%.....|
000255d0  0d 14 fd 26 74 68 69 73  6c 61 62 25 3d 30 3a 74  |...&thislab%=0:t|
000255e0  68 69 73 72 6f 77 25 3d  2d 31 3a 4c 61 62 65 6c  |hisrow%=-1:Label|
000255f0  24 28 29 3d 22 22 0d 14  fe 05 e1 0d 14 ff 05 3a  |$()="".........:|
00025600  0d 15 00 19 dd 20 f2 72  65 61 64 5f 70 72 69 6e  |..... .read_prin|
00025610  74 5f 6f 70 74 69 6f 6e  73 0d 15 01 08 ea 20 53  |t_options..... S|
00025620  24 0d 15 02 1e 74 68 69  73 6c 61 62 25 3d 30 3a  |$....thislab%=0:|
00025630  4c 69 6e 65 73 50 65 72  50 61 67 65 25 3d 30 0d  |LinesPerPage%=0.|
00025640  15 03 40 e7 20 75 73 65  6b 65 79 25 3d 2d 31 20  |..@. usekey%=-1 |
00025650  8c 20 53 24 3d 49 6e 64  65 78 24 28 6b 65 79 25  |. S$=Index$(key%|
00025660  29 20 8b 20 53 24 3d 49  6e 64 65 78 24 28 75 73  |) . S$=Index$(us|
00025670  65 6b 65 79 25 29 2b 22  20 69 6e 64 65 78 22 0d  |ekey%)+" index".|
00025680  15 04 1c 54 69 74 6c 65  31 24 3d 22 4f 72 64 65  |...Title1$="Orde|
00025690  72 65 64 20 62 79 20 22  2b 53 24 0d 15 05 32 e7  |red by "+S$...2.|
000256a0  20 a4 73 65 6c 65 63 74  65 64 28 70 72 69 6e 74  | .selected(print|
000256b0  57 25 2c 31 39 29 20 8c  20 54 69 74 6c 65 31 24  |W%,19) . Title1$|
000256c0  2b 3d 22 20 28 22 2b 91  24 2b 22 29 22 0d 15 06  |+=" ("+.$+")"...|
000256d0  1e 54 69 74 6c 65 32 24  3d 24 a4 74 65 78 74 28  |.Title2$=$.text(|
000256e0  70 72 69 6e 74 57 25 2c  31 38 29 0d 15 07 2b f2  |printW%,18)...+.|
000256f0  6c 69 74 28 6d 65 6e 75  25 28 31 38 29 2c 31 2c  |lit(menu%(18),1,|
00025700  a4 73 65 6c 65 63 74 65  64 28 70 72 69 6e 74 57  |.selected(printW|
00025710  25 2c 31 30 29 29 0d 15  08 21 c8 8e 20 a4 73 65  |%,10))...!.. .se|
00025720  6c 65 63 74 65 64 5f 65  73 67 28 70 72 69 6e 74  |lected_esg(print|
00025730  57 25 2c 32 29 20 ca 0d  15 09 17 20 20 c9 20 34  |W%,2) .....  . 4|
00025740  3a 63 70 69 25 3d 35 3a  70 24 3d 22 33 22 0d 15  |:cpi%=5:p$="3"..|
00025750  0a 18 20 20 c9 20 37 3a  63 70 69 25 3d 31 30 3a  |..  . 7:cpi%=10:|
00025760  70 24 3d 22 30 22 0d 15  0b 18 20 20 c9 20 38 3a  |p$="0"....  . 8:|
00025770  63 70 69 25 3d 31 32 3a  70 24 3d 22 31 22 0d 15  |cpi%=12:p$="1"..|
00025780  0c 18 20 20 c9 20 36 3a  63 70 69 25 3d 31 37 3a  |..  . 6:cpi%=17:|
00025790  70 24 3d 22 32 22 0d 15  0d 05 cb 0d 15 0e 15 70  |p$="2".........p|
000257a0  69 74 63 68 24 3d a4 70  69 74 63 68 28 70 24 29  |itch$=.pitch(p$)|
000257b0  0d 15 0f 33 4c 6d 61 72  67 69 6e 25 3d bb 28 24  |...3Lmargin%=.($|
000257c0  a4 74 65 78 74 28 70 72  69 6e 74 57 25 2c 33 30  |.text(printW%,30|
000257d0  29 29 3a 54 61 62 25 28  30 29 3d 4c 6d 61 72 67  |)):Tab%(0)=Lmarg|
000257e0  69 6e 25 0d 15 10 1a 6d  61 72 67 69 6e 24 3d c4  |in%....margin$=.|
000257f0  4c 6d 61 72 67 69 6e 25  2c 22 20 22 29 0d 15 11  |Lmargin%," ")...|
00025800  22 54 6d 61 72 67 69 6e  25 3d bb 28 24 a4 74 65  |"Tmargin%=.($.te|
00025810  78 74 28 70 72 69 6e 74  57 25 2c 33 32 29 29 0d  |xt(printW%,32)).|
00025820  15 12 23 54 65 78 74 4c  69 6e 65 25 3d bb 28 24  |..#TextLine%=.($|
00025830  a4 74 65 78 74 28 70 72  69 6e 74 57 25 2c 33 34  |.text(printW%,34|
00025840  29 29 0d 15 13 23 6c 69  6e 65 66 65 65 64 25 3d  |))...#linefeed%=|
00025850  bb 28 24 a4 74 65 78 74  28 70 72 69 6e 74 57 25  |.($.text(printW%|
00025860  2c 31 37 29 29 0d 15 14  23 63 6f 6c 77 69 64 74  |,17))...#colwidt|
00025870  68 25 3d bb 28 24 a4 74  65 78 74 28 70 72 69 6e  |h%=.($.text(prin|
00025880  74 57 25 2c 34 35 29 29  0d 15 15 2a 73 24 3d 24  |tW%,45))...*s$=$|
00025890  a4 74 65 78 74 28 70 72  69 6e 74 57 25 2c 34 33  |.text(printW%,43|
000258a0  29 3a 73 25 3d bb 28 73  24 29 3a 63 24 3d c2 73  |):s%=.(s$):c$=.s|
000258b0  24 29 0d 15 16 0a c8 8e  20 b9 20 ca 0d 15 17 17  |$)...... . .....|
000258c0  20 20 c9 20 73 25 3d 30  3a 73 70 61 63 65 72 24  |  . s%=0:spacer$|
000258d0  3d 73 24 0d 15 18 27 20  20 c9 20 63 24 3c 22 30  |=s$...'  . c$<"0|
000258e0  22 20 84 20 63 24 3e 22  39 22 3a 73 70 61 63 65  |" . c$>"9":space|
000258f0  72 24 3d c4 73 25 2c 63  24 29 0d 15 19 18 20 20  |r$=.s%,c$)....  |
00025900  7f 3a 73 70 61 63 65 72  24 3d c4 73 25 2c 22 20  |.:spacer$=.s%," |
00025910  22 29 0d 15 1a 05 cb 0d  15 1b 3f e7 20 6c 69 6e  |")........?. lin|
00025920  65 66 65 65 64 25 3d 30  20 8c 20 6c 69 6e 65 66  |efeed%=0 . linef|
00025930  65 65 64 25 3d 31 3a 24  a4 74 65 78 74 28 70 72  |eed%=1:$.text(pr|
00025940  69 6e 74 57 25 2c 31 37  29 3d c3 28 6c 69 6e 65  |intW%,17)=.(line|
00025950  66 65 65 64 25 29 0d 15  1c 25 70 61 67 65 6c 65  |feed%)...%pagele|
00025960  6e 67 74 68 25 3d bb 28  24 a4 74 65 78 74 28 70  |ngth%=.($.text(p|
00025970  72 69 6e 74 57 25 2c 31  36 29 29 0d 15 1d 46 e7  |rintW%,16))...F.|
00025980  20 70 61 67 65 6c 65 6e  67 74 68 25 3d 30 20 8c  | pagelength%=0 .|
00025990  20 70 61 67 65 6c 65 6e  67 74 68 25 3d 37 30 3a  | pagelength%=70:|
000259a0  24 a4 74 65 78 74 28 70  72 69 6e 74 57 25 2c 31  |$.text(printW%,1|
000259b0  36 29 3d c3 28 70 61 67  65 6c 65 6e 67 74 68 25  |6)=.(pagelength%|
000259c0  29 0d 15 1e 21 c8 8e 20  a4 73 65 6c 65 63 74 65  |)...!.. .selecte|
000259d0  64 5f 65 73 67 28 70 72  69 6e 74 57 25 2c 33 29  |d_esg(printW%,3)|
000259e0  20 ca 0d 15 1f 0b 20 20  c9 20 32 33 3a 0d 15 20  | .....  . 23:.. |
000259f0  15 20 20 66 6f 72 6d 61  74 24 3d 22 68 6f 72 69  |.  format$="hori|
00025a00  7a 22 0d 15 21 39 20 20  4c 69 6e 65 73 50 65 72  |z"..!9  LinesPer|
00025a10  50 61 67 65 25 3d 28 70  61 67 65 6c 65 6e 67 74  |Page%=(pagelengt|
00025a20  68 25 2d 54 6d 61 72 67  69 6e 25 2d 31 35 29 20  |h%-Tmargin%-15) |
00025a30  81 20 6c 69 6e 65 66 65  65 64 25 0d 15 22 19 20  |. linefeed%..". |
00025a40  20 c9 20 32 34 3a 66 6f  72 6d 61 74 24 3d 22 76  | . 24:format$="v|
00025a50  65 72 74 22 0d 15 23 4a  20 20 4c 69 6e 65 73 50  |ert"..#J  LinesP|
00025a60  65 72 50 61 67 65 25 3d  28 70 61 67 65 6c 65 6e  |erPage%=(pagelen|
00025a70  67 74 68 25 2d 54 6d 61  72 67 69 6e 25 2d 31 35  |gth%-Tmargin%-15|
00025a80  29 20 81 20 28 6c 69 6e  65 66 65 65 64 25 2a 28  |) . (linefeed%*(|
00025a90  a9 28 46 6f 72 6d 24 29  20 81 20 32 29 29 0d 15  |.(Form$) . 2))..|
00025aa0  24 0b 20 20 c9 20 32 35  3a 0d 15 25 15 20 20 66  |$.  . 25:..%.  f|
00025ab0  6f 72 6d 61 74 24 3d 22  74 61 62 6c 65 22 0d 15  |ormat$="table"..|
00025ac0  26 24 20 20 63 6f 6c 75  6d 6e 73 25 3d bb 28 24  |&$  columns%=.($|
00025ad0  a4 74 65 78 74 28 70 72  69 6e 74 57 25 2c 31 35  |.text(printW%,15|
00025ae0  29 29 0d 15 27 30 20 20  63 6f 6c 75 6d 6e 24 3d  |))..'0  column$=|
00025af0  c4 63 6f 6c 75 6d 6e 73  25 2c 22 7c 22 2b c4 63  |.columns%,"|"+.c|
00025b00  6f 6c 77 69 64 74 68 25  2c 22 20 22 29 29 2b 22  |olwidth%," "))+"|
00025b10  7c 22 0d 15 28 39 20 20  4c 69 6e 65 73 50 65 72  ||"..(9  LinesPer|
00025b20  50 61 67 65 25 3d 28 70  61 67 65 6c 65 6e 67 74  |Page%=(pagelengt|
00025b30  68 25 2d 54 6d 61 72 67  69 6e 25 2d 31 35 29 20  |h%-Tmargin%-15) |
00025b40  81 20 6c 69 6e 65 66 65  65 64 25 0d 15 29 0b 20  |. linefeed%..). |
00025b50  20 c9 20 32 36 3a 0d 15  2a 15 20 20 66 6f 72 6d  | . 26:..*.  form|
00025b60  61 74 24 3d 22 6c 61 62  65 6c 22 0d 15 2b 29 20  |at$="label"..+) |
00025b70  20 6c 61 62 77 69 64 74  68 25 3d bb 28 24 a4 74  | labwidth%=.($.t|
00025b80  65 78 74 28 6c 61 62 65  6c 57 25 2c 34 29 29 2a  |ext(labelW%,4))*|
00025b90  63 70 69 25 0d 15 2c 26  20 20 6c 61 62 64 65 70  |cpi%..,&  labdep|
00025ba0  74 68 25 3d bb 28 24 a4  74 65 78 74 28 6c 61 62  |th%=.($.text(lab|
00025bb0  65 6c 57 25 2c 36 29 29  2a 36 0d 15 2d 31 20 20  |elW%,6))*6..-1  |
00025bc0  6c 61 62 72 6f 77 73 25  3d 28 70 61 67 65 6c 65  |labrows%=(pagele|
00025bd0  6e 67 74 68 25 2d 54 6d  61 72 67 69 6e 25 29 20  |ngth%-Tmargin%) |
00025be0  81 20 6c 61 62 64 65 70  74 68 25 0d 15 2e 15 20  |. labdepth%.... |
00025bf0  20 72 6f 77 73 5f 70 72  69 6e 74 65 64 25 3d 30  | rows_printed%=0|
00025c00  0d 15 2f 25 20 20 6c 61  62 75 70 25 3d a4 73 65  |../%  labup%=.se|
00025c10  6c 65 63 74 65 64 5f 65  73 67 28 6c 61 62 65 6c  |lected_esg(label|
00025c20  57 25 2c 31 29 0d 15 30  24 20 20 6c 61 62 72 65  |W%,1)..0$  labre|
00025c30  70 6c 25 3d bb 28 24 a4  74 65 78 74 28 6c 61 62  |pl%=.($.text(lab|
00025c40  65 6c 57 25 2c 31 30 29  29 0d 15 31 27 20 20 6c  |elW%,10))..1'  l|
00025c50  61 62 73 75 62 73 74 25  3d bb 28 24 a4 74 65 78  |absubst%=.($.tex|
00025c60  74 28 6c 61 62 65 6c 57  25 2c 31 32 29 29 2d 31  |t(labelW%,12))-1|
00025c70  0d 15 32 25 20 20 54 69  74 6c 65 24 3d 22 22 3a  |..2%  Title$="":|
00025c80  54 69 74 6c 65 31 24 3d  22 22 3a 54 69 74 6c 65  |Title1$="":Title|
00025c90  32 24 3d 22 22 0d 15 33  05 cb 0d 15 34 21 c8 8e  |2$=""..3....4!..|
00025ca0  20 a4 73 65 6c 65 63 74  65 64 5f 65 73 67 28 70  | .selected_esg(p|
00025cb0  72 69 6e 74 57 25 2c 34  29 20 ca 0d 15 35 1f 20  |rintW%,4) ...5. |
00025cc0  20 c9 20 33 38 3a 72 65  70 6f 72 74 64 65 73 74  | . 38:reportdest|
00025cd0  24 3d 22 57 69 6e 64 6f  77 22 0d 15 36 1d 20 20  |$="Window"..6.  |
00025ce0  c9 20 33 39 3a 72 65 70  6f 72 74 64 65 73 74 24  |. 39:reportdest$|
00025cf0  3d 22 46 69 6c 65 22 0d  15 37 20 20 20 c9 20 34  |="File"..7   . 4|
00025d00  31 3a 72 65 70 6f 72 74  64 65 73 74 24 3d 22 50  |1:reportdest$="P|
00025d10  72 69 6e 74 65 72 22 0d  15 38 05 cb 0d 15 39 27  |rinter"..8....9'|
00025d20  e7 20 4c 69 6e 65 73 50  65 72 50 61 67 65 25 3d  |. LinesPerPage%=|
00025d30  30 20 8c 20 4c 69 6e 65  73 50 65 72 50 61 67 65  |0 . LinesPerPage|
00025d40  25 3d 31 0d 15 3a 05 e1  0d 15 3b 05 3a 0d 15 3c  |%=1..:....;.:..<|
00025d50  10 dd 20 a4 70 69 74 63  68 28 70 24 29 0d 15 3d  |.. .pitch(p$)..=|
00025d60  34 e7 20 a4 73 65 6c 65  63 74 65 64 28 70 72 69  |4. .selected(pri|
00025d70  6e 74 57 25 2c 34 32 29  20 8c 3d bd 28 33 31 29  |ntW%,42) .=.(31)|
00025d80  2b 22 39 22 2b 70 24 2b  22 30 31 22 20 8b 3d 22  |+"9"+p$+"01" .="|
00025d90  22 0d 15 3e 05 3a 0d 15  3f 18 dd 20 f2 6c 69 73  |"..>.:..?.. .lis|
00025da0  74 5f 68 65 61 64 28 70  6c 61 63 65 25 29 0d 15  |t_head(place%)..|
00025db0  40 10 e7 20 70 6c 61 63  65 25 3d 30 20 8c 0d 15  |@.. place%=0 ...|
00025dc0  41 16 20 20 c8 8e 20 72  65 70 6f 72 74 64 65 73  |A.  .. reportdes|
00025dd0  74 24 20 ca 0d 15 42 1d  20 20 20 20 c9 20 22 57  |t$ ...B.    . "W|
00025de0  69 6e 64 6f 77 22 2c 22  50 72 69 6e 74 65 72 22  |indow","Printer"|
00025df0  3a 0d 15 43 15 20 20 20  20 52 55 25 3d bb 28 24  |:..C.    RU%=.($|
00025e00  75 73 65 64 25 29 0d 15  44 4f 20 20 20 20 e7 20  |used%)..DO    . |
00025e10  52 55 25 3c 35 20 8c 20  74 65 78 74 62 6c 6f 63  |RU%<5 . textbloc|
00025e20  6b 73 69 7a 65 25 3d 35  2a 4c 65 6e 4c 69 6e 65  |ksize%=5*LenLine|
00025e30  25 20 8b 20 74 65 78 74  62 6c 6f 63 6b 73 69 7a  |% . textblocksiz|
00025e40  65 25 3d 28 52 55 25 20  81 20 35 29 2a 4c 65 6e  |e%=(RU% . 5)*Len|
00025e50  4c 69 6e 65 25 0d 15 45  24 20 20 20 20 74 65 78  |Line%..E$    tex|
00025e60  74 62 6c 6f 63 6b 69 6e  63 25 3d 74 65 78 74 62  |tblockinc%=textb|
00025e70  6c 6f 63 6b 73 69 7a 65  25 0d 15 46 3f 20 20 20  |locksize%..F?   |
00025e80  20 f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  | .extend_named_s|
00025e90  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 74 65 78  |liding_block(tex|
00025ea0  74 61 6e 63 68 6f 72 25  2c 74 65 78 74 62 6c 6f  |tanchor%,textblo|
00025eb0  63 6b 73 69 7a 65 25 29  0d 15 47 1d 20 20 20 20  |cksize%)..G.    |
00025ec0  54 65 78 74 50 74 72 25  3d 21 74 65 78 74 61 6e  |TextPtr%=!textan|
00025ed0  63 68 6f 72 25 0d 15 48  19 20 20 20 20 72 65 63  |chor%..H.    rec|
00025ee0  62 6c 6f 63 6b 73 69 7a  65 25 3d 34 30 30 0d 15  |blocksize%=400..|
00025ef0  49 3d 20 20 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |I=    .extend_na|
00025f00  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
00025f10  6b 28 72 65 63 61 6e 63  68 6f 72 25 2c 72 65 63  |k(recanchor%,rec|
00025f20  62 6c 6f 63 6b 73 69 7a  65 25 29 0d 15 4a 26 20  |blocksize%)..J& |
00025f30  20 20 20 c9 20 22 46 69  6c 65 22 3a 3a d5 23 74  |   . "File"::.#t|
00025f40  65 78 74 68 61 6e 64 6c  65 25 2c 70 69 74 63 68  |exthandle%,pitch|
00025f50  24 0d 15 4b 07 20 20 cb  0d 15 4c 05 cd 0d 15 4d  |$..K.  ...L....M|
00025f60  1c f2 65 78 74 72 61 5f  6c 69 6e 65 73 28 54 6d  |..extra_lines(Tm|
00025f70  61 72 67 69 6e 25 2c 30  29 0d 15 4e 14 e7 20 ac  |argin%,0)..N.. .|
00025f80  20 64 69 73 70 6c 61 79  65 64 25 20 8c 0d 15 4f  | displayed% ...O|
00025f90  19 20 20 f2 73 65 6e 64  5f 74 69 74 6c 65 28 54  |.  .send_title(T|
00025fa0  69 74 6c 65 24 29 0d 15  50 1a 20 20 f2 73 65 6e  |itle$)..P.  .sen|
00025fb0  64 5f 74 69 74 6c 65 28  54 69 74 6c 65 31 24 29  |d_title(Title1$)|
00025fc0  0d 15 51 1a 20 20 f2 73  65 6e 64 5f 74 69 74 6c  |..Q.  .send_titl|
00025fd0  65 28 54 69 74 6c 65 32  24 29 0d 15 52 05 cd 0d  |e(Title2$)..R...|
00025fe0  15 53 10 c8 8e 20 66 6f  72 6d 61 74 24 20 ca 0d  |.S... format$ ..|
00025ff0  15 54 10 20 20 c9 20 22  68 6f 72 69 7a 22 3a 0d  |.T.  . "horiz":.|
00026000  15 55 20 20 20 c8 8e 20  a4 73 65 6c 65 63 74 65  |.U   .. .selecte|
00026010  64 28 70 72 69 6e 74 57  25 2c 32 39 29 20 ca 0d  |d(printW%,29) ..|
00026020  15 56 0c 20 20 20 20 c9  20 b9 3a 0d 15 57 56 20  |.V.    . .:..WV |
00026030  20 20 20 e7 20 a4 73 65  6c 65 63 74 65 64 28 70  |   . .selected(p|
00026040  72 69 6e 74 57 25 2c 34  32 29 20 8c 20 24 28 21  |rintW%,42) . $(!|
00026050  6c 69 6e 65 61 6e 63 68  6f 72 25 29 3d 75 6f 6e  |lineanchor%)=uon|
00026060  24 3a f2 6c 69 73 74 5f  6c 69 6e 65 28 2d 31 2c  |$:.list_line(-1,|
00026070  6c 69 6e 65 61 6e 63 68  6f 72 25 2c 32 2c 33 32  |lineanchor%,2,32|
00026080  29 0d 15 58 2e 20 20 20  20 f2 6c 69 73 74 5f 6c  |)..X.    .list_l|
00026090  69 6e 65 28 2d 31 2c 68  65 61 64 61 6e 63 68 6f  |ine(-1,headancho|
000260a0  72 25 2c 4c 65 6e 4c 69  6e 65 25 2c 33 32 29 0d  |r%,LenLine%,32).|
000260b0  15 59 0c 20 20 20 20 c9  20 a3 3a 0d 15 5a 15 20  |.Y.    . .:..Z. |
000260c0  20 20 20 f2 72 75 6c 65  5f 6f 66 66 28 34 35 29  |   .rule_off(45)|
000260d0  0d 15 5b 2e 20 20 20 20  f2 6c 69 73 74 5f 6c 69  |..[.    .list_li|
000260e0  6e 65 28 2d 31 2c 68 65  61 64 61 6e 63 68 6f 72  |ne(-1,headanchor|
000260f0  25 2c 4c 65 6e 4c 69 6e  65 25 2c 33 32 29 0d 15  |%,LenLine%,32)..|
00026100  5c 15 20 20 20 20 f2 72  75 6c 65 5f 6f 66 66 28  |\.    .rule_off(|
00026110  34 35 29 0d 15 5d 07 20  20 cb 0d 15 5e 10 20 20  |45)..].  ...^.  |
00026120  c9 20 22 74 61 62 6c 65  22 3a 0d 15 5f 26 20 20  |. "table":.._&  |
00026130  f2 72 75 6c 65 5f 6f 66  66 28 33 32 29 3a 24 28  |.rule_off(32):$(|
00026140  54 65 78 74 50 74 72 25  2d 33 29 3d 75 6f 6e 24  |TextPtr%-3)=uon$|
00026150  0d 15 60 13 20 20 f2 72  75 6c 65 5f 6f 66 66 28  |..`.  .rule_off(|
00026160  33 32 29 0d 15 61 2c 20  20 f2 6c 69 73 74 5f 6c  |32)..a,  .list_l|
00026170  69 6e 65 28 2d 31 2c 68  65 61 64 61 6e 63 68 6f  |ine(-1,headancho|
00026180  72 25 2c 4c 65 6e 4c 69  6e 65 25 2c 33 32 29 0d  |r%,LenLine%,32).|
00026190  15 62 13 20 20 f2 72 75  6c 65 5f 6f 66 66 28 33  |.b.  .rule_off(3|
000261a0  32 29 0d 15 63 1c 20 20  c9 20 22 76 65 72 74 22  |2)..c.  . "vert"|
000261b0  3a f2 72 75 6c 65 5f 6f  66 66 28 34 35 29 0d 15  |:.rule_off(45)..|
000261c0  64 05 cb 0d 15 65 18 68  65 61 64 65 72 5f 6c 69  |d....e.header_li|
000261d0  6e 65 73 25 3d 43 6f 75  6e 74 25 0d 15 66 05 e1  |nes%=Count%..f..|
000261e0  0d 15 67 05 3a 0d 15 68  2c dd 20 f2 6c 69 73 74  |..g.:..h,. .list|
000261f0  5f 6c 69 6e 65 28 52 45  43 25 2c 61 6e 63 68 6f  |_line(REC%,ancho|
00026200  72 25 2c 6c 65 6e 67 74  68 25 2c 63 68 61 72 25  |r%,length%,char%|
00026210  29 0d 15 69 0d 43 6f 75  6e 74 25 2b 3d 31 0d 15  |)..i.Count%+=1..|
00026220  6a 14 c8 8e 20 72 65 70  6f 72 74 64 65 73 74 24  |j... reportdest$|
00026230  20 ca 0d 15 6b 1b 20 20  c9 20 22 57 69 6e 64 6f  | ...k.  . "Windo|
00026240  77 22 2c 22 50 72 69 6e  74 65 72 22 3a 0d 15 6c  |w","Printer":..l|
00026250  29 20 20 f2 70 61 64 5f  6c 69 6e 65 28 4c 65 6e  |)  .pad_line(Len|
00026260  4c 69 6e 65 25 2d 6c 65  6e 67 74 68 25 2d 31 2c  |Line%-length%-1,|
00026270  63 68 61 72 25 29 0d 15  6d 50 20 20 f2 68 65 61  |char%)..mP  .hea|
00026280  70 5f 73 74 6f 72 65 28  74 65 78 74 61 6e 63 68  |p_store(textanch|
00026290  6f 72 25 2c 74 65 78 74  62 6c 6f 63 6b 73 69 7a  |or%,textblocksiz|
000262a0  65 25 2c 74 65 78 74 62  6c 6f 63 6b 69 6e 63 25  |e%,textblockinc%|
000262b0  2c 54 65 78 74 50 74 72  25 2c 4c 65 6e 4c 69 6e  |,TextPtr%,LenLin|
000262c0  65 25 2c 22 22 29 0d 15  6e 48 20 20 c8 99 20 22  |e%,"")..nH  .. "|
000262d0  57 69 6d 70 5f 54 72 61  6e 73 66 65 72 42 6c 6f  |Wimp_TransferBlo|
000262e0  63 6b 22 2c 6d 79 74 61  73 6b 25 2c 21 61 6e 63  |ck",mytask%,!anc|
000262f0  68 6f 72 25 2c 6d 79 74  61 73 6b 25 2c 54 65 78  |hor%,mytask%,Tex|
00026300  74 50 74 72 25 2c 4c 65  6e 4c 69 6e 65 25 0d 15  |tPtr%,LenLine%..|
00026310  6f 21 20 20 e7 20 43 6f  75 6e 74 25 2a 34 3e 3d  |o!  . Count%*4>=|
00026320  72 65 63 62 6c 6f 63 6b  73 69 7a 65 25 20 8c 0d  |recblocksize% ..|
00026330  15 70 1a 20 20 20 20 72  65 63 62 6c 6f 63 6b 73  |.p.    recblocks|
00026340  69 7a 65 25 2b 3d 34 30  30 0d 15 71 3d 20 20 20  |ize%+=400..q=   |
00026350  20 f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  | .extend_named_s|
00026360  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 72 65 63  |liding_block(rec|
00026370  61 6e 63 68 6f 72 25 2c  72 65 63 62 6c 6f 63 6b  |anchor%,recblock|
00026380  73 69 7a 65 25 29 0d 15  72 07 20 20 cd 0d 15 73  |size%)..r.  ...s|
00026390  22 20 20 21 28 21 72 65  63 61 6e 63 68 6f 72 25  |"  !(!recanchor%|
000263a0  2b 43 6f 75 6e 74 25 2a  34 29 3d 52 45 43 25 0d  |+Count%*4)=REC%.|
000263b0  15 74 18 20 20 54 65 78  74 50 74 72 25 2b 3d 4c  |.t.  TextPtr%+=L|
000263c0  65 6e 4c 69 6e 65 25 0d  15 75 0f 20 20 c9 20 22  |enLine%..u.  . "|
000263d0  46 69 6c 65 22 3a 0d 15  76 29 20 20 f2 70 61 64  |File":..v)  .pad|
000263e0  5f 6c 69 6e 65 28 4c 65  6e 4c 69 6e 65 25 2d 6c  |_line(LenLine%-l|
000263f0  65 6e 67 74 68 25 2d 31  2c 63 68 61 72 25 29 0d  |ength%-1,char%).|
00026400  15 77 32 20 20 c8 99 20  22 4f 53 5f 47 42 50 42  |.w2  .. "OS_GBPB|
00026410  22 2c 32 2c 74 65 78 74  68 61 6e 64 6c 65 25 2c  |",2,texthandle%,|
00026420  21 61 6e 63 68 6f 72 25  2c 4c 65 6e 4c 69 6e 65  |!anchor%,LenLine|
00026430  25 0d 15 78 05 cb 0d 15  79 09 f2 70 6f 6c 6c 0d  |%..x....y..poll.|
00026440  15 7a 05 e1 0d 15 7b 05  3a 0d 15 7c 1d dd 20 f2  |.z....{.:..|.. .|
00026450  70 61 64 5f 6c 69 6e 65  28 62 79 74 65 73 25 2c  |pad_line(bytes%,|
00026460  63 68 61 72 25 29 0d 15  7d 13 ea 20 62 61 73 65  |char%)..}.. base|
00026470  25 2c 70 74 72 25 2c 49  25 0d 15 7e 2f 62 61 73  |%,ptr%,I%..~/bas|
00026480  65 25 3d 21 61 6e 63 68  6f 72 25 3a 70 74 72 25  |e%=!anchor%:ptr%|
00026490  3d 62 61 73 65 25 2b 4c  65 6e 4c 69 6e 65 25 2d  |=base%+LenLine%-|
000264a0  62 79 74 65 73 25 2d 31  0d 15 7f 10 e7 20 62 79  |bytes%-1..... by|
000264b0  74 65 73 25 3e 30 20 8c  0d 15 80 17 20 20 e3 20  |tes%>0 .....  . |
000264c0  49 25 3d 30 20 b8 20 62  79 74 65 73 25 2d 32 0d  |I%=0 . bytes%-2.|
000264d0  15 81 15 20 20 20 20 70  74 72 25 3f 49 25 3d 63  |...    ptr%?I%=c|
000264e0  68 61 72 25 0d 15 82 0a  20 20 ed 20 49 25 0d 15  |har%....  . I%..|
000264f0  83 05 cd 0d 15 84 16 70  74 72 25 3f 28 62 79 74  |.......ptr%?(byt|
00026500  65 73 25 2d 31 29 3d 33  32 0d 15 85 12 70 74 72  |es%-1)=32....ptr|
00026510  25 3f 62 79 74 65 73 25  3d 31 30 0d 15 86 05 e1  |%?bytes%=10.....|
00026520  0d 15 87 05 3a 0d 15 88  16 dd 20 f2 72 75 6c 65  |....:..... .rule|
00026530  5f 6f 66 66 28 63 68 61  72 25 29 0d 15 89 0b ea  |_off(char%).....|
00026540  20 62 61 73 65 25 0d 15  8a 16 62 61 73 65 25 3d  | base%....base%=|
00026550  21 6c 69 6e 65 61 6e 63  68 6f 72 25 0d 15 8b 12  |!lineanchor%....|
00026560  24 62 61 73 65 25 3d 6d  61 72 67 69 6e 24 0d 15  |$base%=margin$..|
00026570  8c 2d f2 6c 69 73 74 5f  6c 69 6e 65 28 2d 31 2c  |.-.list_line(-1,|
00026580  6c 69 6e 65 61 6e 63 68  6f 72 25 2c 4c 6d 61 72  |lineanchor%,Lmar|
00026590  67 69 6e 25 2c 63 68 61  72 25 29 0d 15 8d 05 e1  |gin%,char%).....|
000265a0  0d 15 8e 05 3a 0d 15 8f  11 dd 20 f2 74 6f 74 61  |....:..... .tota|
000265b0  6c 5f 6c 69 73 74 0d 15  90 19 ea 20 43 25 2c 4c  |l_list..... C%,L|
000265c0  25 2c 62 61 73 65 25 2c  70 6f 73 25 2c 4c 24 0d  |%,base%,pos%,L$.|
000265d0  15 91 23 4c 24 3d 6d 61  72 67 69 6e 24 2b 22 54  |..#L$=margin$+"T|
000265e0  6f 74 61 6c 20 22 2b c3  28 70 72 69 6e 74 65 64  |otal "+.(printed|
000265f0  25 29 0d 15 92 21 62 61  73 65 25 3d 21 6c 69 6e  |%)...!base%=!lin|
00026600  65 61 6e 63 68 6f 72 25  3a 70 6f 73 25 3d 62 61  |eanchor%:pos%=ba|
00026610  73 65 25 0d 15 93 10 c8  8e 20 66 6f 72 6d 61 74  |se%...... format|
00026620  24 20 ca 0d 15 94 10 20  20 c9 20 22 68 6f 72 69  |$ .....  . "hori|
00026630  7a 22 3a 0d 15 95 2f 20  20 e7 20 ac 20 a4 73 65  |z":.../  . . .se|
00026640  6c 65 63 74 65 64 28 70  72 69 6e 74 57 25 2c 32  |lected(printW%,2|
00026650  39 29 20 8c 20 f2 72 75  6c 65 5f 6f 66 66 28 34  |9) . .rule_off(4|
00026660  35 29 0d 15 96 19 20 20  f2 63 74 6f 74 61 6c 73  |5)....  .ctotals|
00026670  28 6e 75 6d 66 69 72 73  74 25 29 0d 15 97 31 20  |(numfirst%)...1 |
00026680  20 e7 20 a9 28 4c 24 29  3e 4c 65 6e 4c 69 6e 65  | . .(L$)>LenLine|
00026690  25 2d 32 20 8c 20 4c 24  3d 6d 61 72 67 69 6e 24  |%-2 . L$=margin$|
000266a0  2b c3 28 70 72 69 6e 74  65 64 25 29 0d 15 98 33  |+.(printed%)...3|
000266b0  20 20 f2 68 65 61 70 5f  73 74 6f 72 65 28 6c 69  |  .heap_store(li|
000266c0  6e 65 61 6e 63 68 6f 72  25 2c 4c 65 6e 4c 69 6e  |neanchor%,LenLin|
000266d0  65 25 2c 30 2c 70 6f 73  25 2c 30 2c 4c 24 29 0d  |e%,0,pos%,0,L$).|
000266e0  15 99 30 20 20 f2 6c 69  73 74 5f 6c 69 6e 65 28  |..0  .list_line(|
000266f0  52 45 43 25 2c 6c 69 6e  65 61 6e 63 68 6f 72 25  |REC%,lineanchor%|
00026700  2c 70 6f 73 25 2d 62 61  73 65 25 2c 33 32 29 0d  |,pos%-base%,32).|
00026710  15 9a 2f 20 20 e7 20 ac  20 a4 73 65 6c 65 63 74  |../  . . .select|
00026720  65 64 28 70 72 69 6e 74  57 25 2c 32 39 29 20 8c  |ed(printW%,29) .|
00026730  20 f2 72 75 6c 65 5f 6f  66 66 28 34 35 29 0d 15  | .rule_off(45)..|
00026740  9b 10 20 20 c9 20 22 74  61 62 6c 65 22 3a 0d 15  |..  . "table":..|
00026750  9c 13 20 20 f2 72 75 6c  65 5f 6f 66 66 28 33 32  |..  .rule_off(32|
00026760  29 0d 15 9d 25 20 20 f2  65 78 74 72 61 5f 6c 69  |)...%  .extra_li|
00026770  6e 65 73 28 6c 69 6e 65  66 65 65 64 25 2c 63 6f  |nes(linefeed%,co|
00026780  6c 70 6f 73 25 29 0d 15  9e 19 20 20 f2 63 74 6f  |lpos%)....  .cto|
00026790  74 61 6c 73 28 6e 75 6d  66 69 72 73 74 25 29 0d  |tals(numfirst%).|
000267a0  15 9f 05 cb 0d 15 a0 16  f2 6c 69 74 28 6d 65 6e  |.........lit(men|
000267b0  75 25 28 36 29 2c 37 2c  b9 29 0d 15 a1 05 e1 0d  |u%(6),7,.)......|
000267c0  15 a2 05 3a 0d 15 a3 15  dd 20 f2 73 65 6e 64 5f  |...:..... .send_|
000267d0  74 69 74 6c 65 28 54 24  29 0d 15 a4 11 ea 20 43  |title(T$)..... C|
000267e0  24 2c 4c 24 2c 50 25 2c  4c 25 0d 15 a5 0f e7 20  |$,L$,P%,L%..... |
000267f0  54 24 3d 22 22 20 8c 20  e1 0d 15 a6 1a 4c 25 3d  |T$="" . .....L%=|
00026800  4c 65 6e 4c 69 6e 65 25  2d 4c 6d 61 72 67 69 6e  |LenLine%-Lmargin|
00026810  25 2d 31 0d 15 a7 10 c8  95 20 a9 28 54 24 29 3e  |%-1...... .(T$)>|
00026820  3d 4c 25 0d 15 a8 0e 20  20 50 25 3d a9 28 54 24  |=L%....  P%=.(T$|
00026830  29 0d 15 a9 07 20 20 f5  0d 15 aa 1a 20 20 20 20  |)....  .....    |
00026840  50 25 2d 3d 31 3a 43 24  3d c1 54 24 2c 50 25 2c  |P%-=1:C$=.T$,P%,|
00026850  31 29 0d 15 ab 28 20 20  fd 20 28 a7 22 3d 20 2c  |1)...(  . (."= ,|
00026860  2e 3b 3a 22 2c 43 24 29  3e 30 20 80 20 50 25 3c  |.;:",C$)>0 . P%<|
00026870  4c 25 29 20 84 20 50 25  3d 30 0d 15 ac 0e 20 20  |L%) . P%=0....  |
00026880  e7 20 50 25 3d 30 20 8c  0d 15 ad 27 20 20 20 20  |. P%=0 ....'    |
00026890  4c 24 3d 6d 61 72 67 69  6e 24 2b c0 54 24 2c 4c  |L$=margin$+.T$,L|
000268a0  25 2d 31 29 3a 54 24 3d  c1 54 24 2c 4c 25 29 0d  |%-1):T$=.T$,L%).|
000268b0  15 ae 29 20 20 20 20 cc  20 4c 24 3d 6d 61 72 67  |..)    . L$=marg|
000268c0  69 6e 24 2b c0 54 24 2c  50 25 29 3a 54 24 3d c1  |in$+.T$,P%):T$=.|
000268d0  54 24 2c 50 25 2b 31 29  0d 15 af 07 20 20 cd 0d  |T$,P%+1)....  ..|
000268e0  15 b0 18 20 20 24 28 21  6c 69 6e 65 61 6e 63 68  |...  $(!lineanch|
000268f0  6f 72 25 29 3d 4c 24 0d  15 b1 29 20 20 f2 6c 69  |or%)=L$...)  .li|
00026900  73 74 5f 6c 69 6e 65 28  2d 31 2c 6c 69 6e 65 61  |st_line(-1,linea|
00026910  6e 63 68 6f 72 25 2c a9  28 4c 24 29 2c 33 32 29  |nchor%,.(L$),32)|
00026920  0d 15 b2 05 ce 0d 15 b3  1e 24 28 21 6c 69 6e 65  |.........$(!line|
00026930  61 6e 63 68 6f 72 25 29  3d 6d 61 72 67 69 6e 24  |anchor%)=margin$|
00026940  2b 54 24 0d 15 b4 30 f2  6c 69 73 74 5f 6c 69 6e  |+T$...0.list_lin|
00026950  65 28 2d 31 2c 6c 69 6e  65 61 6e 63 68 6f 72 25  |e(-1,lineanchor%|
00026960  2c 4c 6d 61 72 67 69 6e  25 2b a9 28 54 24 29 2c  |,Lmargin%+.(T$),|
00026970  33 32 29 0d 15 b5 05 e1  0d 15 b6 05 3a 0d 15 b7  |32).........:...|
00026980  12 dd 20 f2 73 63 72 65  65 6e 5f 6c 69 73 74 0d  |.. .screen_list.|
00026990  15 b8 21 21 62 6c 6f 63  6b 25 3d 30 3a 62 6c 6f  |..!!block%=0:blo|
000269a0  63 6b 25 21 34 3d 2d 43  6f 75 6e 74 25 2a 33 32  |ck%!4=-Count%*32|
000269b0  0d 15 b9 28 62 6c 6f 63  6b 25 21 38 3d 28 4c 65  |...(block%!8=(Le|
000269c0  6e 4c 69 6e 65 25 2d 31  29 2a 31 36 3a 62 6c 6f  |nLine%-1)*16:blo|
000269d0  63 6b 25 21 31 32 3d 30  0d 15 ba 25 c8 99 20 22  |ck%!12=0...%.. "|
000269e0  57 69 6d 70 5f 53 65 74  45 78 74 65 6e 74 22 2c  |Wimp_SetExtent",|
000269f0  6c 69 73 74 57 25 2c 62  6c 6f 63 6b 25 0d 15 bb  |listW%,block%...|
00026a00  12 21 62 6c 6f 63 6b 25  3d 6c 69 73 74 57 25 0d  |.!block%=listW%.|
00026a10  15 bc 24 c8 99 20 22 57  69 6d 70 5f 47 65 74 57  |..$.. "Wimp_GetW|
00026a20  69 6e 64 6f 77 53 74 61  74 65 22 2c 2c 62 6c 6f  |indowState",,blo|
00026a30  63 6b 25 0d 15 bd 3b 78  25 3d 28 62 6c 6f 63 6b  |ck%...;x%=(block|
00026a40  25 21 31 32 2b 62 6c 6f  63 6b 25 21 34 29 20 81  |%!12+block%!4) .|
00026a50  20 32 3a 79 25 3d 28 62  6c 6f 63 6b 25 21 31 36  | 2:y%=(block%!16|
00026a60  2b 62 6c 6f 63 6b 25 21  38 29 20 81 20 32 0d 15  |+block%!8) . 2..|
00026a70  be 22 62 6c 6f 63 6b 25  21 31 32 3d 62 6c 6f 63  |."block%!12=bloc|
00026a80  6b 25 21 34 2b 4c 65 6e  4c 69 6e 65 25 2a 31 36  |k%!4+LenLine%*16|
00026a90  0d 15 bf 11 e7 20 43 6f  75 6e 74 25 3c 32 38 20  |..... Count%<28 |
00026aa0  8c 0d 15 c0 22 20 20 62  6c 6f 63 6b 25 21 31 36  |...."  block%!16|
00026ab0  3d 62 6c 6f 63 6b 25 21  38 2b 43 6f 75 6e 74 25  |=block%!8+Count%|
00026ac0  2a 33 32 0d 15 c1 07 20  20 cc 0d 15 c2 1e 20 20  |*32....  .....  |
00026ad0  62 6c 6f 63 6b 25 21 31  36 3d 62 6c 6f 63 6b 25  |block%!16=block%|
00026ae0  21 38 2b 33 32 2a 32 38  0d 15 c3 05 cd 0d 15 c4  |!8+32*28........|
00026af0  21 c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 57  |!.. "Wimp_CloseW|
00026b00  69 6e 64 6f 77 22 2c 2c  62 6c 6f 63 6b 25 0d 15  |indow",,block%..|
00026b10  c5 18 f2 6f 70 65 6e 5f  77 69 6e 64 6f 77 28 6c  |...open_window(l|
00026b20  69 73 74 57 25 29 0d 15  c6 0d 4c 69 73 74 65 64  |istW%)....Listed|
00026b30  25 3d b9 0d 15 c7 1f f2  73 68 6f 77 5f 6d 65 6e  |%=......show_men|
00026b40  75 28 6d 65 6e 75 25 28  31 38 29 2c 78 25 2c 79  |u(menu%(18),x%,y|
00026b50  25 29 0d 15 c8 05 e1 0d  15 c9 05 3a 0d 15 ca 10  |%).........:....|
00026b60  dd 20 f2 73 6f 72 74 5f  6c 69 73 74 0d 15 cb 08  |. .sort_list....|
00026b70  ea 20 49 25 0d 15 cc 2e  69 6e 64 25 3d 21 74 65  |. I%....ind%=!te|
00026b80  78 74 61 6e 63 68 6f 72  25 2b 4c 65 6e 4c 69 6e  |xtanchor%+LenLin|
00026b90  65 25 2a 68 65 61 64 65  72 5f 6c 69 6e 65 73 25  |e%*header_lines%|
00026ba0  2d 31 0d 15 cd 17 e3 20  49 25 3d 30 20 b8 20 70  |-1..... I%=0 . p|
00026bb0  72 69 6e 74 65 64 25 2d  31 0d 15 ce 14 20 20 69  |rinted%-1....  i|
00026bc0  6e 64 25 2b 3d 4c 65 6e  4c 69 6e 65 25 0d 15 cf  |nd%+=LenLine%...|
00026bd0  18 20 20 62 6c 6f 63 6b  25 21 28 49 25 2a 34 29  |.  block%!(I%*4)|
00026be0  3d 69 6e 64 25 0d 15 d0  08 ed 20 49 25 0d 15 d1  |=ind%..... I%...|
00026bf0  6a c8 99 20 22 4f 53 5f  48 65 61 70 53 6f 72 74  |j.. "OS_HeapSort|
00026c00  22 2c 70 72 69 6e 74 65  64 25 2c 28 62 6c 6f 63  |",printed%,(bloc|
00026c10  6b 25 20 84 20 28 31 3c  3c 33 30 29 20 84 20 28  |k% . (1<<30) . (|
00026c20  31 3c 3c 33 31 29 29 2c  34 2c 2c 21 74 65 78 74  |1<<31)),4,,!text|
00026c30  61 6e 63 68 6f 72 25 2b  4c 65 6e 4c 69 6e 65 25  |anchor%+LenLine%|
00026c40  2a 68 65 61 64 65 72 5f  6c 69 6e 65 73 25 2c 4c  |*header_lines%,L|
00026c50  65 6e 4c 69 6e 65 25 0d  15 d2 13 f2 72 65 64 72  |enLine%.....redr|
00026c60  61 77 28 6c 69 73 74 57  25 29 0d 15 d3 05 e1 0d  |aw(listW%)......|
00026c70  15 d4 05 3a 0d 15 d5 10  dd 20 f2 6c 6f 73 65 5f  |...:..... .lose_|
00026c80  6c 69 73 74 0d 15 d6 19  f2 63 6c 6f 73 65 5f 77  |list.....close_w|
00026c90  69 6e 64 6f 77 28 6c 69  73 74 57 25 29 0d 15 d7  |indow(listW%)...|
00026ca0  25 f2 73 63 72 61 70 5f  73 6c 69 64 69 6e 67 5f  |%.scrap_sliding_|
00026cb0  62 6c 6f 63 6b 28 74 65  78 74 61 6e 63 68 6f 72  |block(textanchor|
00026cc0  25 29 0d 15 d8 24 f2 73  63 72 61 70 5f 73 6c 69  |%)...$.scrap_sli|
00026cd0  64 69 6e 67 5f 62 6c 6f  63 6b 28 72 65 63 61 6e  |ding_block(recan|
00026ce0  63 68 6f 72 25 29 0d 15  d9 0d 4c 69 73 74 65 64  |chor%)....Listed|
00026cf0  25 3d a3 0d 15 da 05 e1  0d 15 db 05 3a 0d 15 dc  |%=..........:...|
00026d00  16 dd 20 a4 70 61 72 73  65 28 53 24 2c 63 61 73  |.. .parse(S$,cas|
00026d10  65 25 29 0d 15 dd 7e ea  20 76 61 6c 25 2c 49 25  |e%)...~. val%,I%|
00026d20  2c 50 25 2c 46 25 2c 66  25 2c 74 25 2c 66 6c 61  |,P%,F%,f%,t%,fla|
00026d30  67 25 2c 6c 65 66 74 25  2c 72 69 67 68 74 25 2c  |g%,left%,right%,|
00026d40  73 65 61 72 63 68 24 2c  66 69 65 6c 64 24 2c 6f  |search$,field$,o|
00026d50  70 24 2c 62 6f 24 2c 74  61 72 67 65 74 24 2c 74  |p$,bo$,target$,t|
00026d60  61 72 67 24 2c 66 24 2c  74 24 2c 45 24 2c 45 31  |arg$,f$,t$,E$,E1|
00026d70  24 2c 54 69 74 46 64 24  2c 54 69 74 54 67 24 2c  |$,TitFd$,TitTg$,|
00026d80  73 69 6d 70 6c 65 25 2c  64 61 74 65 24 2c 53 46  |simple%,date$,SF|
00026d90  24 0d 15 de 19 75 73 65  6b 65 79 25 3d 2d 31 3a  |$....usekey%=-1:|
00026da0  75 73 65 76 61 6c 24 3d  22 22 0d 15 df 51 e7 20  |useval$=""...Q. |
00026db0  53 24 3d 22 22 20 84 20  a4 75 28 53 24 29 3d 22  |S$="" . .u(S$)="|
00026dc0  41 4c 4c 22 20 8c 20 54  69 74 6c 65 24 3d c1 a4  |ALL" . Title$=..|
00026dd0  6c 65 61 66 28 24 64 61  74 61 62 61 73 65 25 29  |leaf($database%)|
00026de0  2c 32 29 2b 22 2e 20 41  6c 6c 20 72 65 63 6f 72  |,2)+". All recor|
00026df0  64 73 22 3a 3d 22 54 52  55 45 22 0d 15 e0 17 73  |ds":="TRUE"....s|
00026e00  69 6d 70 6c 65 25 3d a4  73 69 6d 70 6c 65 28 53  |imple%=.simple(S|
00026e10  24 29 0d 15 e1 15 53 24  2b 3d 22 20 22 3a 54 69  |$)....S$+=" ":Ti|
00026e20  74 6c 65 24 3d 22 22 0d  15 e2 0e c8 95 20 a9 28  |tle$=""...... .(|
00026e30  53 24 29 3e 30 0d 15 e3  16 20 20 57 24 3d a4 77  |S$)>0....  W$=.w|
00026e40  6f 72 64 28 53 24 2c 22  20 22 29 0d 15 e4 35 20  |ord(S$," ")...5 |
00026e50  20 e7 20 57 24 3d 22 4e  4f 54 22 20 80 20 c0 53  | . W$="NOT" . .S|
00026e60  24 2c 31 29 3c 3e 22 28  22 20 8c 20 85 20 6d 6f  |$,1)<>"(" . . mo|
00026e70  61 6e 5f 65 72 72 25 2c  a4 6d 73 67 28 36 30 29  |an_err%,.msg(60)|
00026e80  0d 15 e5 15 20 20 f2 73  74 72 69 70 5f 62 72 61  |....  .strip_bra|
00026e90  63 6b 65 74 73 0d 15 e6  11 20 20 e7 20 a9 28 57  |ckets....  . .(W|
00026ea0  24 29 3e 30 20 8c 0d 15  e7 2a 20 20 20 20 66 6c  |$)>0 ....*    fl|
00026eb0  61 67 25 3d a3 3a 54 69  74 46 64 24 3d 22 22 3a  |ag%=.:TitFd$="":|
00026ec0  54 69 74 54 67 24 3d 22  22 3a 6f 70 24 3d 22 22  |TitTg$="":op$=""|
00026ed0  0d 15 e8 0f 20 20 20 20  c8 8e 20 57 24 20 ca 0d  |....    .. W$ ..|
00026ee0  15 e9 35 20 20 20 20 20  20 c9 20 22 41 4e 44 22  |..5      . "AND"|
00026ef0  2c 22 4f 52 22 2c 22 4e  4f 54 22 3a 45 24 3d 57  |,"OR","NOT":E$=W|
00026f00  24 3a 54 69 74 6c 65 24  2b 3d 22 20 22 2b 45 24  |$:Title$+=" "+E$|
00026f10  2b 22 20 22 0d 15 ea 2b  20 20 20 20 20 20 c9 20  |+" "...+      . |
00026f20  22 26 22 3a 45 24 3d 22  41 4e 44 22 3a 54 69 74  |"&":E$="AND":Tit|
00026f30  6c 65 24 2b 3d 22 20 22  2b 45 24 2b 22 20 22 0d  |le$+=" "+E$+" ".|
00026f40  15 eb 0c 20 20 20 20 20  20 7f 3a 0d 15 ec 0f 20  |...      .:.... |
00026f50  20 20 20 20 20 45 24 3d  22 22 0d 15 ed 10 20 20  |     E$=""....  |
00026f60  20 20 20 20 f2 73 70 6c  69 74 0d 15 ee 18 20 20  |    .split....  |
00026f70  20 20 20 20 c8 95 20 a9  28 66 69 65 6c 64 24 29  |    .. .(field$)|
00026f80  3e 30 0d 15 ef 24 20 20  20 20 20 20 20 20 66 24  |>0...$        f$|
00026f90  3d a4 75 28 a4 77 6f 72  64 28 66 69 65 6c 64 24  |=.u(.word(field$|
00026fa0  2c 22 2c 22 29 29 0d 15  f0 1b 20 20 20 20 20 20  |,","))....      |
00026fb0  20 20 66 25 3d a4 66 69  65 6c 64 28 66 24 2c b9  |  f%=.field(f$,.|
00026fc0  29 0d 15 f1 1e 20 20 20  20 20 20 20 20 66 24 3d  |)....        f$=|
00026fd0  22 46 24 28 22 2b c3 28  66 25 29 2b 22 29 22 0d  |"F$("+.(f%)+")".|
00026fe0  15 f2 28 20 20 20 20 20  20 20 20 e7 20 ac 20 63  |..(        . . c|
00026ff0  61 73 65 25 20 8c 20 66  24 3d 22 46 4e 75 28 22  |ase% . f$="FNu("|
00027000  2b 66 24 2b 22 29 22 0d  15 f3 25 20 20 20 20 20  |+f$+")"...%     |
00027010  20 20 20 e7 20 76 61 6c  25 20 8c 20 66 24 3d 22  |   . val% . f$="|
00027020  56 41 4c 28 22 2b 66 24  2b 22 29 22 0d 15 f4 1e  |VAL("+f$+")"....|
00027030  20 20 20 20 20 20 20 20  c8 8e 20 63 68 61 72 74  |        .. chart|
00027040  79 70 65 25 28 66 25 29  20 ca 0d 15 f5 33 20 20  |ype%(f%) ....3  |
00027050  20 20 20 20 20 20 20 20  c9 20 35 2c 35 31 2c 35  |        . 5,51,5|
00027060  32 3a 66 24 3d 22 46 4e  72 65 76 65 72 73 65 5f  |2:f$="FNreverse_|
00027070  64 61 74 65 28 22 2b 66  24 2b 22 29 22 0d 15 f6  |date("+f$+")"...|
00027080  0d 20 20 20 20 20 20 20  20 cb 0d 15 f7 19 20 20  |.        .....  |
00027090  20 20 20 20 20 20 74 61  72 67 24 3d 74 61 72 67  |      targ$=targ|
000270a0  65 74 24 0d 15 f8 19 20  20 20 20 20 20 20 20 c8  |et$....        .|
000270b0  95 20 a9 28 74 61 72 67  24 29 3e 30 0d 15 f9 27  |. .(targ$)>0...'|
000270c0  20 20 20 20 20 20 20 20  20 20 74 24 3d a4 77 6f  |          t$=.wo|
000270d0  72 64 28 74 61 72 67 24  2c 22 2c 22 29 3a 75 24  |rd(targ$,","):u$|
000270e0  3d 74 24 0d 15 fa 42 20  20 20 20 20 20 20 20 20  |=t$...B         |
000270f0  20 e7 20 ac 20 66 6c 61  67 25 20 8c 20 54 69 74  | . . flag% . Tit|
00027100  54 67 24 2b 3d a4 65 78  70 61 6e 64 28 74 24 2c  |Tg$+=.expand(t$,|
00027110  6c 69 6e 6b 24 28 66 25  29 2c 4c 25 2c 53 46 24  |link$(f%),L%,SF$|
00027120  29 2b 22 2c 22 0d 15 fb  32 20 20 20 20 20 20 20  |)+","...2       |
00027130  20 20 20 e7 20 63 68 61  72 74 79 70 65 25 28 66  |   . chartype%(f|
00027140  25 29 3e 34 30 20 8c 20  74 24 3d a4 70 6f 73 5f  |%)>40 . t$=.pos_|
00027150  6e 65 67 28 74 24 29 0d  15 fc 20 20 20 20 20 20  |neg(t$)...      |
00027160  20 20 20 20 20 c8 8e 20  63 68 61 72 74 79 70 65  |     .. chartype|
00027170  25 28 66 25 29 20 ca 0d  15 fd 1a 20 20 20 20 20  |%(f%) .....     |
00027180  20 20 20 20 20 20 20 c9  20 35 2c 35 31 2c 35 32  |       . 5,51,52|
00027190  3a 0d 15 fe 4b 20 20 20  20 20 20 20 20 20 20 20  |:...K           |
000271a0  20 e7 20 a4 63 68 65 63  6b 5f 64 61 74 65 28 74  | . .check_date(t|
000271b0  24 2c 32 2c 64 61 74 65  24 29 3d b9 20 8c 20 74  |$,2,date$)=. . t|
000271c0  24 3d a4 72 65 76 65 72  73 65 5f 64 61 74 65 28  |$=.reverse_date(|
000271d0  64 61 74 65 24 29 3a 75  24 3d 74 24 0d 15 ff 0f  |date$):u$=t$....|
000271e0  20 20 20 20 20 20 20 20  20 20 cb 0d 16 00 1d 20  |          ..... |
000271f0  20 20 20 20 20 20 20 20  20 74 24 3d 22 22 22 22  |         t$=""""|
00027200  2b 74 24 2b 22 22 22 22  0d 16 01 27 20 20 20 20  |+t$+""""...'    |
00027210  20 20 20 20 20 20 e7 20  76 61 6c 25 20 8c 20 74  |      . val% . t|
00027220  24 3d 22 56 41 4c 28 22  2b 74 24 2b 22 29 22 0d  |$="VAL("+t$+")".|
00027230  16 02 16 20 20 20 20 20  20 20 20 20 20 e7 20 66  |...          . f|
00027240  25 3d 30 20 8c 0d 16 03  18 20 20 20 20 20 20 20  |%=0 .....       |
00027250  20 20 20 20 20 c8 8e 20  6f 70 24 20 ca 0d 16 04  |     .. op$ ....|
00027260  3b 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |;              .|
00027270  20 22 7b 22 2c 22 3d 22  3a 45 31 24 3d 22 46 4e  | "{","=":E1$="FN|
00027280  61 6e 79 28 22 2b 74 24  2b 22 2c 22 22 22 2b 6f  |any("+t$+","""+o|
00027290  70 24 2b 22 22 22 29 22  0d 16 05 2e 20 20 20 20  |p$+""")"....    |
000272a0  20 20 20 20 20 20 20 20  20 20 c9 20 22 7d 7b 22  |          . "}{"|
000272b0  3a 85 20 6d 6f 61 6e 5f  65 72 72 25 2c a4 6d 73  |:. moan_err%,.ms|
000272c0  67 28 31 30 30 29 0d 16  06 2e 20 20 20 20 20 20  |g(100)....      |
000272d0  20 20 20 20 20 20 20 20  c9 20 22 3c 3e 22 3a 85  |        . "<>":.|
000272e0  20 6d 6f 61 6e 5f 65 72  72 25 2c a4 6d 73 67 28  | moan_err%,.msg(|
000272f0  31 30 31 29 0d 16 07 37  20 20 20 20 20 20 20 20  |101)...7        |
00027300  20 20 20 20 20 20 7f 3a  85 20 6d 6f 61 6e 5f 65  |      .:. moan_e|
00027310  72 72 25 2c 22 22 22 22  2b 6f 70 24 2b 22 22 22  |rr%,""""+op$+"""|
00027320  22 2b a4 6d 73 67 28 31  30 32 29 0d 16 08 11 20  |"+.msg(102).... |
00027330  20 20 20 20 20 20 20 20  20 20 20 cb 0d 16 09 11  |           .....|
00027340  20 20 20 20 20 20 20 20  20 20 20 20 cc 0d 16 0a  |            ....|
00027350  18 20 20 20 20 20 20 20  20 20 20 20 20 c8 8e 20  |.            .. |
00027360  6f 70 24 20 ca 0d 16 0b  34 20 20 20 20 20 20 20  |op$ ....4       |
00027370  20 20 20 20 20 20 20 c9  20 22 7b 22 3a 45 31 24  |       . "{":E1$|
00027380  3d 22 49 4e 53 54 52 28  22 2b 66 24 2b 22 2c 22  |="INSTR("+f$+","|
00027390  2b 74 24 2b 22 29 3e 30  22 0d 16 0c 35 20 20 20  |+t$+")>0"...5   |
000273a0  20 20 20 20 20 20 20 20  20 20 20 c9 20 22 7d 7b  |           . "}{|
000273b0  22 3a 45 31 24 3d 22 49  4e 53 54 52 28 22 2b 66  |":E1$="INSTR("+f|
000273c0  24 2b 22 2c 22 2b 74 24  2b 22 29 3d 30 22 0d 16  |$+","+t$+")=0"..|
000273d0  0d 18 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
000273e0  c9 20 22 3d 22 3a 0d 16  0e 1f 20 20 20 20 20 20  |. "=":....      |
000273f0  20 20 20 20 20 20 20 20  45 31 24 3d 66 24 2b 6f  |        E1$=f$+o|
00027400  70 24 2b 74 24 0d 16 0f  2c 20 20 20 20 20 20 20  |p$+t$...,       |
00027410  20 20 20 20 20 20 20 e7  20 73 69 6d 70 6c 65 25  |       . simple%|
00027420  3d b9 20 80 20 75 73 65  6b 65 79 25 3d 2d 31 20  |=. . usekey%=-1 |
00027430  8c 0d 16 10 2b 20 20 20  20 20 20 20 20 20 20 20  |....+           |
00027440  20 20 20 20 20 66 6f 75  6e 64 6b 65 79 25 3d a4  |     foundkey%=.|
00027450  69 73 5f 61 5f 6b 65 79  28 66 25 29 0d 16 11 40  |is_a_key(f%)...@|
00027460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00027470  e7 20 66 6f 75 6e 64 6b  65 79 25 3e 3d 30 20 8c  |. foundkey%>=0 .|
00027480  20 e7 20 4b 4c 25 28 66  6f 75 6e 64 6b 65 79 25  | . KL%(foundkey%|
00027490  29 3d 6c 65 6e 25 28 66  25 29 20 8c 0d 16 12 32  |)=len%(f%) ....2|
000274a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000274b0  20 20 75 73 65 6b 65 79  25 3d 66 6f 75 6e 64 6b  |  usekey%=foundk|
000274c0  65 79 25 3a 75 73 65 76  61 6c 24 3d 75 24 0d 16  |ey%:useval$=u$..|
000274d0  13 15 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
000274e0  20 20 cd 0d 16 14 13 20  20 20 20 20 20 20 20 20  |  .....         |
000274f0  20 20 20 20 20 cd 0d 16  15 21 20 20 20 20 20 20  |     ....!      |
00027500  20 20 20 20 20 20 20 20  7f 3a 45 31 24 3d 66 24  |        .:E1$=f$|
00027510  2b 6f 70 24 2b 74 24 0d  16 16 11 20 20 20 20 20  |+op$+t$....     |
00027520  20 20 20 20 20 20 20 cb  0d 16 17 0f 20 20 20 20  |       .....    |
00027530  20 20 20 20 20 20 cd 0d  16 18 40 20 20 20 20 20  |      ....@     |
00027540  20 20 20 20 20 e7 20 a9  28 45 24 29 2b a9 28 45  |     . .(E$)+.(E|
00027550  31 24 29 3e 32 35 35 20  8c 20 85 20 6d 6f 61 6e  |1$)>255 . . moan|
00027560  5f 65 72 72 25 2c a4 6d  73 67 28 36 29 20 8b 20  |_err%,.msg(6) . |
00027570  45 24 2b 3d 45 31 24 0d  16 19 40 20 20 20 20 20  |E$+=E1$...@     |
00027580  20 20 20 20 20 e7 20 a9  28 45 24 29 2b a9 28 62  |     . .(E$)+.(b|
00027590  6f 24 29 3e 32 35 35 20  8c 20 85 20 6d 6f 61 6e  |o$)>255 . . moan|
000275a0  5f 65 72 72 25 2c a4 6d  73 67 28 36 29 20 8b 20  |_err%,.msg(6) . |
000275b0  45 24 2b 3d 62 6f 24 0d  16 1a 0d 20 20 20 20 20  |E$+=bo$....     |
000275c0  20 20 20 ce 0d 16 1b 13  20 20 20 20 20 20 20 20  |   .....        |
000275d0  66 6c 61 67 25 3d b9 0d  16 1c 0b 20 20 20 20 20  |flag%=.....     |
000275e0  20 ce 0d 16 1d 1e 20 20  20 20 20 20 45 24 3d c0  | .....      E$=.|
000275f0  45 24 2c a9 28 45 24 29  2d a9 28 62 6f 24 29 29  |E$,.(E$)-.(bo$))|
00027600  0d 16 1e 18 20 20 20 20  20 20 e7 20 a7 45 24 2c  |....      . .E$,|
00027610  62 6f 24 29 3e 30 20 8c  0d 16 1f 3d 20 20 20 20  |bo$)>0 ....=    |
00027620  20 20 20 20 e7 20 a9 28  45 24 29 3e 32 35 33 20  |    . .(E$)>253 |
00027630  8c 20 85 20 6d 6f 61 6e  5f 65 72 72 25 2c a4 6d  |. . moan_err%,.m|
00027640  73 67 28 36 29 20 8b 20  45 24 3d 22 28 22 2b 45  |sg(6) . E$="("+E|
00027650  24 2b 22 29 22 0d 16 20  0b 20 20 20 20 20 20 cd  |$+")".. .      .|
00027660  0d 16 21 09 20 20 20 20  cb 0d 16 22 07 20 20 cd  |..!.    ...".  .|
00027670  0d 16 23 13 20 20 f2 61  64 64 5f 62 72 61 63 6b  |..#.  .add_brack|
00027680  65 74 73 0d 16 24 0d 20  20 45 24 2b 3d 22 20 22  |ets..$.  E$+=" "|
00027690  0d 16 25 1e 20 20 e7 20  a9 28 73 65 61 72 63 68  |..%.  . .(search|
000276a0  24 29 2b a9 28 45 24 29  3e 32 35 35 20 8c 0d 16  |$)+.(E$)>255 ...|
000276b0  26 1b 20 20 20 20 85 20  6d 6f 61 6e 5f 65 72 72  |&.    . moan_err|
000276c0  25 2c a4 6d 73 67 28 36  29 0d 16 27 15 20 20 20  |%,.msg(6)..'.   |
000276d0  20 cc 20 73 65 61 72 63  68 24 2b 3d 45 24 0d 16  | . search$+=E$..|
000276e0  28 14 20 20 20 20 f2 62  75 69 6c 64 5f 74 69 74  |(.    .build_tit|
000276f0  6c 65 0d 16 29 07 20 20  cd 0d 16 2a 05 ce 0d 16  |le..).  ...*....|
00027700  2b 2c 54 69 74 6c 65 24  3d c1 a4 6c 65 61 66 28  |+,Title$=..leaf(|
00027710  24 64 61 74 61 62 61 73  65 25 29 2c 32 29 2b 22  |$database%),2)+"|
00027720  2e 20 22 2b 54 69 74 6c  65 24 0d 16 2c 12 e7 20  |. "+Title$..,.. |
00027730  75 73 65 6b 65 79 25 3e  3d 30 20 8c 0d 16 2d 2a  |usekey%>=0 ...-*|
00027740  20 20 6b 6c 25 3d 4b 4c  25 28 75 73 65 6b 65 79  |  kl%=KL%(usekey|
00027750  25 29 3a 76 61 6c 24 3d  a4 74 79 70 65 28 75 73  |%):val$=.type(us|
00027760  65 6b 65 79 25 29 0d 16  2e 1d 20 20 cc 20 f2 64  |ekey%)....  . .d|
00027770  65 73 65 6c 65 63 74 28  6d 61 74 63 68 57 25 2c  |eselect(matchW%,|
00027780  32 33 29 0d 16 2f 05 cd  0d 16 30 0c 3d 73 65 61  |23)../....0.=sea|
00027790  72 63 68 24 0d 16 31 05  3a 0d 16 32 12 dd 20 a4  |rch$..1.:..2.. .|
000277a0  70 6f 73 5f 6e 65 67 28  73 24 29 0d 16 33 0b c8  |pos_neg(s$)..3..|
000277b0  8e 20 73 24 20 ca 0d 16  34 2a 20 20 c9 20 22 2b  |. s$ ...4*  . "+|
000277c0  22 2c 22 79 22 2c 22 59  22 2c 22 2a 22 2c 22 80  |","y","Y","*",".|
000277d0  22 2c 22 54 22 2c 22 74  22 3a 73 24 3d 22 20 22  |","T","t":s$=" "|
000277e0  0d 16 35 29 20 20 c9 20  22 2d 22 2c 22 6e 22 2c  |..5)  . "-","n",|
000277f0  22 4e 22 2c 22 78 22 2c  22 58 22 2c 22 46 22 2c  |"N","x","X","F",|
00027800  22 66 22 3a 73 24 3d 22  22 0d 16 36 05 cb 0d 16  |"f":s$=""..6....|
00027810  37 07 3d 73 24 0d 16 38  05 3a 0d 16 39 11 dd 20  |7.=s$..8.:..9.. |
00027820  a4 73 69 6d 70 6c 65 28  53 24 29 0d 16 3a 51 e7  |.simple(S$)..:Q.|
00027830  20 a7 53 24 2c 22 3d 22  29 3e 30 20 80 20 28 a7  | .S$,"=")>0 . (.|
00027840  53 24 2c 22 2c 22 29 3d  30 20 80 20 a7 53 24 2c  |S$,",")=0 . .S$,|
00027850  22 2d 22 29 3d 30 20 80  20 a7 53 24 2c 22 4f 52  |"-")=0 . .S$,"OR|
00027860  22 29 3d 30 20 80 20 a7  53 24 2c 22 4e 4f 54 22  |")=0 . .S$,"NOT"|
00027870  29 3d 30 29 20 8c 3d b9  20 8b 3d a3 0d 16 3b 05  |)=0) .=. .=...;.|
00027880  3a 0d 16 3c 16 dd 20 a4  77 6f 72 64 28 f8 20 53  |:..<.. .word(. S|
00027890  24 2c 73 65 70 24 29 0d  16 3d 13 ea 20 50 25 2c  |$,sep$)..=.. P%,|
000278a0  57 24 2c 51 31 25 2c 51  32 25 0d 16 3e 05 f5 0d  |W$,Q1%,Q2%..>...|
000278b0  16 3f 27 20 20 51 31 25  3d a7 53 24 2c 22 22 22  |.?'  Q1%=.S$,"""|
000278c0  22 29 3a 51 32 25 3d a7  53 24 2c 22 22 22 22 2c  |"):Q2%=.S$,"""",|
000278d0  51 31 25 2b 31 29 0d 16  40 15 20 20 50 25 3d a7  |Q1%+1)..@.  P%=.|
000278e0  53 24 2c 73 65 70 24 2c  50 25 29 0d 16 41 0c 20  |S$,sep$,P%)..A. |
000278f0  20 c8 8e 20 b9 20 ca 0d  16 42 2d 20 20 20 20 c9  | .. . ...B-    .|
00027900  20 28 50 25 3e 51 31 25  20 80 20 50 25 3c 51 32  | (P%>Q1% . P%<Q2|
00027910  25 29 2c 28 50 25 3e 51  32 25 20 80 20 51 32 25  |%),(P%>Q2% . Q2%|
00027920  3e 30 29 3a 0d 16 43 35  20 20 20 20 53 24 3d c0  |>0):..C5    S$=.|
00027930  53 24 2c 51 31 25 2d 31  29 2b c1 53 24 2c 51 31  |S$,Q1%-1)+.S$,Q1|
00027940  25 2b 31 2c 51 32 25 2d  51 31 25 2d 31 29 2b c1  |%+1,Q2%-Q1%-1)+.|
00027950  53 24 2c 51 32 25 2b 31  29 0d 16 44 39 20 20 20  |S$,Q2%+1)..D9   |
00027960  20 50 25 3d 51 32 25 2d  32 3a f4 20 23 23 23 20  | P%=Q2%-2:. ### |
00027970  53 24 20 69 73 20 6e 6f  77 20 32 20 63 68 61 72  |S$ is now 2 char|
00027980  61 63 74 65 72 73 20 73  68 6f 72 74 65 72 20 23  |acters shorter #|
00027990  23 23 0d 16 45 29 20 20  20 20 c9 20 51 31 25 3e  |##..E)    . Q1%>|
000279a0  30 20 80 20 51 32 25 3d  30 3a f2 73 6f 66 74 65  |0 . Q2%=0:.softe|
000279b0  72 72 6f 72 28 22 22 2c  39 33 29 0d 16 46 20 20  |rror("",93)..F  |
000279c0  20 20 20 53 24 3d c0 53  24 2c 51 31 25 2d 31 29  |   S$=.S$,Q1%-1)|
000279d0  2b c1 53 24 2c 51 31 25  2b 31 29 0d 16 47 07 20  |+.S$,Q1%+1)..G. |
000279e0  20 cb 0d 16 48 18 fd 20  51 31 25 2b 51 32 25 3d  | ...H.. Q1%+Q2%=|
000279f0  30 20 84 20 50 25 3c 51  31 25 0d 16 49 10 57 24  |0 . P%<Q1%..I.W$|
00027a00  3d c0 53 24 2c 50 25 2d  31 29 0d 16 4a 10 53 24  |=.S$,P%-1)..J.S$|
00027a10  3d c1 53 24 2c 50 25 2b  31 29 0d 16 4b 07 3d 57  |=.S$,P%+1)..K.=W|
00027a20  24 0d 16 4c 05 3a 0d 16  4d 15 dd 20 a4 61 6e 79  |$..L.:..M.. .any|
00027a30  28 74 61 72 67 24 2c 6f  70 24 29 0d 16 4e 18 ea  |(targ$,op$)..N..|
00027a40  20 46 25 2c 66 6f 75 6e  64 25 2c 63 61 73 65 25  | F%,found%,case%|
00027a50  2c 46 24 0d 16 4f 1f 63  61 73 65 25 3d a4 73 65  |,F$..O.case%=.se|
00027a60  6c 65 63 74 65 64 28 6d  61 74 63 68 57 25 2c 31  |lected(matchW%,1|
00027a70  36 29 0d 16 50 05 f5 0d  16 51 15 20 20 46 25 2b  |6)..P....Q.  F%+|
00027a80  3d 31 3a 46 24 3d 46 24  28 46 25 29 0d 16 52 1b  |=1:F$=F$(F%)..R.|
00027a90  20 20 e7 20 ac 20 63 61  73 65 25 20 8c 20 46 24  |  . . case% . F$|
00027aa0  3d a4 75 28 46 24 29 0d  16 53 0e 20 20 c8 8e 20  |=.u(F$)..S.  .. |
00027ab0  6f 70 24 20 ca 0d 16 54  27 20 20 20 20 c9 20 22  |op$ ...T'    . "|
00027ac0  7b 22 3a e7 20 a7 46 24  2c 74 61 72 67 24 29 3e  |{":. .F$,targ$)>|
00027ad0  30 20 8c 20 66 6f 75 6e  64 25 3d b9 0d 16 55 23  |0 . found%=...U#|
00027ae0  20 20 20 20 c9 20 22 3d  22 3a e7 20 46 24 3d 74  |    . "=":. F$=t|
00027af0  61 72 67 24 20 8c 20 66  6f 75 6e 64 25 3d b9 0d  |arg$ . found%=..|
00027b00  16 56 07 20 20 cb 0d 16  57 19 fd 20 66 6f 75 6e  |.V.  ...W.. foun|
00027b10  64 25 20 84 20 46 25 3d  66 69 65 6c 64 73 25 0d  |d% . F%=fields%.|
00027b20  16 58 0b 3d 66 6f 75 6e  64 25 0d 16 59 05 3a 0d  |.X.=found%..Y.:.|
00027b30  16 5a 0c dd 20 f2 73 70  6c 69 74 0d 16 5b 0e ea  |.Z.. .split..[..|
00027b40  20 58 24 2c 51 25 2c 49  25 0d 16 5c 38 58 24 3d  | X$,Q%,I%..\8X$=|
00027b50  22 3e 3d 3e 3d 2c 3c 3d  3c 3d 2c 3c 3e 2c 7d 7b  |">=>=,<=<=,<>,}{|
00027b60  2c 3e 3d 2c 3c 3d 2c 3d  3d 2c 3e 3e 2c 3c 3c 2c  |,>=,<=,==,>>,<<,|
00027b70  7b 7b 2c 3d 2c 3c 2c 3e  2c 7b 2c 22 3a 50 25 3d  |{{,=,<,>,{,":P%=|
00027b80  30 0d 16 5d 15 c8 95 20  a9 28 58 24 29 3e 30 20  |0..]... .(X$)>0 |
00027b90  80 20 50 25 3d 30 0d 16  5e 2c 20 20 51 25 3d a7  |. P%=0..^,  Q%=.|
00027ba0  58 24 2c 22 2c 22 29 3a  6f 70 24 3d c0 58 24 2c  |X$,","):op$=.X$,|
00027bb0  51 25 2d 31 29 3a 58 24  3d c1 58 24 2c 51 25 2b  |Q%-1):X$=.X$,Q%+|
00027bc0  31 29 0d 16 5f 11 20 20  50 25 3d a7 57 24 2c 6f  |1).._.  P%=.W$,o|
00027bd0  70 24 29 0d 16 60 05 ce  0d 16 61 0c e7 20 50 25  |p$)..`....a.. P%|
00027be0  3e 30 20 8c 0d 16 62 16  20 20 66 69 65 6c 64 24  |>0 ...b.  field$|
00027bf0  3d c0 57 24 2c 50 25 2d  31 29 0d 16 63 20 20 20  |=.W$,P%-1)..c   |
00027c00  74 61 72 67 65 74 24 3d  c1 57 24 2c 50 25 2b a9  |target$=.W$,P%+.|
00027c10  28 6f 70 24 29 29 2b 22  2c 22 0d 16 64 25 20 20  |(op$))+","..d%  |
00027c20  e7 20 ac 20 63 61 73 65  25 20 8c 20 74 61 72 67  |. . case% . targ|
00027c30  65 74 24 3d a4 75 28 74  61 72 67 65 74 24 29 0d  |et$=.u(target$).|
00027c40  16 65 17 20 20 66 69 65  6c 64 24 3d a4 65 78 70  |.e.  field$=.exp|
00027c50  5f 66 69 65 6c 64 0d 16  66 0e 20 20 c8 8e 20 6f  |_field..f.  .. o|
00027c60  70 24 20 ca 0d 16 67 1d  20 20 20 20 c9 20 22 3c  |p$ ...g.    . "<|
00027c70  3e 22 2c 22 7d 7b 22 3a  62 6f 24 3d 22 41 4e 44  |>","}{":bo$="AND|
00027c80  22 0d 16 68 1c 20 20 20  20 c9 20 22 3c 3d 22 2c  |"..h.    . "<=",|
00027c90  22 3e 3d 22 3a 62 6f 24  3d 22 4f 52 22 0d 16 69  |">=":bo$="OR"..i|
00027ca0  18 20 20 20 20 c9 20 22  3c 3d 3c 3d 22 2c 22 3e  |.    . "<=<=",">|
00027cb0  3d 3e 3d 22 3a 0d 16 6a  1d 20 20 20 20 6f 70 24  |=>=":..j.    op$|
00027cc0  3d c0 6f 70 24 2c 32 29  3a 62 6f 24 3d 22 41 4e  |=.op$,2):bo$="AN|
00027cd0  44 22 0d 16 6b 1e 20 20  20 20 c9 20 22 3d 3d 22  |D"..k.    . "=="|
00027ce0  2c 22 3c 3c 22 2c 22 3e  3e 22 2c 22 7b 7b 22 3a  |,"<<",">>","{{":|
00027cf0  0d 16 6c 1d 20 20 20 20  6f 70 24 3d c0 6f 70 24  |..l.    op$=.op$|
00027d00  2c 31 29 3a 62 6f 24 3d  22 41 4e 44 22 0d 16 6d  |,1):bo$="AND"..m|
00027d10  12 20 20 20 20 7f 3a 62  6f 24 3d 22 4f 52 22 0d  |.    .:bo$="OR".|
00027d20  16 6e 07 20 20 cb 0d 16  6f 1c 20 20 cc 20 85 20  |.n.  ...o.  . . |
00027d30  6d 6f 61 6e 5f 65 72 72  25 2c a4 6d 73 67 28 34  |moan_err%,.msg(4|
00027d40  30 29 0d 16 70 05 cd 0d  16 71 05 e1 0d 16 72 05  |0)..p....q....r.|
00027d50  3a 0d 16 73 10 dd 20 a4  65 78 70 5f 66 69 65 6c  |:..s.. .exp_fiel|
00027d60  64 0d 16 74 16 ea 20 50  25 2c 49 25 2c 46 31 25  |d..t.. P%,I%,F1%|
00027d70  2c 46 32 25 2c 46 24 0d  16 75 13 50 25 3d a7 66  |,F2%,F$..u.P%=.f|
00027d80  69 65 6c 64 24 2c 22 2d  22 29 0d 16 76 0c e7 20  |ield$,"-")..v.. |
00027d90  50 25 3d 30 20 8c 0d 16  77 13 20 20 46 24 3d 66  |P%=0 ...w.  F$=f|
00027da0  69 65 6c 64 24 2b 22 2c  22 0d 16 78 07 20 20 cc  |ield$+","..x.  .|
00027db0  0d 16 79 21 20 20 46 31  25 3d a4 66 69 65 6c 64  |..y!  F1%=.field|
00027dc0  28 c0 66 69 65 6c 64 24  2c 50 25 2d 31 29 2c a3  |(.field$,P%-1),.|
00027dd0  29 0d 16 7a 21 20 20 46  32 25 3d a4 66 69 65 6c  |)..z!  F2%=.fiel|
00027de0  64 28 c1 66 69 65 6c 64  24 2c 50 25 2b 31 29 2c  |d(.field$,P%+1),|
00027df0  a3 29 0d 16 7b 1c 20 20  e7 20 46 31 25 3e 46 32  |.)..{.  . F1%>F2|
00027e00  25 20 8c 20 c8 94 20 46  31 25 2c 46 32 25 0d 16  |% . .. F1%,F2%..|
00027e10  7c 14 20 20 e3 20 49 25  3d 46 31 25 20 b8 20 46  ||.  . I%=F1% . F|
00027e20  32 25 0d 16 7d 18 20 20  20 20 46 24 2b 3d 54 61  |2%..}.    F$+=Ta|
00027e30  67 24 28 49 25 29 2b 22  2c 22 0d 16 7e 0a 20 20  |g$(I%)+","..~.  |
00027e40  ed 20 49 25 0d 16 7f 05  cd 0d 16 80 07 3d 46 24  |. I%.........=F$|
00027e50  0d 16 81 05 3a 0d 16 82  0f dd 20 a4 66 6e 75 6d  |....:..... .fnum|
00027e60  28 53 24 29 0d 16 83 08  ea 20 4e 25 0d 16 84 10  |(S$)..... N%....|
00027e70  4e 25 3d a0 28 22 26 22  2b 53 24 29 0d 16 85 1b  |N%=.("&"+S$)....|
00027e80  6e 65 77 6c 69 6e 65 25  3d 28 28 4e 25 20 80 20  |newline%=((N% . |
00027e90  31 32 38 29 3e 30 29 0d  16 86 0f 3d 28 4e 25 20  |128)>0)....=(N% |
00027ea0  80 20 31 32 37 29 0d 16  87 05 3a 0d 16 88 13 dd  |. 127)....:.....|
00027eb0  20 a4 66 69 65 6c 64 28  66 24 2c 5a 25 29 0d 16  | .field(f$,Z%)..|
00027ec0  89 11 ea 20 49 25 2c 46  25 2c 64 65 73 63 24 0d  |... I%,F%,desc$.|
00027ed0  16 8a 25 e7 20 66 24 3d  22 40 22 20 8c 20 54 69  |..%. f$="@" . Ti|
00027ee0  74 46 64 24 3d 22 41 6e  79 20 66 69 65 6c 64 20  |tFd$="Any field |
00027ef0  22 3a 3d 30 0d 16 8b 0a  76 61 6c 25 3d a3 0d 16  |":=0....val%=...|
00027f00  8c 30 e7 20 c0 66 24 2c  31 29 3d 22 5b 22 20 80  |.0. .f$,1)="[" .|
00027f10  20 c2 66 24 29 3d 22 5d  22 20 8c 20 66 24 3d c1  | .f$)="]" . f$=.|
00027f20  c0 66 24 29 2c 32 29 3a  76 61 6c 25 3d b9 0d 16  |.f$),2):val%=...|
00027f30  8d 11 c8 95 20 49 25 3c  66 69 65 6c 64 73 25 0d  |.... I%<fields%.|
00027f40  16 8e 0b 20 20 49 25 2b  3d 31 0d 16 8f 23 20 20  |...  I%+=1...#  |
00027f50  e7 20 a4 75 28 54 61 67  24 28 49 25 29 29 3d a4  |. .u(Tag$(I%))=.|
00027f60  75 28 66 24 29 20 8c 20  46 25 3d 49 25 0d 16 90  |u(f$) . F%=I%...|
00027f70  05 ce 0d 16 91 13 e7 20  46 25 3e 30 20 80 20 5a  |....... F%>0 . Z|
00027f80  25 3d b9 20 8c 0d 16 92  24 20 20 64 65 73 63 24  |%=. ....$  desc$|
00027f90  3d 24 a4 74 65 78 74 28  6d 61 69 6e 57 25 2c 64  |=$.text(mainW%,d|
00027fa0  65 73 63 25 28 46 25 29  29 0d 16 93 36 20 20 e7  |esc%(F%))...6  .|
00027fb0  20 64 65 73 63 24 3c 3e  22 22 20 8c 20 54 69 74  | desc$<>"" . Tit|
00027fc0  46 64 24 2b 3d 64 65 73  63 24 2b 22 2c 22 20 8b  |Fd$+=desc$+"," .|
00027fd0  20 54 69 74 46 64 24 2b  3d 66 24 2b 22 2c 22 0d  | TitFd$+=f$+",".|
00027fe0  16 94 35 20 20 cc 20 e7  20 46 25 3d 30 20 8c 20  |..5  . . F%=0 . |
00027ff0  85 20 6d 6f 61 6e 5f 65  72 72 25 2c a4 6d 73 67  |. moan_err%,.msg|
00028000  28 38 29 2b 22 20 28 22  2b 66 24 2b 22 29 22 2b  |(8)+" ("+f$+")"+|
00028010  bd 28 30 29 0d 16 95 05  cd 0d 16 96 16 c8 8e 20  |.(0)........... |
00028020  63 68 61 72 74 79 70 65  25 28 46 25 29 20 ca 0d  |chartype%(F%) ..|
00028030  16 97 21 20 20 c9 20 33  2c 36 2c 34 36 2c 34 37  |..!  . 3,6,46,47|
00028040  2c 35 34 2c 35 36 2c 35  37 3a 76 61 6c 25 3d b9  |,54,56,57:val%=.|
00028050  0d 16 98 05 cb 0d 16 99  07 3d 46 25 0d 16 9a 05  |.........=F%....|
00028060  3a 0d 16 9b 25 dd 20 a4  66 69 6e 64 5f 66 69 65  |:...%. .find_fie|
00028070  6c 64 73 28 53 24 2c 73  65 70 24 2c f8 20 6c 65  |lds(S$,sep$,. le|
00028080  6e 67 74 68 25 29 0d 16  9c 17 ea 20 66 24 2c 46  |ngth%)..... f$,F|
00028090  24 2c 43 24 2c 50 25 2c  51 25 2c 46 25 0d 16 9d  |$,C$,P%,Q%,F%...|
000280a0  12 51 25 3d 31 3a 6c 65  6e 67 74 68 25 3d 30 0d  |.Q%=1:length%=0.|
000280b0  16 9e 05 f5 0d 16 9f 15  20 20 50 25 3d a7 53 24  |........  P%=.S$|
000280c0  2c 73 65 70 24 2c 51 25  29 0d 16 a0 1f 20 20 e7  |,sep$,Q%)....  .|
000280d0  20 50 25 3e 30 20 8c 20  66 24 3d c1 53 24 2c 51  | P%>0 . f$=.S$,Q|
000280e0  25 2c 50 25 2d 51 25 29  0d 16 a1 15 20 20 46 25  |%,P%-Q%)....  F%|
000280f0  3d a4 66 69 65 6c 64 28  66 24 2c a3 29 0d 16 a2  |=.field(f$,.)...|
00028100  19 20 20 6c 65 6e 67 74  68 25 2b 3d 6c 65 6e 25  |.  length%+=len%|
00028110  28 46 25 29 2b 31 0d 16  a3 0f 20 20 46 24 3d c3  |(F%)+1....  F$=.|
00028120  7e 28 46 25 29 0d 16 a4  1b 20 20 e7 20 a9 28 46  |~(F%)....  . .(F|
00028130  24 29 3d 31 20 8c 20 46  24 3d 22 30 22 2b 46 24  |$)=1 . F$="0"+F$|
00028140  0d 16 a5 0c 20 20 43 24  2b 3d 46 24 0d 16 a6 0d  |....  C$+=F$....|
00028150  20 20 51 25 3d 50 25 2b  31 0d 16 a7 0e fd 20 50  |  Q%=P%+1..... P|
00028160  25 3d a9 28 53 24 29 0d  16 a8 18 6c 65 6e 67 74  |%=.(S$)....lengt|
00028170  68 25 2b 3d a9 28 c3 28  52 41 25 29 29 2b 31 0d  |h%+=.(.(RA%))+1.|
00028180  16 a9 07 3d 43 24 0d 16  aa 05 3a 0d 16 ab 15 dd  |...=C$....:.....|
00028190  20 f2 73 74 72 69 70 5f  62 72 61 63 6b 65 74 73  | .strip_brackets|
000281a0  0d 16 ac 11 c8 95 20 c0  57 24 2c 31 29 3d 22 28  |...... .W$,1)="(|
000281b0  22 0d 16 ad 18 20 20 6c  65 66 74 25 2b 3d 31 3a  |"....  left%+=1:|
000281c0  57 24 3d c1 57 24 2c 32  29 0d 16 ae 05 ce 0d 16  |W$=.W$,2).......|
000281d0  af 0f c8 95 20 c2 57 24  29 3d 22 29 22 0d 16 b0  |.... .W$)=")"...|
000281e0  17 20 20 72 69 67 68 74  25 2b 3d 31 3a 57 24 3d  |.  right%+=1:W$=|
000281f0  c0 57 24 29 0d 16 b1 05  ce 0d 16 b2 05 e1 0d 16  |.W$)............|
00028200  b3 05 3a 0d 16 b4 13 dd  20 f2 61 64 64 5f 62 72  |..:..... .add_br|
00028210  61 63 6b 65 74 73 0d 16  b5 0e c8 95 20 6c 65 66  |ackets...... lef|
00028220  74 25 3e 30 0d 16 b6 18  20 20 45 24 3d 22 28 22  |t%>0....  E$="("|
00028230  2b 45 24 3a 6c 65 66 74  25 2d 3d 31 0d 16 b7 05  |+E$:left%-=1....|
00028240  ce 0d 16 b8 0f c8 95 20  72 69 67 68 74 25 3e 30  |....... right%>0|
00028250  0d 16 b9 17 20 20 45 24  2b 3d 22 29 22 3a 72 69  |....  E$+=")":ri|
00028260  67 68 74 25 2d 3d 31 0d  16 ba 05 ce 0d 16 bb 05  |ght%-=1.........|
00028270  e1 0d 16 bc 05 3a 0d 16  bd 12 dd 20 f2 62 75 69  |.....:..... .bui|
00028280  6c 64 5f 74 69 74 6c 65  0d 16 be 0d ea 20 63 68  |ld_title..... ch|
00028290  61 6e 67 65 25 0d 16 bf  23 54 69 74 46 64 24 3d  |ange%...#TitFd$=|
000282a0  c0 54 69 74 46 64 24 29  3a 54 69 74 54 67 24 3d  |.TitFd$):TitTg$=|
000282b0  c0 54 69 74 54 67 24 29  0d 16 c0 16 e7 20 a7 54  |.TitTg$)..... .T|
000282c0  69 74 46 64 24 2c 22 2c  22 29 3e 30 20 8c 0d 16  |itFd$,",")>0 ...|
000282d0  c1 0e 20 20 c8 8e 20 62  6f 24 20 ca 0d 16 c2 26  |..  .. bo$ ....&|
000282e0  20 20 20 20 c9 20 22 4f  52 22 3a 54 69 74 46 64  |    . "OR":TitFd|
000282f0  24 3d 22 4f 6e 65 20 6f  66 3a 22 2b 54 69 74 46  |$="One of:"+TitF|
00028300  64 24 0d 16 c3 10 20 20  20 20 c9 20 22 41 4e 44  |d$....    . "AND|
00028310  22 3a 0d 16 c4 10 20 20  20 20 c8 8e 20 6f 70 24  |":....    .. op$|
00028320  20 ca 0d 16 c5 3b 20 20  20 20 20 20 c9 20 22 3c  | ....;      . "<|
00028330  3e 22 3a 54 69 74 46 64  24 3d 22 4e 6f 6e 65 20  |>":TitFd$="None |
00028340  6f 66 3a 22 2b 54 69 74  46 64 24 3a 6f 70 24 3d  |of:"+TitFd$:op$=|
00028350  22 3d 22 3a 63 68 61 6e  67 65 25 3d b9 0d 16 c6  |"=":change%=....|
00028360  3b 20 20 20 20 20 20 c9  20 22 7d 7b 22 3a 54 69  |;      . "}{":Ti|
00028370  74 46 64 24 3d 22 4e 6f  6e 65 20 6f 66 3a 22 2b  |tFd$="None of:"+|
00028380  54 69 74 46 64 24 3a 6f  70 24 3d 22 7b 22 3a 63  |TitFd$:op$="{":c|
00028390  68 61 6e 67 65 25 3d b9  0d 16 c7 23 20 20 20 20  |hange%=....#    |
000283a0  20 20 7f 3a 54 69 74 46  64 24 3d 22 41 6c 6c 20  |  .:TitFd$="All |
000283b0  6f 66 3a 22 2b 54 69 74  46 64 24 0d 16 c8 09 20  |of:"+TitFd$.... |
000283c0  20 20 20 cb 0d 16 c9 07  20 20 cb 0d 16 ca 05 cd  |   .....  ......|
000283d0  0d 16 cb 16 e7 20 a7 54  69 74 54 67 24 2c 22 2c  |..... .TitTg$,",|
000283e0  22 29 3e 30 20 8c 0d 16  cc 0e 20 20 c8 8e 20 62  |")>0 .....  .. b|
000283f0  6f 24 20 ca 0d 16 cd 26  20 20 20 20 c9 20 22 4f  |o$ ....&    . "O|
00028400  52 22 3a 54 69 74 54 67  24 3d 22 4f 6e 65 20 6f  |R":TitTg$="One o|
00028410  66 3a 22 2b 54 69 74 54  67 24 0d 16 ce 10 20 20  |f:"+TitTg$....  |
00028420  20 20 c9 20 22 41 4e 44  22 3a 0d 16 cf 10 20 20  |  . "AND":....  |
00028430  20 20 c8 8e 20 6f 70 24  20 ca 0d 16 d0 31 20 20  |  .. op$ ....1  |
00028440  20 20 20 20 c9 20 22 3c  3e 22 3a 54 69 74 54 67  |    . "<>":TitTg|
00028450  24 3d 22 4e 6f 6e 65 20  6f 66 3a 22 2b 54 69 74  |$="None of:"+Tit|
00028460  54 67 24 3a 6f 70 24 3d  22 3d 22 0d 16 d1 31 20  |Tg$:op$="="...1 |
00028470  20 20 20 20 20 c9 20 22  7d 7b 22 3a 54 69 74 54  |     . "}{":TitT|
00028480  67 24 3d 22 4e 6f 6e 65  20 6f 66 3a 22 2b 54 69  |g$="None of:"+Ti|
00028490  74 54 67 24 3a 6f 70 24  3d 22 7b 22 0d 16 d2 49  |tTg$:op$="{"...I|
000284a0  20 20 20 20 20 20 7f 3a  e7 20 63 68 61 6e 67 65  |      .:. change|
000284b0  25 20 8c 20 54 69 74 54  67 24 3d 22 41 6e 79 20  |% . TitTg$="Any |
000284c0  6f 66 3a 22 2b 54 69 74  54 67 24 20 8b 20 54 69  |of:"+TitTg$ . Ti|
000284d0  74 54 67 24 3d 22 41 6c  6c 20 6f 66 3a 22 2b 54  |tTg$="All of:"+T|
000284e0  69 74 54 67 24 0d 16 d3  09 20 20 20 20 cb 0d 16  |itTg$....    ...|
000284f0  d4 07 20 20 cb 0d 16 d5  05 cd 0d 16 d6 0c c8 8e  |..  ............|
00028500  20 6f 70 24 20 ca 0d 16  d7 1c 20 20 c9 20 22 7b  | op$ .....  . "{|
00028510  22 3a 6f 70 24 3d 22 20  63 6f 6e 74 61 69 6e 73  |":op$=" contains|
00028520  20 22 0d 16 d8 25 20 20  c9 20 22 7d 7b 22 3a 6f  | "...%  . "}{":o|
00028530  70 24 3d 22 20 64 6f 65  73 20 6e 6f 74 20 63 6f  |p$=" does not co|
00028540  6e 74 61 69 6e 20 22 0d  16 d9 05 cb 0d 16 da 1d  |ntain ".........|
00028550  54 69 74 6c 65 24 2b 3d  54 69 74 46 64 24 2b 6f  |Title$+=TitFd$+o|
00028560  70 24 2b 54 69 74 54 67  24 0d 16 db 05 e1 0d 16  |p$+TitTg$.......|
00028570  dc 05 3a 0d 16 dd 30 dd  20 a4 65 78 70 61 6e 64  |..:...0. .expand|
00028580  28 73 74 72 69 6e 67 24  2c 74 61 62 6c 65 24 2c  |(string$,table$,|
00028590  f8 20 45 78 70 4c 65 6e  25 2c f8 20 73 75 62 73  |. ExpLen%,. subs|
000285a0  74 24 29 0d 16 de 55 ea  20 70 24 2c 73 24 2c 73  |t$)...U. p$,s$,s|
000285b0  74 61 72 74 25 2c 46 25  2c 49 25 2c 54 25 2c 69  |tart%,F%,I%,T%,i|
000285c0  6e 64 25 2c 72 6f 77 25  2c 52 65 63 25 2c 52 6f  |nd%,row%,Rec%,Ro|
000285d0  77 73 25 2c 54 61 62 46  69 65 6c 64 73 25 2c 66  |ws%,TabFields%,f|
000285e0  69 65 6c 64 25 2c 73 66  69 65 6c 64 25 2c 70 6f  |ield%,sfield%,po|
000285f0  73 25 2c 73 70 6f 73 25  0d 16 df 12 73 75 62 73  |s%,spos%....subs|
00028600  74 24 3d 73 74 72 69 6e  67 24 0d 16 e0 39 e7 20  |t$=string$...9. |
00028610  74 61 62 6c 65 24 3d 22  22 20 8c 20 45 78 70 4c  |table$="" . ExpL|
00028620  65 6e 25 3d 30 3a 3d 73  74 72 69 6e 67 24 3a f4  |en%=0:=string$:.|
00028630  20 23 23 23 20 4e 6f 74  20 6c 69 6e 6b 65 64 20  | ### Not linked |
00028640  23 23 23 0d 16 e1 26 66  69 65 6c 64 25 3d bb 28  |###...&field%=.(|
00028650  c2 74 61 62 6c 65 24 29  29 3a 74 61 62 6c 65 24  |.table$)):table$|
00028660  3d c0 74 61 62 6c 65 24  29 0d 16 e2 55 e7 20 97  |=.table$)...U. .|
00028670  28 74 61 62 6c 65 24 29  3c 35 38 20 80 20 97 28  |(table$)<58 . .(|
00028680  74 61 62 6c 65 24 29 3c  3e 2d 31 20 8c 20 73 66  |table$)<>-1 . sf|
00028690  69 65 6c 64 25 3d bb 28  74 61 62 6c 65 24 29 3a  |ield%=.(table$):|
000286a0  74 61 62 6c 65 24 3d c1  74 61 62 6c 65 24 2c 32  |table$=.table$,2|
000286b0  29 20 8b 20 73 66 69 65  6c 64 25 3d 2d 31 0d 16  |) . sfield%=-1..|
000286c0  e3 1c 54 25 3d a4 74 61  62 6c 65 5f 6e 75 6d 62  |..T%=.table_numb|
000286d0  65 72 28 74 61 62 6c 65  24 29 0d 16 e4 39 e7 20  |er(table$)...9. |
000286e0  54 25 3c 30 20 8c 20 45  78 70 4c 65 6e 25 3d 30  |T%<0 . ExpLen%=0|
000286f0  3a 3d 73 74 72 69 6e 67  24 3a f4 20 23 23 23 20  |:=string$:. ### |
00028700  54 61 62 6c 65 20 6e 6f  74 20 66 6f 75 6e 64 20  |Table not found |
00028710  23 23 23 0d 16 e5 14 70  24 3d 70 72 69 6e 74 72  |###....p$=printr|
00028720  65 6c 24 28 54 25 29 0d  16 e6 3b 54 24 3d a4 74  |el$(T%)...;T$=.t|
00028730  61 62 6c 65 5f 69 6e 66  6f 28 54 25 2c 52 6f 77  |able_info(T%,Row|
00028740  73 25 2c 54 61 62 46 69  65 6c 64 73 25 2c 52 65  |s%,TabFields%,Re|
00028750  63 25 2c 74 61 62 66 69  65 6c 64 6c 65 6e 25 28  |c%,tabfieldlen%(|
00028760  29 29 0d 16 e7 2c 70 6f  73 25 3d a4 74 61 62 6c  |))...,pos%=.tabl|
00028770  65 5f 66 69 65 6c 64 28  66 69 65 6c 64 25 2c 74  |e_field(field%,t|
00028780  61 62 66 69 65 6c 64 6c  65 6e 25 28 29 29 0d 16  |abfieldlen%())..|
00028790  e8 3d e7 20 73 66 69 65  6c 64 25 3e 3d 30 20 8c  |.=. sfield%>=0 .|
000287a0  20 73 70 6f 73 25 3d a4  74 61 62 6c 65 5f 66 69  | spos%=.table_fi|
000287b0  65 6c 64 28 73 66 69 65  6c 64 25 2c 74 61 62 66  |eld(sfield%,tabf|
000287c0  69 65 6c 64 6c 65 6e 25  28 29 29 0d 16 e9 0e e7  |ieldlen%()).....|
000287d0  20 70 24 3c 3e 22 22 20  8c 0d 16 ea 0f 20 20 45  | p$<>"" .....  E|
000287e0  78 70 4c 65 6e 25 3d 30  0d 16 eb 14 20 20 e3 20  |xpLen%=0....  . |
000287f0  49 25 3d 31 20 b8 20 a9  28 70 24 29 0d 16 ec 17  |I%=1 . .(p$)....|
00028800  20 20 20 20 46 25 3d bb  28 c1 70 24 2c 49 25 2c  |    F%=.(.p$,I%,|
00028810  31 29 29 0d 16 ed 23 20  20 20 20 45 78 70 4c 65  |1))...#    ExpLe|
00028820  6e 25 2b 3d 74 61 62 66  69 65 6c 64 6c 65 6e 25  |n%+=tabfieldlen%|
00028830  28 46 25 29 2b 32 0d 16  ee 0a 20 20 ed 20 49 25  |(F%)+2....  . I%|
00028840  0d 16 ef 10 20 20 45 78  70 4c 65 6e 25 2d 3d 32  |....  ExpLen%-=2|
00028850  0d 16 f0 1f 20 20 cc 20  45 78 70 4c 65 6e 25 3d  |....  . ExpLen%=|
00028860  74 61 62 66 69 65 6c 64  6c 65 6e 25 28 31 29 0d  |tabfieldlen%(1).|
00028870  16 f1 05 cd 0d 16 f2 34  73 74 61 72 74 25 3d 21  |.......4start%=!|
00028880  74 61 62 61 6e 63 68 6f  72 25 28 54 25 29 2b 31  |tabanchor%(T%)+1|
00028890  36 30 2d 52 65 63 25 3a  69 6e 64 25 3d 73 74 61  |60-Rec%:ind%=sta|
000288a0  72 74 25 2b 70 6f 73 25  0d 16 f3 05 f5 0d 16 f4  |rt%+pos%........|
000288b0  18 20 20 72 6f 77 25 2b  3d 31 3a 69 6e 64 25 2b  |.  row%+=1:ind%+|
000288c0  3d 52 65 63 25 0d 16 f5  20 fd 20 72 6f 77 25 3e  |=Rec%... . row%>|
000288d0  52 6f 77 73 25 20 84 20  24 69 6e 64 25 3d 73 74  |Rows% . $ind%=st|
000288e0  72 69 6e 67 24 0d 16 f6  42 e7 20 72 6f 77 25 3e  |ring$...B. row%>|
000288f0  52 6f 77 73 25 20 8c 20  73 75 62 73 74 24 3d 22  |Rows% . subst$="|
00028900  22 3a 3d 73 74 72 69 6e  67 24 3a f4 20 23 23 20  |":=string$:. ## |
00028910  53 74 72 69 6e 67 20 6e  6f 74 20 69 6e 20 74 61  |String not in ta|
00028920  62 6c 65 20 23 23 23 0d  16 f7 3d 69 6e 64 25 3d  |ble ###...=ind%=|
00028930  73 74 61 72 74 25 2b 72  6f 77 25 2a 52 65 63 25  |start%+row%*Rec%|
00028940  3a e7 20 73 66 69 65 6c  64 25 3e 3d 30 20 8c 20  |:. sfield%>=0 . |
00028950  73 75 62 73 74 24 3d 24  28 69 6e 64 25 2b 73 70  |subst$=$(ind%+sp|
00028960  6f 73 25 29 0d 16 f8 0e  e7 20 70 24 3c 3e 22 22  |os%)..... p$<>""|
00028970  20 8c 0d 16 f9 14 20 20  e3 20 49 25 3d 31 20 b8  | .....  . I%=1 .|
00028980  20 a9 28 70 24 29 0d 16  fa 17 20 20 20 20 46 25  | .(p$)....    F%|
00028990  3d bb 28 c1 70 24 2c 49  25 2c 31 29 29 0d 16 fb  |=.(.p$,I%,1))...|
000289a0  2c 20 20 20 20 70 6f 73  25 3d a4 74 61 62 6c 65  |,    pos%=.table|
000289b0  5f 66 69 65 6c 64 28 46  25 2c 74 61 62 66 69 65  |_field(F%,tabfie|
000289c0  6c 64 6c 65 6e 25 28 29  29 0d 16 fc 34 20 20 20  |ldlen%())...4   |
000289d0  20 73 24 2b 3d a4 70 61  64 28 24 28 69 6e 64 25  | s$+=.pad($(ind%|
000289e0  2b 70 6f 73 25 29 2c 74  61 62 66 69 65 6c 64 6c  |+pos%),tabfieldl|
000289f0  65 6e 25 28 46 25 29 29  2b 22 20 20 22 0d 16 fd  |en%(F%))+"  "...|
00028a00  0a 20 20 ed 20 49 25 0d  16 fe 0f 20 20 73 24 3d  |.  . I%....  s$=|
00028a10  c0 c0 73 24 29 29 0d 16  ff 43 20 20 cc 20 69 6e  |..s$))...C  . in|
00028a20  64 25 2b 3d 74 61 62 66  69 65 6c 64 6c 65 6e 25  |d%+=tabfieldlen%|
00028a30  28 30 29 2b 31 3a 73 24  3d 24 69 6e 64 25 3a f4  |(0)+1:s$=$ind%:.|
00028a40  20 23 23 23 20 52 65 74  75 72 6e 20 32 6e 64 20  | ### Return 2nd |
00028a50  66 69 65 6c 64 20 23 23  23 0d 17 00 05 cd 0d 17  |field ###.......|
00028a60  01 07 3d 73 24 0d 17 02  05 3a 0d 17 03 0c dd 20  |..=s$....:..... |
00028a70  a4 6e 28 46 25 29 0d 17  04 56 ea 20 54 25 2c 72  |.n(F%)...V. T%,r|
00028a80  6f 77 25 2c 69 6e 64 25  2c 73 74 61 72 74 25 2c  |ow%,ind%,start%,|
00028a90  52 6f 77 73 25 2c 52 65  63 25 2c 54 61 62 46 69  |Rows%,Rec%,TabFi|
00028aa0  65 6c 64 73 25 2c 70 6f  73 25 2c 76 61 6c 70 6f  |elds%,pos%,valpo|
00028ab0  73 25 2c 4e 25 2c 66 69  65 6c 64 25 2c 6e 61 6d  |s%,N%,field%,nam|
00028ac0  65 24 2c 74 61 62 6c 65  24 2c 53 24 0d 17 05 16  |e$,table$,S$....|
00028ad0  e7 20 6c 69 6e 6b 24 28  46 25 29 3d 22 22 20 8c  |. link$(F%)="" .|
00028ae0  3d 30 0d 17 06 0f 53 24  3d 24 52 66 25 28 46 25  |=0....S$=$Rf%(F%|
00028af0  29 0d 17 07 13 6e 61 6d  65 24 3d 6c 69 6e 6b 24  |)....name$=link$|
00028b00  28 46 25 29 0d 17 08 24  66 69 65 6c 64 25 3d bb  |(F%)...$field%=.|
00028b10  28 c2 6e 61 6d 65 24 29  29 3a 74 61 62 6c 65 24  |(.name$)):table$|
00028b20  3d c0 6e 61 6d 65 24 29  0d 17 09 36 e7 20 97 28  |=.name$)...6. .(|
00028b30  74 61 62 6c 65 24 29 3c  35 38 20 80 20 97 28 74  |table$)<58 . .(t|
00028b40  61 62 6c 65 24 29 3c 3e  2d 31 20 8c 20 74 61 62  |able$)<>-1 . tab|
00028b50  6c 65 24 3d c1 74 61 62  6c 65 24 2c 32 29 0d 17  |le$=.table$,2)..|
00028b60  0a 2f 74 61 62 6c 65 25  3d a4 74 61 62 6c 65 5f  |./table%=.table_|
00028b70  6e 75 6d 62 65 72 28 74  61 62 6c 65 24 29 3a e7  |number(table$):.|
00028b80  20 74 61 62 6c 65 25 3c  30 20 8c 3d 30 0d 17 0b  | table%<0 .=0...|
00028b90  3f 54 24 3d a4 74 61 62  6c 65 5f 69 6e 66 6f 28  |?T$=.table_info(|
00028ba0  74 61 62 6c 65 25 2c 52  6f 77 73 25 2c 54 61 62  |table%,Rows%,Tab|
00028bb0  46 69 65 6c 64 73 25 2c  52 65 63 25 2c 74 61 62  |Fields%,Rec%,tab|
00028bc0  66 69 65 6c 64 6c 65 6e  25 28 29 29 0d 17 0c 2e  |fieldlen%())....|
00028bd0  e7 20 54 61 62 46 69 65  6c 64 73 25 3d 66 69 65  |. TabFields%=fie|
00028be0  6c 64 25 20 8c 20 f2 73  6f 66 74 65 72 72 6f 72  |ld% . .softerror|
00028bf0  28 22 22 2c 35 34 29 3a  3d 30 0d 17 0d 2c 70 6f  |("",54):=0...,po|
00028c00  73 25 3d a4 74 61 62 6c  65 5f 66 69 65 6c 64 28  |s%=.table_field(|
00028c10  66 69 65 6c 64 25 2c 74  61 62 66 69 65 6c 64 6c  |field%,tabfieldl|
00028c20  65 6e 25 28 29 29 0d 17  0e 31 76 61 6c 70 6f 73  |en%())...1valpos|
00028c30  25 3d a4 74 61 62 6c 65  5f 66 69 65 6c 64 28 66  |%=.table_field(f|
00028c40  69 65 6c 64 25 2b 31 2c  74 61 62 66 69 65 6c 64  |ield%+1,tabfield|
00028c50  6c 65 6e 25 28 29 29 0d  17 0f 27 73 74 61 72 74  |len%())...'start|
00028c60  25 3d 21 74 61 62 61 6e  63 68 6f 72 25 28 74 61  |%=!tabanchor%(ta|
00028c70  62 6c 65 25 29 2b 31 36  30 2d 52 65 63 25 0d 17  |ble%)+160-Rec%..|
00028c80  10 0d f5 20 72 6f 77 25  2b 3d 31 0d 17 11 20 20  |... row%+=1...  |
00028c90  20 69 6e 64 25 3d 73 74  61 72 74 25 2b 72 6f 77  | ind%=start%+row|
00028ca0  25 2a 52 65 63 25 2b 70  6f 73 25 0d 17 12 1b fd  |%*Rec%+pos%.....|
00028cb0  20 72 6f 77 25 3e 52 6f  77 73 25 20 84 20 53 24  | row%>Rows% . S$|
00028cc0  3d 24 69 6e 64 25 0d 17  13 13 e7 20 72 6f 77 25  |=$ind%..... row%|
00028cd0  3c 3d 52 6f 77 73 25 20  8c 0d 17 14 23 20 20 69  |<=Rows% ....#  i|
00028ce0  6e 64 25 3d 73 74 61 72  74 25 2b 72 6f 77 25 2a  |nd%=start%+row%*|
00028cf0  52 65 63 25 2b 76 61 6c  70 6f 73 25 0d 17 15 11  |Rec%+valpos%....|
00028d00  20 20 4e 25 3d bb 28 24  69 6e 64 25 29 0d 17 16  |  N%=.($ind%)...|
00028d10  0c 20 20 cc 20 4e 25 3d  30 0d 17 17 05 cd 0d 17  |.  . N%=0.......|
00028d20  18 07 3d 4e 25 0d 17 19  05 3a 0d 17 1a 11 dd 20  |..=N%....:..... |
00028d30  a4 70 61 64 28 73 24 2c  4c 25 29 0d 17 1b 0f c8  |.pad(s$,L%).....|
00028d40  95 20 a9 28 73 24 29 3c  4c 25 0d 17 1c 0d 20 20  |. .(s$)<L%....  |
00028d50  73 24 2b 3d 22 20 22 0d  17 1d 05 ce 0d 17 1e 07  |s$+=" ".........|
00028d60  3d 73 24 0d 17 1f 05 3a  0d 17 20 15 dd 20 a4 69  |=s$....:.. .. .i|
00028d70  6e 63 6c 75 64 65 5f 66  69 65 6c 64 73 0d 17 21  |nclude_fields..!|
00028d80  74 ea 20 48 64 6c 65 6e  25 2c 44 61 74 6c 65 6e  |t. Hdlen%,Datlen|
00028d90  25 2c 68 6c 6d 25 2c 64  6c 6d 25 2c 49 25 2c 46  |%,hlm%,dlm%,I%,F|
00028da0  25 2c 66 24 2c 48 65 61  64 24 2c 6c 69 6d 69 74  |%,f$,Head$,limit|
00028db0  25 2c 70 61 64 25 2c 63  6f 6c 25 2c 66 61 69 6c  |%,pad%,col%,fail|
00028dc0  25 2c 6e 24 2c 79 24 2c  53 46 24 2c 6d 65 6d 6f  |%,n$,y$,SF$,memo|
00028dd0  25 2c 62 61 73 65 25 2c  70 6f 73 25 2c 62 6c 6f  |%,base%,pos%,blo|
00028de0  63 6b 73 69 7a 65 25 2c  62 6c 6f 63 6b 69 6e 63  |cksize%,blockinc|
00028df0  25 0d 17 22 27 62 6c 6f  63 6b 73 69 7a 65 25 3d  |%.."'blocksize%=|
00028e00  32 35 36 3a 62 6c 6f 63  6b 69 6e 63 25 3d 62 6c  |256:blockinc%=bl|
00028e10  6f 63 6b 73 69 7a 65 25  0d 17 23 37 f2 65 78 74  |ocksize%..#7.ext|
00028e20  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
00028e30  67 5f 62 6c 6f 63 6b 28  68 65 61 64 61 6e 63 68  |g_block(headanch|
00028e40  6f 72 25 2c 62 6c 6f 63  6b 73 69 7a 65 25 29 0d  |or%,blocksize%).|
00028e50  17 24 21 62 61 73 65 25  3d 21 68 65 61 64 61 6e  |.$!base%=!headan|
00028e60  63 68 6f 72 25 3a 70 6f  73 25 3d 62 61 73 65 25  |chor%:pos%=base%|
00028e70  0d 17 25 40 f2 68 65 61  70 5f 73 74 6f 72 65 28  |..%@.heap_store(|
00028e80  68 65 61 64 61 6e 63 68  6f 72 25 2c 62 6c 6f 63  |headanchor%,bloc|
00028e90  6b 73 69 7a 65 25 2c 62  6c 6f 63 6b 69 6e 63 25  |ksize%,blockinc%|
00028ea0  2c 70 6f 73 25 2c 30 2c  6d 61 72 67 69 6e 24 29  |,pos%,0,margin$)|
00028eb0  0d 17 26 1b e3 20 49 25  3d 31 20 b8 20 a9 28 46  |..&.. I%=1 . .(F|
00028ec0  6f 72 6d 24 29 2d 31 20  88 20 32 0d 17 27 1c 20  |orm$)-1 . 2..'. |
00028ed0  20 46 25 3d a4 66 6e 75  6d 28 c1 46 6f 72 6d 24  | F%=.fnum(.Form$|
00028ee0  2c 49 25 2c 32 29 29 0d  17 28 18 20 20 c8 8e 20  |,I%,2))..(.  .. |
00028ef0  63 68 61 72 74 79 70 65  25 28 46 25 29 20 ca 0d  |chartype%(F%) ..|
00028f00  17 29 30 20 20 20 20 c9  20 33 36 2c 33 39 3a 64  |.)0    . 36,39:d|
00028f10  6c 6d 25 3d 54 65 78 74  4c 69 6e 65 25 3a 6d 65  |lm%=TextLine%:me|
00028f20  6d 6f 25 3d b9 3a f2 73  65 74 5f 76 65 72 74 0d  |mo%=.:.set_vert.|
00028f30  17 2a 19 20 20 20 20 c9  20 34 31 2c 34 32 2c 34  |.*.    . 41,42,4|
00028f40  33 2c 34 34 2c 34 35 3a  0d 17 2b 21 20 20 20 20  |3,44,45:..+!    |
00028f50  44 61 74 6c 65 6e 25 3d  a4 6e 6f 5f 79 65 73 28  |Datlen%=.no_yes(|
00028f60  46 25 2c 6e 24 2c 79 24  29 0d 17 2c 45 20 20 20  |F%,n$,y$)..,E   |
00028f70  20 f4 20 23 23 23 20 47  65 74 20 64 61 74 61 20  | . ### Get data |
00028f80  6c 65 6e 67 74 68 20 66  6f 72 20 73 74 72 69 6e  |length for strin|
00028f90  67 73 20 70 72 69 6e 74  65 64 20 66 6f 72 20 63  |gs printed for c|
00028fa0  68 65 63 6b 20 62 6f 78  65 73 20 23 23 23 0d 17  |heck boxes ###..|
00028fb0  2d 07 20 20 cb 0d 17 2e  1f 20 20 e7 20 a4 73 65  |-.  .....  . .se|
00028fc0  6c 65 63 74 65 64 28 70  72 69 6e 74 57 25 2c 31  |lected(printW%,1|
00028fd0  31 29 20 8c 0d 17 2f 2f  20 20 20 20 66 24 3d a4  |1) ...//    f$=.|
00028fe0  65 78 70 61 6e 64 28 22  40 23 2a 22 2c 6c 69 6e  |expand("@#*",lin|
00028ff0  6b 24 28 46 25 29 2c 44  61 74 6c 65 6e 25 2c 53  |k$(F%),Datlen%,S|
00029000  46 24 29 0d 17 30 29 20  20 20 20 e7 20 44 61 74  |F$)..0)    . Dat|
00029010  6c 65 6e 25 3d 30 20 8c  20 44 61 74 6c 65 6e 25  |len%=0 . Datlen%|
00029020  3d 6d 61 78 6c 65 6e 25  28 46 25 29 0d 17 31 09  |=maxlen%(F%)..1.|
00029030  20 20 20 20 cc 0d 17 32  1b 20 20 20 20 44 61 74  |    ...2.    Dat|
00029040  6c 65 6e 25 3d 6d 61 78  6c 65 6e 25 28 46 25 29  |len%=maxlen%(F%)|
00029050  0d 17 33 07 20 20 cd 0d  17 34 23 20 20 e7 20 44  |..3.  ...4#  . D|
00029060  61 74 6c 65 6e 25 3e 64  6c 6d 25 20 8c 20 64 6c  |atlen%>dlm% . dl|
00029070  6d 25 3d 44 61 74 6c 65  6e 25 0d 17 35 50 20 20  |m%=Datlen%..5P  |
00029080  e7 20 a4 73 65 6c 65 63  74 65 64 28 70 72 69 6e  |. .selected(prin|
00029090  74 57 25 2c 32 29 20 8c  20 48 65 61 64 24 3d 24  |tW%,2) . Head$=$|
000290a0  a4 74 65 78 74 28 6d 61  69 6e 57 25 2c 28 64 65  |.text(mainW%,(de|
000290b0  73 63 25 28 46 25 29 29  29 20 8b 20 48 65 61 64  |sc%(F%))) . Head|
000290c0  24 3d 54 61 67 24 28 46  25 29 0d 17 36 15 20 20  |$=Tag$(F%)..6.  |
000290d0  48 64 6c 65 6e 25 3d a9  28 48 65 61 64 24 29 0d  |Hdlen%=.(Head$).|
000290e0  17 37 21 20 20 e7 20 48  64 6c 65 6e 25 3e 68 6c  |.7!  . Hdlen%>hl|
000290f0  6d 25 20 8c 20 68 6c 6d  25 3d 48 64 6c 65 6e 25  |m% . hlm%=Hdlen%|
00029100  0d 17 38 12 20 20 c8 8e  20 66 6f 72 6d 61 74 24  |..8.  .. format$|
00029110  20 ca 0d 17 39 1a 20 20  20 20 c9 20 22 68 6f 72  | ...9.    . "hor|
00029120  69 7a 22 2c 22 74 61 62  6c 65 22 3a 0d 17 3a 2d  |iz","table":..:-|
00029130  20 20 20 20 70 61 64 25  3d 44 61 74 6c 65 6e 25  |    pad%=Datlen%|
00029140  2d 48 64 6c 65 6e 25 3a  e7 20 70 61 64 25 3c 30  |-Hdlen%:. pad%<0|
00029150  20 8c 20 70 61 64 25 3d  30 0d 17 3b 1a 20 20 20  | . pad%=0..;.   |
00029160  20 c8 8e 20 63 68 61 72  74 79 70 65 25 28 46 25  | .. chartype%(F%|
00029170  29 20 ca 0d 17 3c 63 20  20 20 20 20 20 c9 20 33  |) ...<c      . 3|
00029180  2c 36 2c 34 36 2c 34 37  2c 35 34 2c 35 36 2c 35  |,6,46,47,54,56,5|
00029190  37 3a e7 20 a4 73 65 6c  65 63 74 65 64 28 70 72  |7:. .selected(pr|
000291a0  69 6e 74 57 25 2c 31 31  29 20 8c 20 48 65 61 64  |intW%,11) . Head|
000291b0  24 2b 3d c4 70 61 64 25  2c 22 20 22 29 20 8b 20  |$+=.pad%," ") . |
000291c0  48 65 61 64 24 3d c4 70  61 64 25 2c 22 20 22 29  |Head$=.pad%," ")|
000291d0  2b 48 65 61 64 24 0d 17  3d 41 20 20 20 20 20 20  |+Head$..=A      |
000291e0  f4 20 23 23 23 20 52 69  67 68 74 20 6a 75 73 74  |. ### Right just|
000291f0  69 66 79 20 6e 75 6d 62  65 72 73 20 75 6e 6c 65  |ify numbers unle|
00029200  73 73 20 45 78 70 61 6e  64 20 6f 70 74 69 6f 6e  |ss Expand option|
00029210  20 6f 6e 20 23 23 23 0d  17 3e 1d 20 20 20 20 20  | on ###..>.     |
00029220  20 7f 3a 48 65 61 64 24  2b 3d c4 70 61 64 25 2c  | .:Head$+=.pad%,|
00029230  22 20 22 29 0d 17 3f 09  20 20 20 20 cb 0d 17 40  |" ")..?.    ...@|
00029240  4a 20 20 20 20 f2 68 65  61 70 5f 73 74 6f 72 65  |J    .heap_store|
00029250  28 68 65 61 64 61 6e 63  68 6f 72 25 2c 62 6c 6f  |(headanchor%,blo|
00029260  63 6b 73 69 7a 65 25 2c  62 6c 6f 63 6b 69 6e 63  |cksize%,blockinc|
00029270  25 2c 70 6f 73 25 2c 30  2c 48 65 61 64 24 2b 73  |%,pos%,0,Head$+s|
00029280  70 61 63 65 72 24 29 0d  17 41 23 20 20 20 20 54  |pacer$)..A#    T|
00029290  61 62 25 28 28 49 25 2b  31 29 20 81 20 32 29 3d  |ab%((I%+1) . 2)=|
000292a0  70 6f 73 25 2d 62 61 73  65 25 0d 17 42 07 20 20  |pos%-base%..B.  |
000292b0  cb 0d 17 43 08 ed 20 49  25 0d 17 44 10 c8 8e 20  |...C.. I%..D... |
000292c0  66 6f 72 6d 61 74 24 20  ca 0d 17 45 1f 20 20 c9  |format$ ...E.  .|
000292d0  20 22 68 6f 72 69 7a 22  3a 4c 25 3d 70 6f 73 25  | "horiz":L%=pos%|
000292e0  2d 62 61 73 65 25 2b 32  0d 17 46 0f 20 20 c9 20  |-base%+2..F.  . |
000292f0  22 76 65 72 74 22 3a 0d  17 47 0f 20 20 e7 20 6d  |"vert":..G.  . m|
00029300  65 6d 6f 25 20 8c 0d 17  48 16 20 20 20 20 4c 25  |emo% ...H.    L%|
00029310  3d 54 65 78 74 4c 69 6e  65 25 2b 35 0d 17 49 21  |=TextLine%+5..I!|
00029320  20 20 20 20 cc 20 4c 25  3d 4c 6d 61 72 67 69 6e  |    . L%=Lmargin|
00029330  25 2b 68 6c 6d 25 2b 64  6c 6d 25 2b 36 0d 17 4a  |%+hlm%+dlm%+6..J|
00029340  07 20 20 cd 0d 17 4b 12  20 20 54 61 62 25 28 31  |.  ...K.  Tab%(1|
00029350  29 3d 68 6c 6d 25 0d 17  4c 10 20 20 c9 20 22 74  |)=hlm%..L.  . "t|
00029360  61 62 6c 65 22 3a 0d 17  4d 15 20 20 63 6f 6c 25  |able":..M.  col%|
00029370  3d a9 28 63 6f 6c 75 6d  6e 24 29 0d 17 4e 46 20  |=.(column$)..NF |
00029380  20 f2 68 65 61 70 5f 73  74 6f 72 65 28 68 65 61  | .heap_store(hea|
00029390  64 61 6e 63 68 6f 72 25  2c 62 6c 6f 63 6b 73 69  |danchor%,blocksi|
000293a0  7a 65 25 2c 62 6c 6f 63  6b 69 6e 63 25 2c 70 6f  |ze%,blockinc%,po|
000293b0  73 25 2c 30 2c 63 6f 6c  75 6d 6e 24 2b 22 20 22  |s%,0,column$+" "|
000293c0  29 0d 17 4f 1e 20 20 3f  70 6f 73 25 3d 31 30 3a  |)..O.  ?pos%=10:|
000293d0  4c 25 3d 70 6f 73 25 2d  62 61 73 65 25 2b 31 0d  |L%=pos%-base%+1.|
000293e0  17 50 10 20 20 c9 20 22  6c 61 62 65 6c 22 3a 0d  |.P.  . "label":.|
000293f0  17 51 18 20 20 6c 6f 6e  67 65 73 74 66 69 65 6c  |.Q.  longestfiel|
00029400  64 25 3d 64 6c 6d 25 0d  17 52 29 20 20 4c 25 3d  |d%=dlm%..R)  L%=|
00029410  6c 61 62 75 70 25 2a 6c  61 62 77 69 64 74 68 25  |labup%*labwidth%|
00029420  2b 64 6c 6d 25 2b 4c 6d  61 72 67 69 6e 25 2b 31  |+dlm%+Lmargin%+1|
00029430  0d 17 53 05 cb 0d 17 54  31 f2 65 78 74 65 6e 64  |..S....T1.extend|
00029440  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00029450  6c 6f 63 6b 28 6c 69 6e  65 61 6e 63 68 6f 72 25  |lock(lineanchor%|
00029460  2c 4c 25 2b 38 29 0d 17  55 07 3d 4c 25 0d 17 56  |,L%+8)..U.=L%..V|
00029470  05 3a 0d 17 57 1e dd 20  a4 6e 6f 5f 79 65 73 28  |.:..W.. .no_yes(|
00029480  46 25 2c f8 20 6e 6f 24  2c f8 20 79 65 73 24 29  |F%,. no$,. yes$)|
00029490  0d 17 58 0e ea 20 50 25  2c 56 24 2c 4c 25 0d 17  |..X.. P%,V$,L%..|
000294a0  59 1f 56 24 3d 24 a4 76  61 6c 28 6d 61 69 6e 57  |Y.V$=$.val(mainW|
000294b0  25 2c 66 69 65 6c 64 25  28 46 25 29 29 0d 17 5a  |%,field%(F%))..Z|
000294c0  0f 50 25 3d a7 56 24 2c  22 51 22 29 0d 17 5b 0c  |.P%=.V$,"Q")..[.|
000294d0  e7 20 50 25 3e 30 20 8c  0d 17 5c 12 20 20 56 24  |. P%>0 ...\.  V$|
000294e0  3d c1 56 24 2c 50 25 2b  31 29 0d 17 5d 11 20 20  |=.V$,P%+1)..].  |
000294f0  50 25 3d a7 56 24 2c 22  2c 22 29 0d 17 5e 13 20  |P%=.V$,",")..^. |
00029500  20 6e 6f 24 3d c0 56 24  2c 50 25 2d 31 29 0d 17  | no$=.V$,P%-1)..|
00029510  5f 14 20 20 79 65 73 24  3d c1 56 24 2c 50 25 2b  |_.  yes$=.V$,P%+|
00029520  31 29 0d 17 60 18 20 20  cc 20 6e 6f 24 3d 22 4e  |1)..`.  . no$="N|
00029530  22 3a 79 65 73 24 3d 22  59 22 0d 17 61 05 cd 0d  |":yes$="Y"..a...|
00029540  17 62 0d 4c 25 3d a9 28  6e 6f 24 29 0d 17 63 1d  |.b.L%=.(no$)..c.|
00029550  e7 20 a9 28 79 65 73 24  29 3e 4c 25 20 8c 20 4c  |. .(yes$)>L% . L|
00029560  25 3d a9 28 79 65 73 24  29 0d 17 64 07 3d 4c 25  |%=.(yes$)..d.=L%|
00029570  0d 17 65 05 3a 0d 17 66  39 dd 20 f2 68 65 61 70  |..e.:..f9. .heap|
00029580  5f 73 74 6f 72 65 28 61  6e 63 68 6f 72 25 2c f8  |_store(anchor%,.|
00029590  20 73 69 7a 65 25 2c 69  6e 63 25 2c f8 20 70 74  | size%,inc%,. pt|
000295a0  72 25 2c 4c 25 2c 73 74  72 69 6e 67 24 29 0d 17  |r%,L%,string$)..|
000295b0  67 21 e7 20 73 74 72 69  6e 67 24 3c 3e 22 22 20  |g!. string$<>"" |
000295c0  8c 20 4c 25 3d a9 28 73  74 72 69 6e 67 24 29 0d  |. L%=.(string$).|
000295d0  17 68 20 e7 20 70 74 72  25 2d 21 61 6e 63 68 6f  |.h . ptr%-!ancho|
000295e0  72 25 2b 4c 25 2b 31 3e  73 69 7a 65 25 20 8c 0d  |r%+L%+1>size% ..|
000295f0  17 69 11 20 20 73 69 7a  65 25 2b 3d 69 6e 63 25  |.i.  size%+=inc%|
00029600  0d 17 6a 30 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |..j0  .extend_na|
00029610  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
00029620  6b 28 61 6e 63 68 6f 72  25 2c 73 69 7a 65 25 29  |k(anchor%,size%)|
00029630  0d 17 6b 05 cd 0d 17 6c  33 e7 20 73 74 72 69 6e  |..k....l3. strin|
00029640  67 24 3c 3e 22 22 20 8c  20 24 70 74 72 25 3d 73  |g$<>"" . $ptr%=s|
00029650  74 72 69 6e 67 24 3a 70  74 72 25 2b 3d 4c 25 3a  |tring$:ptr%+=L%:|
00029660  3f 70 74 72 25 3d 31 30  0d 17 6d 05 e1 0d 17 6e  |?ptr%=10..m....n|
00029670  05 3a 0d 17 6f 0f dd 20  f2 73 65 74 5f 76 65 72  |.:..o.. .set_ver|
00029680  74 0d 17 70 19 f2 64 65  73 65 6c 65 63 74 28 70  |t..p..deselect(p|
00029690  72 69 6e 74 57 25 2c 32  33 29 0d 17 71 19 f2 64  |rintW%,23)..q..d|
000296a0  65 73 65 6c 65 63 74 28  70 72 69 6e 74 57 25 2c  |eselect(printW%,|
000296b0  32 35 29 0d 17 72 19 f2  64 65 73 65 6c 65 63 74  |25)..r..deselect|
000296c0  28 70 72 69 6e 74 57 25  2c 32 36 29 0d 17 73 17  |(printW%,26)..s.|
000296d0  f2 73 65 6c 65 63 74 28  70 72 69 6e 74 57 25 2c  |.select(printW%,|
000296e0  32 34 29 0d 17 74 12 66  6f 72 6d 61 74 24 3d 22  |24)..t.format$="|
000296f0  76 65 72 74 22 0d 17 75  3f 4c 69 6e 65 73 50 65  |vert"..u?LinesPe|
00029700  72 50 61 67 65 25 3d 28  70 61 67 65 6c 65 6e 67  |rPage%=(pageleng|
00029710  74 68 25 2d 31 30 29 20  81 20 28 6c 69 6e 65 66  |th%-10) . (linef|
00029720  65 65 64 25 2a 28 a9 28  46 6f 72 6d 24 29 20 81  |eed%*(.(Form$) .|
00029730  20 32 29 29 0d 17 76 27  e7 20 4c 69 6e 65 73 50  | 2))..v'. LinesP|
00029740  65 72 50 61 67 65 25 3d  30 20 8c 20 4c 69 6e 65  |erPage%=0 . Line|
00029750  73 50 65 72 50 61 67 65  25 3d 31 0d 17 77 05 e1  |sPerPage%=1..w..|
00029760  0d 17 78 05 3a 0d 17 79  19 dd 20 f2 64 72 61 67  |..x.:..y.. .drag|
00029770  5f 73 65 6c 65 63 74 69  6f 6e 28 66 24 29 0d 17  |_selection(f$)..|
00029780  7a 10 ea 20 46 25 2c 49  25 2c 54 25 2c 46 0d 17  |z.. F%,I%,T%,F..|
00029790  7b 0b 46 3d 8e 28 66 24  29 0d 17 7c 13 70 72 69  |{.F=.(f$)..|.pri|
000297a0  6e 74 6f 72 64 65 72 24  3d be 23 46 0d 17 7d 09  |ntorder$=.#F..}.|
000297b0  54 25 3d 2d 31 0d 17 7e  0c c8 95 20 ac 20 c5 23  |T%=-1..~... . .#|
000297c0  46 0d 17 7f 0b 20 20 54  25 2b 3d 31 0d 17 80 17  |F....  T%+=1....|
000297d0  20 20 70 72 69 6e 74 72  65 6c 24 28 54 25 29 3d  |  printrel$(T%)=|
000297e0  be 23 46 0d 17 81 05 ce  0d 17 82 12 f2 63 6c 6f  |.#F..........clo|
000297f0  73 65 5f 66 69 6c 65 28  46 29 0d 17 83 14 e3 20  |se_file(F)..... |
00029800  46 25 3d 31 20 b8 20 66  69 65 6c 64 73 25 0d 17  |F%=1 . fields%..|
00029810  84 1a 20 20 e7 20 63 68  61 72 74 79 70 65 25 28  |..  . chartype%(|
00029820  46 25 29 3e 34 30 20 8c  0d 17 85 2e 20 20 20 20  |F%)>40 .....    |
00029830  63 6f 6c 25 3d a4 67 65  74 5f 69 63 6f 6e 5f 63  |col%=.get_icon_c|
00029840  6f 6c 73 28 6d 61 69 6e  57 25 2c 66 69 65 6c 64  |ols(mainW%,field|
00029850  25 28 46 25 29 29 0d 17  86 45 20 20 20 20 e7 20  |%(F%))...E    . |
00029860  28 63 6f 6c 25 20 80 20  25 31 31 31 31 29 3c 32  |(col% . %1111)<2|
00029870  20 8c 20 63 6f 6c 25 3d  28 28 63 6f 6c 25 3e 3e  | . col%=((col%>>|
00029880  34 29 20 84 20 28 63 6f  6c 25 3c 3c 34 29 29 20  |4) . (col%<<4)) |
00029890  80 20 25 31 31 31 31 31  31 31 31 0d 17 87 2e 20  |. %11111111.... |
000298a0  20 20 20 f2 73 65 74 5f  69 63 6f 6e 5f 63 6f 6c  |   .set_icon_col|
000298b0  73 28 6d 61 69 6e 57 25  2c 66 69 65 6c 64 25 28  |s(mainW%,field%(|
000298c0  46 25 29 2c 63 6f 6c 25  29 0d 17 88 26 20 20 20  |F%),col%)...&   |
000298d0  20 cc 20 f2 64 65 73 65  6c 65 63 74 28 6d 61 69  | . .deselect(mai|
000298e0  6e 57 25 2c 66 69 65 6c  64 25 28 46 25 29 29 0d  |nW%,field%(F%)).|
000298f0  17 89 07 20 20 cd 0d 17  8a 08 ed 20 46 25 0d 17  |...  ...... F%..|
00029900  8b 21 e3 20 49 25 3d 31  20 b8 20 a9 28 70 72 69  |.!. I%=1 . .(pri|
00029910  6e 74 6f 72 64 65 72 24  29 2d 31 20 88 20 32 0d  |ntorder$)-1 . 2.|
00029920  17 8c 22 20 20 46 25 3d  a4 66 6e 75 6d 28 c1 70  |.."  F%=.fnum(.p|
00029930  72 69 6e 74 6f 72 64 65  72 24 2c 49 25 2c 32 29  |rintorder$,I%,2)|
00029940  29 0d 17 8d 1a 20 20 e7  20 63 68 61 72 74 79 70  |)....  . chartyp|
00029950  65 25 28 46 25 29 3e 34  30 20 8c 0d 17 8e 2e 20  |e%(F%)>40 ..... |
00029960  20 20 20 63 6f 6c 25 3d  a4 67 65 74 5f 69 63 6f  |   col%=.get_ico|
00029970  6e 5f 63 6f 6c 73 28 6d  61 69 6e 57 25 2c 66 69  |n_cols(mainW%,fi|
00029980  65 6c 64 25 28 46 25 29  29 0d 17 8f 30 20 20 20  |eld%(F%))...0   |
00029990  20 63 6f 6c 25 3d 28 28  63 6f 6c 25 3e 3e 34 29  | col%=((col%>>4)|
000299a0  20 84 20 28 63 6f 6c 25  3c 3c 34 29 29 20 80 20  | . (col%<<4)) . |
000299b0  25 31 31 31 31 31 31 31  31 0d 17 90 2e 20 20 20  |%11111111....   |
000299c0  20 f2 73 65 74 5f 69 63  6f 6e 5f 63 6f 6c 73 28  | .set_icon_cols(|
000299d0  6d 61 69 6e 57 25 2c 66  69 65 6c 64 25 28 46 25  |mainW%,field%(F%|
000299e0  29 2c 63 6f 6c 25 29 0d  17 91 24 20 20 20 20 cc  |),col%)...$    .|
000299f0  20 f2 73 65 6c 65 63 74  28 6d 61 69 6e 57 25 2c  | .select(mainW%,|
00029a00  66 69 65 6c 64 25 28 46  25 29 29 0d 17 92 07 20  |field%(F%)).... |
00029a10  20 cd 0d 17 93 08 ed 20  49 25 0d 17 94 16 f2 6c  | ...... I%.....l|
00029a20  69 74 28 6d 65 6e 75 25  28 36 29 2c 37 2c b9 29  |it(menu%(6),7,.)|
00029a30  0d 17 95 16 f2 6c 69 74  28 6d 65 6e 75 25 28 36  |.....lit(menu%(6|
00029a40  29 2c 38 2c b9 29 0d 17  96 05 e1 0d 17 97 05 3a  |),8,.).........:|
00029a50  0d 17 98 11 dd 20 f2 73  65 6c 65 63 74 5f 61 6c  |..... .select_al|
00029a60  6c 0d 17 99 0e ea 20 46  25 2c 54 25 2c 46 24 0d  |l..... F%,T%,F$.|
00029a70  17 9a 12 70 72 69 6e 74  6f 72 64 65 72 24 3d 22  |...printorder$="|
00029a80  22 0d 17 9b 14 e3 20 46  25 3d 31 20 b8 20 66 69  |"..... F%=1 . fi|
00029a90  65 6c 64 73 25 0d 17 9c  18 20 20 c8 8e 20 63 68  |elds%....  .. ch|
00029aa0  61 72 74 79 70 65 25 28  46 25 29 20 ca 0d 17 9d  |artype%(F%) ....|
00029ab0  19 20 20 20 20 c9 20 34  31 2c 34 32 2c 34 33 2c  |.    . 41,42,43,|
00029ac0  34 34 2c 34 35 3a 0d 17  9e 2e 20 20 20 20 63 6f  |44,45:....    co|
00029ad0  6c 25 3d a4 67 65 74 5f  69 63 6f 6e 5f 63 6f 6c  |l%=.get_icon_col|
00029ae0  73 28 6d 61 69 6e 57 25  2c 66 69 65 6c 64 25 28  |s(mainW%,field%(|
00029af0  46 25 29 29 0d 17 9f 46  20 20 20 20 e7 20 28 63  |F%))...F    . (c|
00029b00  6f 6c 25 20 80 20 25 31  31 31 31 29 3e 3d 32 20  |ol% . %1111)>=2 |
00029b10  8c 20 63 6f 6c 25 3d 28  28 63 6f 6c 25 3e 3e 34  |. col%=((col%>>4|
00029b20  29 20 84 20 28 63 6f 6c  25 3c 3c 34 29 29 20 80  |) . (col%<<4)) .|
00029b30  20 25 31 31 31 31 31 31  31 31 0d 17 a0 2e 20 20  | %11111111....  |
00029b40  20 20 f2 73 65 74 5f 69  63 6f 6e 5f 63 6f 6c 73  |  .set_icon_cols|
00029b50  28 6d 61 69 6e 57 25 2c  66 69 65 6c 64 25 28 46  |(mainW%,field%(F|
00029b60  25 29 2c 63 6f 6c 25 29  0d 17 a1 27 20 20 20 20  |%),col%)...'    |
00029b70  46 24 3d c3 7e 28 46 25  29 3a e7 20 a9 28 46 24  |F$=.~(F%):. .(F$|
00029b80  29 3d 31 20 8c 20 46 24  3d 22 30 22 2b 46 24 0d  |)=1 . F$="0"+F$.|
00029b90  17 a2 17 20 20 20 20 70  72 69 6e 74 6f 72 64 65  |...    printorde|
00029ba0  72 24 2b 3d 46 24 0d 17  a3 18 20 20 20 20 c9 20  |r$+=F$....    . |
00029bb0  30 2c 31 2c 32 2c 34 2c  35 2c 37 2c 38 3a 0d 17  |0,1,2,4,5,7,8:..|
00029bc0  a4 16 20 20 20 20 e7 20  6c 65 6e 25 28 46 25 29  |..    . len%(F%)|
00029bd0  3e 30 20 8c 0d 17 a5 29  20 20 20 20 20 20 46 24  |>0 ....)      F$|
00029be0  3d c3 7e 28 46 25 29 3a  e7 20 a9 28 46 24 29 3d  |=.~(F%):. .(F$)=|
00029bf0  31 20 8c 20 46 24 3d 22  30 22 2b 46 24 0d 17 a6  |1 . F$="0"+F$...|
00029c00  19 20 20 20 20 20 20 70  72 69 6e 74 6f 72 64 65  |.      printorde|
00029c10  72 24 2b 3d 46 24 0d 17  a7 24 20 20 20 20 20 20  |r$+=F$...$      |
00029c20  f2 73 65 6c 65 63 74 28  6d 61 69 6e 57 25 2c 66  |.select(mainW%,f|
00029c30  69 65 6c 64 25 28 46 25  29 29 0d 17 a8 09 20 20  |ield%(F%))....  |
00029c40  20 20 cd 0d 17 a9 28 20  20 20 20 c9 20 33 36 2c  |  ....(    . 36,|
00029c50  33 39 2c 34 38 2c 34 39  2c 35 30 2c 35 31 2c 35  |39,48,49,50,51,5|
00029c60  32 2c 35 33 2c 35 35 2c  35 38 3a 0d 17 aa 27 20  |2,53,55,58:...' |
00029c70  20 20 20 46 24 3d c3 7e  28 46 25 29 3a e7 20 a9  |   F$=.~(F%):. .|
00029c80  28 46 24 29 3d 31 20 8c  20 46 24 3d 22 30 22 2b  |(F$)=1 . F$="0"+|
00029c90  46 24 0d 17 ab 17 20 20  20 20 70 72 69 6e 74 6f  |F$....    printo|
00029ca0  72 64 65 72 24 2b 3d 46  24 0d 17 ac 22 20 20 20  |rder$+=F$..."   |
00029cb0  20 f2 73 65 6c 65 63 74  28 6d 61 69 6e 57 25 2c  | .select(mainW%,|
00029cc0  66 69 65 6c 64 25 28 46  25 29 29 0d 17 ad 1d 20  |field%(F%)).... |
00029cd0  20 20 20 c9 20 33 2c 36  2c 34 36 2c 34 37 2c 35  |   . 3,6,46,47,5|
00029ce0  34 2c 35 36 2c 35 37 3a  0d 17 ae 27 20 20 20 20  |4,56,57:...'    |
00029cf0  46 24 3d c3 7e 28 46 25  29 3a e7 20 a9 28 46 24  |F$=.~(F%):. .(F$|
00029d00  29 3d 31 20 8c 20 46 24  3d 22 30 22 2b 46 24 0d  |)=1 . F$="0"+F$.|
00029d10  17 af 17 20 20 20 20 70  72 69 6e 74 6f 72 64 65  |...    printorde|
00029d20  72 24 2b 3d 46 24 0d 17  b0 22 20 20 20 20 f2 73  |r$+=F$..."    .s|
00029d30  65 6c 65 63 74 28 6d 61  69 6e 57 25 2c 66 69 65  |elect(mainW%,fie|
00029d40  6c 64 25 28 46 25 29 29  0d 17 b1 22 20 20 20 20  |ld%(F%))..."    |
00029d50  f2 65 6e 61 62 6c 65 5f  72 6f 77 28 63 61 6c 63  |.enable_row(calc|
00029d60  72 6f 77 25 3f 46 25 2c  b9 29 0d 17 b2 07 20 20  |row%?F%,.)....  |
00029d70  cb 0d 17 b3 08 ed 20 46  25 0d 17 b4 16 f2 6c 69  |...... F%.....li|
00029d80  74 28 6d 65 6e 75 25 28  36 29 2c 37 2c b9 29 0d  |t(menu%(6),7,.).|
00029d90  17 b5 16 f2 6c 69 74 28  6d 65 6e 75 25 28 36 29  |....lit(menu%(6)|
00029da0  2c 38 2c b9 29 0d 17 b6  05 e1 0d 17 b7 05 3a 0d  |,8,.).........:.|
00029db0  17 b8 16 dd 20 f2 63 6c  65 61 72 5f 73 65 6c 65  |.... .clear_sele|
00029dc0  63 74 69 6f 6e 0d 17 b9  0b ea 20 46 25 2c 54 25  |ction..... F%,T%|
00029dd0  0d 17 ba 14 e3 20 46 25  3d 31 20 b8 20 66 69 65  |..... F%=1 . fie|
00029de0  6c 64 73 25 0d 17 bb 18  20 20 c8 8e 20 63 68 61  |lds%....  .. cha|
00029df0  72 74 79 70 65 25 28 46  25 29 20 ca 0d 17 bc 19  |rtype%(F%) .....|
00029e00  20 20 20 20 c9 20 34 31  2c 34 32 2c 34 33 2c 34  |    . 41,42,43,4|
00029e10  34 2c 34 35 3a 0d 17 bd  2e 20 20 20 20 63 6f 6c  |4,45:....    col|
00029e20  25 3d a4 67 65 74 5f 69  63 6f 6e 5f 63 6f 6c 73  |%=.get_icon_cols|
00029e30  28 6d 61 69 6e 57 25 2c  66 69 65 6c 64 25 28 46  |(mainW%,field%(F|
00029e40  25 29 29 0d 17 be 45 20  20 20 20 e7 20 28 63 6f  |%))...E    . (co|
00029e50  6c 25 20 80 20 25 31 31  31 31 29 3c 32 20 8c 20  |l% . %1111)<2 . |
00029e60  63 6f 6c 25 3d 28 28 63  6f 6c 25 3e 3e 34 29 20  |col%=((col%>>4) |
00029e70  84 20 28 63 6f 6c 25 3c  3c 34 29 29 20 80 20 25  |. (col%<<4)) . %|
00029e80  31 31 31 31 31 31 31 31  0d 17 bf 2e 20 20 20 20  |11111111....    |
00029e90  f2 73 65 74 5f 69 63 6f  6e 5f 63 6f 6c 73 28 6d  |.set_icon_cols(m|
00029ea0  61 69 6e 57 25 2c 66 69  65 6c 64 25 28 46 25 29  |ainW%,field%(F%)|
00029eb0  2c 63 6f 6c 25 29 0d 17  c0 56 20 20 20 20 c9 20  |,col%)...V    . |
00029ec0  33 2c 36 2c 38 2c 34 36  2c 34 37 2c 35 34 2c 35  |3,6,8,46,47,54,5|
00029ed0  36 2c 35 37 3a f2 65 6e  61 62 6c 65 5f 72 6f 77  |6,57:.enable_row|
00029ee0  28 63 61 6c 63 72 6f 77  25 3f 46 25 2c a3 29 3a  |(calcrow%?F%,.):|
00029ef0  f2 64 65 73 65 6c 65 63  74 28 6d 61 69 6e 57 25  |.deselect(mainW%|
00029f00  2c 66 69 65 6c 64 25 28  46 25 29 29 0d 17 c1 26  |,field%(F%))...&|
00029f10  20 20 20 20 7f 3a f2 64  65 73 65 6c 65 63 74 28  |    .:.deselect(|
00029f20  6d 61 69 6e 57 25 2c 66  69 65 6c 64 25 28 46 25  |mainW%,field%(F%|
00029f30  29 29 0d 17 c2 07 20 20  cb 0d 17 c3 08 ed 20 46  |))....  ...... F|
00029f40  25 0d 17 c4 12 70 72 69  6e 74 6f 72 64 65 72 24  |%....printorder$|
00029f50  3d 22 22 0d 17 c5 17 e3  20 54 25 3d 30 20 b8 20  |=""..... T%=0 . |
00029f60  4c 61 73 74 54 61 62 6c  65 25 0d 17 c6 16 20 20  |LastTable%....  |
00029f70  70 72 69 6e 74 72 65 6c  24 28 54 25 29 3d 22 22  |printrel$(T%)=""|
00029f80  0d 17 c7 08 ed 20 54 25  0d 17 c8 16 f2 6c 69 74  |..... T%.....lit|
00029f90  28 6d 65 6e 75 25 28 36  29 2c 37 2c a3 29 0d 17  |(menu%(6),7,.)..|
00029fa0  c9 16 f2 6c 69 74 28 6d  65 6e 75 25 28 36 29 2c  |...lit(menu%(6),|
00029fb0  38 2c a3 29 0d 17 ca 05  e1 0d 17 cb 05 3a 0d 17  |8,.).........:..|
00029fc0  cc 15 dd 20 f2 64 72 61  67 5f 71 75 65 72 79 28  |... .drag_query(|
00029fd0  66 24 29 0d 17 cd 0e ea  20 46 25 2c 49 25 2c 51  |f$)..... F%,I%,Q|
00029fe0  24 0d 17 ce 1e e7 20 a4  73 65 6c 65 63 74 65 64  |$..... .selected|
00029ff0  28 6b 65 79 70 61 64 57  25 2c 32 32 29 20 8c 0d  |(keypadW%,22) ..|
0002a000  17 cf 2c 20 20 c8 99 20  22 4f 53 5f 46 69 6c 65  |..,  .. "OS_File|
0002a010  22 2c 32 35 35 2c 66 24  2c a4 74 65 78 74 28 6b  |",255,f$,.text(k|
0002a020  65 79 70 61 64 57 25 2c  32 39 29 0d 17 d0 1d 20  |eypadW%,29).... |
0002a030  20 f2 73 65 74 5f 63 61  72 65 74 28 6b 65 79 70  | .set_caret(keyp|
0002a040  61 64 57 25 2c 32 39 29  0d 17 d1 1f 20 20 f2 72  |adW%,29)....  .r|
0002a050  65 64 72 61 77 5f 69 63  6f 6e 28 6b 65 79 70 61  |edraw_icon(keypa|
0002a060  64 57 25 2c 32 39 29 0d  17 d2 07 20 20 cc 0d 17  |dW%,29)....  ...|
0002a070  d3 2a 20 20 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |.*  .. "OS_File"|
0002a080  2c 32 35 35 2c 66 24 2c  a4 74 65 78 74 28 6d 61  |,255,f$,.text(ma|
0002a090  74 63 68 57 25 2c 30 29  0d 17 d4 1b 20 20 f2 6f  |tchW%,0)....  .o|
0002a0a0  70 65 6e 5f 77 69 6e 64  6f 77 28 6d 61 74 63 68  |pen_window(match|
0002a0b0  57 25 29 0d 17 d5 1b 20  20 f2 73 65 74 5f 63 61  |W%)....  .set_ca|
0002a0c0  72 65 74 28 6d 61 74 63  68 57 25 2c 30 29 0d 17  |ret(matchW%,0)..|
0002a0d0  d6 1d 20 20 f2 72 65 64  72 61 77 5f 69 63 6f 6e  |..  .redraw_icon|
0002a0e0  28 6d 61 74 63 68 57 25  2c 30 29 0d 17 d7 05 cd  |(matchW%,0).....|
0002a0f0  0d 17 d8 05 e1 0d 17 d9  05 3a 0d 17 da 17 dd 20  |.........:..... |
0002a100  f2 64 72 61 67 5f 6f 70  74 69 6f 6e 73 28 66 24  |.drag_options(f$|
0002a110  29 0d 17 db 13 ea 20 46  2c 49 25 2c 73 65 74 25  |)..... F,I%,set%|
0002a120  2c 69 63 25 0d 17 dc 0b  46 3d 8e 28 66 24 29 0d  |,ic%....F=.(f$).|
0002a130  17 dd 07 ea 20 85 0d 17  de 19 ee 20 85 20 ea 3a  |.... ...... . .:|
0002a140  f7 20 85 3a f2 65 6e 64  5f 6c 6f 61 64 3a e1 0d  |. .:.end_load:..|
0002a150  17 df 08 f7 20 2b 30 0d  17 e0 0f e3 20 49 25 3d  |.... +0..... I%=|
0002a160  31 20 b8 20 31 33 0d 17  e1 0b 20 20 f3 20 69 63  |1 . 13....  . ic|
0002a170  25 0d 17 e2 2a 20 20 e8  23 46 2c 73 65 74 25 3a  |%...*  .#F,set%:|
0002a180  f2 73 65 74 5f 69 63 6f  6e 28 70 72 69 6e 74 57  |.set_icon(printW|
0002a190  25 2c 69 63 25 2c 73 65  74 25 29 0d 17 e3 08 ed  |%,ic%,set%).....|
0002a1a0  20 49 25 0d 17 e4 0e e3  20 49 25 3d 31 20 b8 20  | I%..... I%=1 . |
0002a1b0  39 0d 17 e5 0b 20 20 f3  20 69 63 25 0d 17 e6 1d  |9....  . ic%....|
0002a1c0  20 20 e8 23 46 2c 24 a4  74 65 78 74 28 70 72 69  |  .#F,$.text(pri|
0002a1d0  6e 74 57 25 2c 69 63 25  29 0d 17 e7 1f 20 20 f2  |ntW%,ic%)....  .|
0002a1e0  72 65 64 72 61 77 5f 69  63 6f 6e 28 70 72 69 6e  |redraw_icon(prin|
0002a1f0  74 57 25 2c 69 63 25 29  0d 17 e8 08 ed 20 49 25  |tW%,ic%)..... I%|
0002a200  0d 17 e9 0e e3 20 49 25  3d 31 20 b8 20 37 0d 17  |..... I%=1 . 7..|
0002a210  ea 0b 20 20 f3 20 69 63  25 0d 17 eb 2a 20 20 e8  |..  . ic%...*  .|
0002a220  23 46 2c 73 65 74 25 3a  f2 73 65 74 5f 69 63 6f  |#F,set%:.set_ico|
0002a230  6e 28 70 72 69 6e 74 57  25 2c 69 63 25 2c 73 65  |n(printW%,ic%,se|
0002a240  74 25 29 0d 17 ec 08 ed  20 49 25 0d 17 ed 0e e3  |t%)..... I%.....|
0002a250  20 49 25 3d 31 20 b8 20  33 0d 17 ee 0b 20 20 f3  | I%=1 . 3....  .|
0002a260  20 69 63 25 0d 17 ef 2a  20 20 e8 23 46 2c 73 65  | ic%...*  .#F,se|
0002a270  74 25 3a f2 73 65 74 5f  69 63 6f 6e 28 6c 61 62  |t%:.set_icon(lab|
0002a280  65 6c 57 25 2c 69 63 25  2c 73 65 74 25 29 0d 17  |elW%,ic%,set%)..|
0002a290  f0 08 ed 20 49 25 0d 17  f1 0e e3 20 49 25 3d 31  |... I%..... I%=1|
0002a2a0  20 b8 20 34 0d 17 f2 0b  20 20 f3 20 69 63 25 0d  | . 4....  . ic%.|
0002a2b0  17 f3 1d 20 20 e8 23 46  2c 24 a4 74 65 78 74 28  |...  .#F,$.text(|
0002a2c0  6c 61 62 65 6c 57 25 2c  69 63 25 29 0d 17 f4 08  |labelW%,ic%)....|
0002a2d0  ed 20 49 25 0d 17 f5 0e  e3 20 49 25 3d 31 20 b8  |. I%..... I%=1 .|
0002a2e0  20 33 0d 17 f6 0b 20 20  f3 20 69 63 25 0d 17 f7  | 3....  . ic%...|
0002a2f0  2a 20 20 e8 23 46 2c 73  65 74 25 3a f2 73 65 74  |*  .#F,set%:.set|
0002a300  5f 69 63 6f 6e 28 6c 61  62 65 6c 57 25 2c 69 63  |_icon(labelW%,ic|
0002a310  25 2c 73 65 74 25 29 0d  17 f8 08 ed 20 49 25 0d  |%,set%)..... I%.|
0002a320  17 f9 12 f2 63 6c 6f 73  65 5f 66 69 6c 65 28 46  |....close_file(F|
0002a330  29 0d 17 fa 32 f2 69 63  6f 6e 5f 62 69 74 28 32  |)...2.icon_bit(2|
0002a340  32 2c 70 72 69 6e 74 57  25 2c 31 35 2c a4 73 65  |2,printW%,15,.se|
0002a350  6c 65 63 74 65 64 28 70  72 69 6e 74 57 25 2c 32  |lected(printW%,2|
0002a360  35 29 29 0d 17 fb 32 f2  69 63 6f 6e 5f 62 69 74  |5))...2.icon_bit|
0002a370  28 32 32 2c 70 72 69 6e  74 57 25 2c 34 35 2c a4  |(22,printW%,45,.|
0002a380  73 65 6c 65 63 74 65 64  28 70 72 69 6e 74 57 25  |selected(printW%|
0002a390  2c 32 35 29 29 0d 17 fc  32 f2 69 63 6f 6e 5f 62  |,25))...2.icon_b|
0002a3a0  69 74 28 32 32 2c 6c 61  62 65 6c 57 25 2c 31 32  |it(22,labelW%,12|
0002a3b0  2c a4 73 65 6c 65 63 74  65 64 28 6c 61 62 65 6c  |,.selected(label|
0002a3c0  57 25 2c 31 31 29 29 0d  17 fd 05 3a 0d 17 fe 38  |W%,11))....:...8|
0002a3d0  dc 20 31 2c 32 2c 34 2c  36 2c 37 2c 38 2c 32 33  |. 1,2,4,6,7,8,23|
0002a3e0  2c 32 34 2c 32 35 2c 32  36 2c 33 38 2c 33 39 2c  |,24,25,26,38,39,|
0002a3f0  34 31 3a 52 45 4d 20 52  61 64 69 6f 20 62 75 74  |41:REM Radio but|
0002a400  74 6f 6e 73 0d 17 ff 34  dc 20 31 35 2c 31 36 2c  |tons...4. 15,16,|
0002a410  31 37 2c 31 38 2c 33 30  2c 33 32 2c 33 34 2c 34  |17,18,30,32,34,4|
0002a420  33 2c 34 35 3a 52 45 4d  20 57 72 69 74 61 62 6c  |3,45:REM Writabl|
0002a430  65 20 66 69 65 6c 64 73  0d 18 00 2e dc 20 31 30  |e fields..... 10|
0002a440  2c 31 31 2c 31 32 2c 31  39 2c 32 39 2c 34 30 2c  |,11,12,19,29,40,|
0002a450  34 32 3a 52 45 4d 20 4f  70 74 69 6f 6e 20 73 77  |42:REM Option sw|
0002a460  69 74 63 68 65 73 0d 18  01 20 f4 20 49 6e 20 4c  |itches... . In L|
0002a470  61 62 65 6c 20 44 65 66  69 6e 69 74 69 6f 6e 20  |abel Definition |
0002a480  77 69 6e 64 6f 77 0d 18  02 1d dc 20 30 2c 31 2c  |window..... 0,1,|
0002a490  32 3a 52 45 4d 20 52 61  64 69 6f 20 62 75 74 74  |2:REM Radio butt|
0002a4a0  6f 6e 73 0d 18 03 24 dc  20 34 2c 36 2c 31 30 2c  |ons...$. 4,6,10,|
0002a4b0  31 32 3a 52 45 4d 20 57  72 69 74 65 61 62 6c 65  |12:REM Writeable|
0002a4c0  20 66 69 65 6c 64 73 0d  18 04 22 dc 20 31 31 2c  | fields...". 11,|
0002a4d0  31 33 2c 31 36 3a 52 45  4d 20 4f 70 74 69 6f 6e  |13,16:REM Option|
0002a4e0  20 73 77 69 74 63 68 65  73 0d 18 05 05 3a 0d 18  | switches....:..|
0002a4f0  06 05 e1 0d 18 07 05 3a  0d 18 08 0f dd 20 f2 65  |.......:..... .e|
0002a500  6e 64 5f 6c 6f 61 64 0d  18 09 12 f2 63 6c 6f 73  |nd_load.....clos|
0002a510  65 5f 66 69 6c 65 28 46  29 0d 18 0a 0a c8 8e 20  |e_file(F)...... |
0002a520  9f 20 ca 0d 18 0b 37 20  20 c9 20 32 32 32 3a f2  |. ....7  . 222:.|
0002a530  77 69 6d 70 5f 65 72 72  6f 72 28 b9 2c 66 61 74  |wimp_error(.,fat|
0002a540  61 6c 5f 65 72 72 25 2c  9e 2c 66 24 2b 22 20 6e  |al_err%,.,f$+" n|
0002a550  6f 74 20 66 6f 75 6e 64  22 29 0d 18 0c 0a 20 20  |ot found")....  |
0002a560  c9 20 36 3a 0d 18 0d 46  20 20 f2 77 69 6d 70 5f  |. 6:...F  .wimp_|
0002a570  65 72 72 6f 72 28 b9 2c  6d 6f 61 6e 5f 65 72 72  |error(.,moan_err|
0002a580  25 2c 9e 2c 66 24 2b 22  20 69 73 20 74 6f 6f 20  |%,.,f$+" is too |
0002a590  6f 6c 64 20 61 6e 64 20  69 73 20 62 65 69 6e 67  |old and is being|
0002a5a0  20 64 65 6c 65 74 65 64  22 29 0d 18 0e 1e 20 20  | deleted")....  |
0002a5b0  c8 99 20 22 4f 53 5f 43  4c 49 22 2c 22 44 65 6c  |.. "OS_CLI","Del|
0002a5c0  65 74 65 20 22 2b 66 24  0d 18 0f 50 20 20 e7 20  |ete "+f$...P  . |
0002a5d0  a4 6c 65 61 66 28 66 24  29 3d 22 50 72 69 6e 74  |.leaf(f$)="Print|
0002a5e0  4f 70 74 73 22 20 8c 20  f2 64 72 61 67 5f 6f 70  |Opts" . .drag_op|
0002a5f0  74 69 6f 6e 73 28 22 3c  50 62 61 73 65 24 44 69  |tions("<Pbase$Di|
0002a600  72 3e 2e 52 65 73 6f 75  72 63 65 73 2e 50 72 69  |r>.Resources.Pri|
0002a610  6e 74 4f 70 74 73 22 29  0d 18 10 25 20 20 7f 3a  |ntOpts")...%  .:|
0002a620  f2 77 69 6d 70 5f 65 72  72 6f 72 28 b9 2c 6d 6f  |.wimp_error(.,mo|
0002a630  61 6e 5f 65 72 72 25 2c  9e 2c f6 24 29 0d 18 11  |an_err%,.,.$)...|
0002a640  05 cb 0d 18 12 05 e1 0d  18 13 05 3a 0d 18 14 13  |...........:....|
0002a650  dd 20 f2 64 65 73 69 67  6e 5f 66 69 65 6c 64 0d  |. .design_field.|
0002a660  18 15 0b ea 20 77 25 2c  68 25 0d 18 16 15 70 6f  |.... w%,h%....po|
0002a670  73 78 25 3d 78 25 3a 70  6f 73 79 25 3d 79 25 0d  |sx%=x%:posy%=y%.|
0002a680  18 17 33 21 62 6c 6f 63  6b 25 3d 6d 61 69 6e 57  |..3!block%=mainW|
0002a690  25 3a c8 99 20 22 57 69  6d 70 5f 47 65 74 57 69  |%:.. "Wimp_GetWi|
0002a6a0  6e 64 6f 77 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |ndowState",,bloc|
0002a6b0  6b 25 0d 18 18 1a 78 25  2b 3d 62 6c 6f 63 6b 25  |k%....x%+=block%|
0002a6c0  21 32 30 2d 62 6c 6f 63  6b 25 21 34 0d 18 19 1b  |!20-block%!4....|
0002a6d0  79 25 2b 3d 62 6c 6f 63  6b 25 21 32 34 2d 62 6c  |y%+=block%!24-bl|
0002a6e0  6f 63 6b 25 21 31 36 0d  18 1a 16 c8 8e 20 62 25  |ock%!16...... b%|
0002a6f0  20 80 20 25 31 31 31 31  31 31 31 20 ca 0d 18 1b  | . %1111111 ....|
0002a700  0b 20 20 c9 20 31 36 3a  0d 18 1c 41 20 20 e7 20  |.  . 16:...A  . |
0002a710  28 69 63 25 20 83 20 32  29 3d 31 20 8c 20 64 72  |(ic% . 2)=1 . dr|
0002a720  61 67 25 3d 36 3a 64 72  61 67 62 75 74 74 25 3d  |ag%=6:dragbutt%=|
0002a730  31 36 20 8b 20 64 72 61  67 25 3d 35 3a 64 72 61  |16 . drag%=5:dra|
0002a740  67 62 75 74 74 25 3d 36  34 0d 18 1d 22 20 20 f2  |gbutt%=64..."  .|
0002a750  69 6e 69 74 5f 64 72 61  67 28 6d 61 69 6e 57 25  |init_drag(mainW%|
0002a760  2c 69 63 25 2c 64 72 61  67 25 29 0d 18 1e 0a 20  |,ic%,drag%).... |
0002a770  20 c9 20 32 3a 0d 18 1f  12 20 20 24 49 6e 73 54  | . 2:....  $InsT|
0002a780  65 78 74 25 3d 22 22 0d  18 20 33 20 20 f2 64 65  |ext%="".. 3  .de|
0002a790  73 65 6c 65 63 74 28 63  72 65 61 74 65 57 25 2c  |select(createW%,|
0002a7a0  a4 73 65 6c 65 63 74 65  64 5f 65 73 67 28 63 72  |.selected_esg(cr|
0002a7b0  65 61 74 65 57 25 2c 31  29 29 0d 18 21 10 20 20  |eateW%,1))..!.  |
0002a7c0  e7 20 69 63 25 3e 3d 30  20 8c 0d 18 22 1a 20 20  |. ic%>=0 ...".  |
0002a7d0  20 20 f2 6c 69 74 28 6d  65 6e 75 25 28 39 29 2c  |  .lit(menu%(9),|
0002a7e0  30 2c b9 29 0d 18 23 42  20 20 20 20 21 62 6c 6f  |0,.)..#B    !blo|
0002a7f0  63 6b 25 3d 6d 61 69 6e  57 25 3a 62 6c 6f 63 6b  |ck%=mainW%:block|
0002a800  25 21 34 3d 69 63 25 3a  c8 99 20 22 57 69 6d 70  |%!4=ic%:.. "Wimp|
0002a810  5f 47 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_GetIconState",,|
0002a820  62 6c 6f 63 6b 25 0d 18  24 4d 20 20 20 20 78 25  |block%..$M    x%|
0002a830  3d 62 6c 6f 63 6b 25 21  38 3a 79 25 3d 62 6c 6f  |=block%!8:y%=blo|
0002a840  63 6b 25 21 31 32 3a 77  25 3d 62 6c 6f 63 6b 25  |ck%!12:w%=block%|
0002a850  21 31 36 2d 62 6c 6f 63  6b 25 21 38 3a 68 25 3d  |!16-block%!8:h%=|
0002a860  62 6c 6f 63 6b 25 21 32  30 2d 62 6c 6f 63 6b 25  |block%!20-block%|
0002a870  21 31 32 0d 18 25 24 20  20 20 20 46 69 65 6c 64  |!12..%$    Field|
0002a880  6e 75 6d 62 65 72 25 3d  a4 67 65 74 5f 66 69 65  |number%=.get_fie|
0002a890  6c 64 28 69 63 25 29 0d  18 26 25 20 20 20 20 74  |ld(ic%)..&%    t|
0002a8a0  79 70 65 25 3d 63 68 61  72 74 79 70 65 25 28 46  |ype%=chartype%(F|
0002a8b0  69 65 6c 64 6e 75 6d 62  65 72 25 29 0d 18 27 12  |ieldnumber%)..'.|
0002a8c0  20 20 20 20 c8 8e 20 74  79 70 65 25 20 ca 0d 18  |    .. type% ...|
0002a8d0  28 1e 20 20 20 20 20 20  c9 20 30 2c 31 2c 32 2c  |(.      . 0,1,2,|
0002a8e0  33 2c 34 2c 35 2c 36 2c  37 2c 38 3a 0d 18 29 1e  |3,4,5,6,7,8:..).|
0002a8f0  20 20 20 20 20 20 f2 73  65 6c 65 63 74 28 63 72  |      .select(cr|
0002a900  65 61 74 65 57 25 2c 32  31 29 0d 18 2a 1e 20 20  |eateW%,21)..*.  |
0002a910  20 20 20 20 f2 73 65 74  5f 6c 69 6d 69 74 73 28  |    .set_limits(|
0002a920  31 2c 30 2c 38 2c 38 29  0d 18 2b 1b 20 20 20 20  |1,0,8,8)..+.    |
0002a930  20 20 c9 20 33 36 2c 33  37 2c 33 38 2c 33 39 2c  |  . 36,37,38,39,|
0002a940  34 30 3a 0d 18 2c 1e 20  20 20 20 20 20 f2 73 65  |40:..,.      .se|
0002a950  6c 65 63 74 28 63 72 65  61 74 65 57 25 2c 32 32  |lect(createW%,22|
0002a960  29 0d 18 2d 22 20 20 20  20 20 20 f2 73 65 74 5f  |)..-"      .set_|
0002a970  6c 69 6d 69 74 73 28 33  36 2c 33 36 2c 34 30 2c  |limits(36,36,40,|
0002a980  31 31 29 0d 18 2e 1b 20  20 20 20 20 20 c9 20 34  |11)....      . 4|
0002a990  31 2c 34 32 2c 34 33 2c  34 34 2c 34 35 3a 0d 18  |1,42,43,44,45:..|
0002a9a0  2f 1e 20 20 20 20 20 20  f2 73 65 6c 65 63 74 28  |/.      .select(|
0002a9b0  63 72 65 61 74 65 57 25  2c 32 34 29 0d 18 30 22  |createW%,24)..0"|
0002a9c0  20 20 20 20 20 20 f2 73  65 74 5f 6c 69 6d 69 74  |      .set_limit|
0002a9d0  73 28 34 31 2c 34 31 2c  34 35 2c 31 34 29 0d 18  |s(41,41,45,14)..|
0002a9e0  31 36 20 20 20 20 20 20  c9 20 34 36 2c 34 37 2c  |16      . 46,47,|
0002a9f0  34 38 2c 34 39 2c 35 30  2c 35 31 2c 35 32 2c 35  |48,49,50,51,52,5|
0002aa00  33 2c 35 34 2c 35 35 2c  35 36 2c 35 37 2c 35 38  |3,54,55,56,57,58|
0002aa10  2c 35 39 3a 0d 18 32 1e  20 20 20 20 20 20 f2 73  |,59:..2.      .s|
0002aa20  65 6c 65 63 74 28 63 72  65 61 74 65 57 25 2c 33  |elect(createW%,3|
0002aa30  35 29 0d 18 33 22 20 20  20 20 20 20 f2 73 65 74  |5)..3"      .set|
0002aa40  5f 6c 69 6d 69 74 73 28  34 36 2c 34 36 2c 35 39  |_limits(46,46,59|
0002aa50  2c 31 36 29 0d 18 34 0c  20 20 20 20 20 20 7f 3a  |,16)..4.      .:|
0002aa60  0d 18 35 1e 20 20 20 20  20 20 f2 73 65 6c 65 63  |..5.      .selec|
0002aa70  74 28 63 72 65 61 74 65  57 25 2c 32 33 29 0d 18  |t(createW%,23)..|
0002aa80  36 20 20 20 20 20 20 20  f2 73 65 74 5f 6c 69 6d  |6       .set_lim|
0002aa90  69 74 73 28 39 2c 39 2c  33 35 2c 31 39 29 0d 18  |its(9,9,35,19)..|
0002aaa0  37 09 20 20 20 20 cb 0d  18 38 18 20 20 20 20 66  |7.    ...8.    f|
0002aab0  69 65 6c 64 74 79 70 65  25 3d 74 79 70 65 25 0d  |ieldtype%=type%.|
0002aac0  18 39 52 20 20 20 20 f2  74 69 63 6b 5f 6f 6e 65  |.9R    .tick_one|
0002aad0  28 6d 65 6e 75 25 28 6d  65 6e 75 6e 75 6d 62 65  |(menu%(menunumbe|
0002aae0  72 25 29 2c 30 2c 6c 61  73 74 74 79 70 65 25 2d  |r%),0,lasttype%-|
0002aaf0  66 69 72 73 74 74 79 70  65 25 2c 66 69 65 6c 64  |firsttype%,field|
0002ab00  74 79 70 65 25 2d 66 69  72 73 74 74 79 70 65 25  |type%-firsttype%|
0002ab10  29 0d 18 3a 34 20 20 20  20 24 46 74 69 74 6c 65  |)..:4    $Ftitle|
0002ab20  54 65 78 74 25 3d 22 4d  6f 64 69 66 79 20 66 69  |Text%="Modify fi|
0002ab30  65 6c 64 20 22 2b c3 28  46 69 65 6c 64 6e 75 6d  |eld "+.(Fieldnum|
0002ab40  62 65 72 25 29 0d 18 3b  35 20 20 20 20 24 44 65  |ber%)..;5    $De|
0002ab50  73 63 54 65 78 74 25 3d  24 a4 74 65 78 74 28 6d  |scText%=$.text(m|
0002ab60  61 69 6e 57 25 2c 64 65  73 63 25 28 46 69 65 6c  |ainW%,desc%(Fiel|
0002ab70  64 6e 75 6d 62 65 72 25  29 29 0d 18 3c 24 20 20  |dnumber%))..<$  |
0002ab80  20 20 24 54 61 67 54 65  78 74 25 3d 54 61 67 24  |  $TagText%=Tag$|
0002ab90  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 0d 18  |(Fieldnumber%)..|
0002aba0  3d 27 20 20 20 20 24 4c  65 6e 54 65 78 74 25 3d  |='    $LenText%=|
0002abb0  c3 28 6c 65 6e 25 28 46  69 65 6c 64 6e 75 6d 62  |.(len%(Fieldnumb|
0002abc0  65 72 25 29 29 0d 18 3e  24 20 20 20 20 24 56 61  |er%))..>$    $Va|
0002abd0  6c 54 65 78 74 25 3d 76  6e 61 6d 65 24 28 66 69  |lText%=vname$(fi|
0002abe0  65 6c 64 74 79 70 65 25  29 0d 18 3f 6c 20 20 20  |eldtype%)..?l   |
0002abf0  20 e7 20 66 69 78 25 28  46 69 65 6c 64 6e 75 6d  | . fix%(Fieldnum|
0002ac00  62 65 72 25 29 3e 30 20  8c 20 24 46 69 78 70 74  |ber%)>0 . $Fixpt|
0002ac10  25 3d c3 28 66 69 78 25  28 46 69 65 6c 64 6e 75  |%=.(fix%(Fieldnu|
0002ac20  6d 62 65 72 25 29 29 3a  f2 73 65 6c 65 63 74 28  |mber%)):.select(|
0002ac30  63 72 65 61 74 65 57 25  2c 31 34 29 20 8b 20 f2  |createW%,14) . .|
0002ac40  64 65 73 65 6c 65 63 74  28 63 72 65 61 74 65 57  |deselect(createW|
0002ac50  25 2c 31 34 29 0d 18 40  3a 20 20 20 20 f2 69 63  |%,14)..@:    .ic|
0002ac60  6f 6e 5f 62 69 74 28 32  32 2c 63 72 65 61 74 65  |on_bit(22,create|
0002ac70  57 25 2c 31 33 2c 28 a4  73 65 6c 65 63 74 65 64  |W%,13,(.selected|
0002ac80  28 63 72 65 61 74 65 57  25 2c 31 34 29 29 29 0d  |(createW%,14))).|
0002ac90  18 41 3f 20 20 20 20 f2  69 63 6f 6e 5f 62 69 74  |.A?    .icon_bit|
0002aca0  28 32 32 2c 63 72 65 61  74 65 57 25 2c 31 34 2c  |(22,createW%,14,|
0002acb0  28 66 69 65 6c 64 74 79  70 65 25 3d 33 20 84 20  |(fieldtype%=3 . |
0002acc0  66 69 65 6c 64 74 79 70  65 25 3d 36 29 29 0d 18  |fieldtype%=6))..|
0002acd0  42 23 20 20 20 20 f2 69  63 6f 6e 5f 62 69 74 28  |B#    .icon_bit(|
0002ace0  32 32 2c 63 72 65 61 74  65 57 25 2c 31 38 2c a3  |22,createW%,18,.|
0002acf0  29 0d 18 43 5b 20 20 20  20 f2 69 63 6f 6e 5f 62  |)..C[    .icon_b|
0002ad00  69 74 28 32 32 2c 63 72  65 61 74 65 57 25 2c 36  |it(22,createW%,6|
0002ad10  2c 28 66 69 65 6c 64 74  79 70 65 25 3c 39 20 84  |,(fieldtype%<9 .|
0002ad20  20 66 69 65 6c 64 74 79  70 65 25 3d 34 36 20 84  | fieldtype%=46 .|
0002ad30  20 66 69 65 6c 64 74 79  70 65 25 3d 34 37 29 20  | fieldtype%=47) |
0002ad40  80 20 ac 20 61 64 6a 75  73 74 25 29 0d 18 44 2b  |. . adjust%)..D+|
0002ad50  20 20 20 20 f2 69 63 6f  6e 5f 62 69 74 28 32 32  |    .icon_bit(22|
0002ad60  2c 63 72 65 61 74 65 57  25 2c 33 30 2c ac 20 61  |,createW%,30,. a|
0002ad70  64 6a 75 73 74 25 29 0d  18 45 23 20 20 20 20 f2  |djust%)..E#    .|
0002ad80  69 63 6f 6e 5f 62 69 74  28 32 32 2c 63 72 65 61  |icon_bit(22,crea|
0002ad90  74 65 57 25 2c 32 39 2c  b9 29 0d 18 46 40 20 20  |teW%,29,.)..F@  |
0002ada0  20 20 f2 69 63 6f 6e 5f  62 69 74 28 32 32 2c 63  |  .icon_bit(22,c|
0002adb0  72 65 61 74 65 57 25 2c  31 35 2c 28 66 69 65 6c  |reateW%,15,(fiel|
0002adc0  64 74 79 70 65 25 3d 33  20 84 20 66 69 65 6c 64  |dtype%=3 . field|
0002add0  74 79 70 65 25 3d 34 37  29 29 0d 18 47 30 20 20  |type%=47))..G0  |
0002ade0  20 20 f2 69 63 6f 6e 5f  62 69 74 28 32 32 2c 63  |  .icon_bit(22,c|
0002adf0  72 65 61 74 65 57 25 2c  32 35 2c 28 66 69 65 6c  |reateW%,25,(fiel|
0002ae00  64 74 79 70 65 25 3d 33  29 29 0d 18 48 2a 20 20  |dtype%=3))..H*  |
0002ae10  20 20 43 24 3d 63 61 6c  63 24 28 46 69 65 6c 64  |  C$=calc$(Field|
0002ae20  6e 75 6d 62 65 72 25 29  3a 50 25 3d a7 43 24 2c  |number%):P%=.C$,|
0002ae30  22 7c 22 29 0d 18 49 38  20 20 20 20 e7 20 50 25  |"|")..I8    . P%|
0002ae40  3e 30 20 8c 20 24 6d 69  6e 74 65 78 74 25 3d c0  |>0 . $mintext%=.|
0002ae50  43 24 2c 50 25 2d 31 29  3a 24 6d 61 78 74 65 78  |C$,P%-1):$maxtex|
0002ae60  74 25 3d c1 43 24 2c 50  25 2b 31 29 0d 18 4a 14  |t%=.C$,P%+1)..J.|
0002ae70  20 20 20 20 e3 20 49 25  3d 32 31 20 b8 20 32 34  |    . I%=21 . 24|
0002ae80  0d 18 4b 2d 20 20 20 20  20 20 f2 69 63 6f 6e 5f  |..K-      .icon_|
0002ae90  62 69 74 28 32 32 2c 63  72 65 61 74 65 57 25 2c  |bit(22,createW%,|
0002aea0  49 25 2c ac 20 61 64 6a  75 73 74 25 29 0d 18 4c  |I%,. adjust%)..L|
0002aeb0  0c 20 20 20 20 ed 20 49  25 0d 18 4d 2b 20 20 20  |.    . I%..M+   |
0002aec0  20 f2 69 63 6f 6e 5f 62  69 74 28 32 32 2c 63 72  | .icon_bit(22,cr|
0002aed0  65 61 74 65 57 25 2c 33  35 2c ac 20 61 64 6a 75  |eateW%,35,. adju|
0002aee0  73 74 25 29 0d 18 4e 2b  20 20 20 20 f2 69 63 6f  |st%)..N+    .ico|
0002aef0  6e 5f 62 69 74 28 32 32  2c 63 72 65 61 74 65 57  |n_bit(22,createW|
0002af00  25 2c 33 39 2c ac 20 61  64 6a 75 73 74 25 29 0d  |%,39,. adjust%).|
0002af10  18 4f 2b 20 20 20 20 f2  69 63 6f 6e 5f 62 69 74  |.O+    .icon_bit|
0002af20  28 32 32 2c 63 72 65 61  74 65 57 25 2c 34 30 2c  |(22,createW%,40,|
0002af30  ac 20 61 64 6a 75 73 74  25 29 0d 18 50 09 20 20  |. adjust%)..P.  |
0002af40  20 20 cc 0d 18 51 22 20  20 20 20 f2 6c 69 74 28  |  ...Q"    .lit(|
0002af50  6d 65 6e 75 25 28 39 29  2c 30 2c ac 20 61 64 6a  |menu%(9),0,. adj|
0002af60  75 73 74 25 29 0d 18 52  1c 20 20 20 20 f2 73 65  |ust%)..R.    .se|
0002af70  6c 65 63 74 28 63 72 65  61 74 65 57 25 2c 32 31  |lect(createW%,21|
0002af80  29 0d 18 53 1c 20 20 20  20 f2 73 65 74 5f 6c 69  |)..S.    .set_li|
0002af90  6d 69 74 73 28 31 2c 30  2c 38 2c 38 29 0d 18 54  |mits(1,0,8,8)..T|
0002afa0  2e 20 20 20 20 24 46 74  69 74 6c 65 54 65 78 74  |.    $FtitleText|
0002afb0  25 3d 22 4e 65 77 20 66  69 65 6c 64 20 22 2b c3  |%="New field "+.|
0002afc0  28 66 69 65 6c 64 73 25  2b 31 29 0d 18 55 2f 20  |(fields%+1)..U/ |
0002afd0  20 20 20 24 44 65 73 63  54 65 78 74 25 3d 22 22  |   $DescText%=""|
0002afe0  3a 24 54 61 67 54 65 78  74 25 3d 22 22 3a 24 4c  |:$TagText%="":$L|
0002aff0  65 6e 54 65 78 74 25 3d  22 22 0d 18 56 2d 20 20  |enText%=""..V-  |
0002b000  20 20 24 46 69 78 70 74  25 3d 22 32 22 3a 24 6d  |  $Fixpt%="2":$m|
0002b010  69 6e 74 65 78 74 25 3d  22 22 3a 24 6d 61 78 74  |intext%="":$maxt|
0002b020  65 78 74 25 3d 22 22 0d  18 57 1e 20 20 20 20 f2  |ext%=""..W.    .|
0002b030  64 65 73 65 6c 65 63 74  28 63 72 65 61 74 65 57  |deselect(createW|
0002b040  25 2c 31 34 29 0d 18 58  23 20 20 20 20 f2 69 63  |%,14)..X#    .ic|
0002b050  6f 6e 5f 62 69 74 28 32  32 2c 63 72 65 61 74 65  |on_bit(22,create|
0002b060  57 25 2c 31 33 2c a3 29  0d 18 59 23 20 20 20 20  |W%,13,.)..Y#    |
0002b070  f2 69 63 6f 6e 5f 62 69  74 28 32 32 2c 63 72 65  |.icon_bit(22,cre|
0002b080  61 74 65 57 25 2c 31 34  2c a3 29 0d 18 5a 23 20  |ateW%,14,.)..Z# |
0002b090  20 20 20 f2 69 63 6f 6e  5f 62 69 74 28 32 32 2c  |   .icon_bit(22,|
0002b0a0  63 72 65 61 74 65 57 25  2c 31 35 2c a3 29 0d 18  |createW%,15,.)..|
0002b0b0  5b 23 20 20 20 20 f2 69  63 6f 6e 5f 62 69 74 28  |[#    .icon_bit(|
0002b0c0  32 32 2c 63 72 65 61 74  65 57 25 2c 32 35 2c a3  |22,createW%,25,.|
0002b0d0  29 0d 18 5c 23 20 20 20  20 f2 69 63 6f 6e 5f 62  |)..\#    .icon_b|
0002b0e0  69 74 28 32 32 2c 63 72  65 61 74 65 57 25 2c 32  |it(22,createW%,2|
0002b0f0  39 2c a3 29 0d 18 5d 23  20 20 20 20 f2 69 63 6f  |9,.)..]#    .ico|
0002b100  6e 5f 62 69 74 28 32 32  2c 63 72 65 61 74 65 57  |n_bit(22,createW|
0002b110  25 2c 33 30 2c a3 29 0d  18 5e 23 20 20 20 20 f2  |%,30,.)..^#    .|
0002b120  69 63 6f 6e 5f 62 69 74  28 32 32 2c 63 72 65 61  |icon_bit(22,crea|
0002b130  74 65 57 25 2c 33 39 2c  a3 29 0d 18 5f 23 20 20  |teW%,39,.).._#  |
0002b140  20 20 f2 69 63 6f 6e 5f  62 69 74 28 32 32 2c 63  |  .icon_bit(22,c|
0002b150  72 65 61 74 65 57 25 2c  34 30 2c a3 29 0d 18 60  |reateW%,40,.)..`|
0002b160  2b 20 20 20 20 f2 69 63  6f 6e 5f 62 69 74 28 32  |+    .icon_bit(2|
0002b170  32 2c 63 72 65 61 74 65  57 25 2c 31 38 2c ac 20  |2,createW%,18,. |
0002b180  61 64 6a 75 73 74 25 29  0d 18 61 07 20 20 cd 0d  |adjust%)..a.  ..|
0002b190  18 62 39 20 20 24 62 6f  78 58 25 3d c3 28 78 25  |.b9  $boxX%=.(x%|
0002b1a0  29 3a 24 62 6f 78 59 25  3d c3 28 79 25 29 3a 24  |):$boxY%=.(y%):$|
0002b1b0  62 6f 78 57 25 3d c3 28  77 25 29 3a 24 62 6f 78  |boxW%=.(w%):$box|
0002b1c0  48 25 3d c3 28 68 25 29  0d 18 63 1d 20 20 f2 63  |H%=.(h%)..c.  .c|
0002b1d0  6c 6f 73 65 5f 77 69 6e  64 6f 77 28 63 72 65 61  |lose_window(crea|
0002b1e0  74 65 57 25 29 0d 18 64  2c 20 20 f2 73 68 6f 77  |teW%)..d,  .show|
0002b1f0  5f 6d 65 6e 75 28 6d 65  6e 75 25 28 39 29 2c 70  |_menu(menu%(9),p|
0002b200  6f 73 78 25 2d 36 34 2c  70 6f 73 79 25 2d 32 30  |osx%-64,posy%-20|
0002b210  29 0d 18 65 30 20 20 c9  20 36 34 3a f2 69 6e 69  |)..e0  . 64:.ini|
0002b220  74 5f 64 72 61 67 28 6d  61 69 6e 57 25 2c 69 63  |t_drag(mainW%,ic|
0002b230  25 2c 35 29 3a 64 72 61  67 62 75 74 74 25 3d 36  |%,5):dragbutt%=6|
0002b240  34 0d 18 66 05 cb 0d 18  67 05 e1 0d 18 68 05 3a  |4..f....g....h.:|
0002b250  0d 18 69 28 dd 20 f2 72  65 6d 6f 76 65 5f 66 69  |..i(. .remove_fi|
0002b260  65 6c 64 28 46 69 65 6c  64 25 2c 63 6f 6e 25 2c  |eld(Field%,con%,|
0002b270  f8 20 43 61 6c 63 24 29  0d 18 6a 08 ea 20 46 25  |. Calc$)..j.. F%|
0002b280  0d 18 6b 27 e7 20 63 6f  6e 25 20 8c 20 e7 20 a4  |..k'. con% . . .|
0002b290  63 6f 6e 66 69 72 6d 28  a4 6d 73 67 28 35 33 29  |confirm(.msg(53)|
0002b2a0  29 3d a3 20 8c 20 e1 0d  18 6c 29 21 62 6c 6f 63  |)=. . ...l)!bloc|
0002b2b0  6b 25 3d 6d 61 69 6e 57  25 3a 62 6c 6f 63 6b 25  |k%=mainW%:block%|
0002b2c0  21 34 3d 64 65 73 63 25  28 46 69 65 6c 64 25 29  |!4=desc%(Field%)|
0002b2d0  0d 18 6d 22 c8 99 20 22  57 69 6d 70 5f 47 65 74  |..m".. "Wimp_Get|
0002b2e0  49 63 6f 6e 53 74 61 74  65 22 2c 2c 62 6c 6f 63  |IconState",,bloc|
0002b2f0  6b 25 0d 18 6e 22 70 6f  73 78 25 3d 62 6c 6f 63  |k%..n"posx%=bloc|
0002b300  6b 25 21 38 3a 70 6f 73  79 25 3d 62 6c 6f 63 6b  |k%!8:posy%=block|
0002b310  25 21 31 32 0d 18 6f 20  c8 99 20 22 57 69 6d 70  |%!12..o .. "Wimp|
0002b320  5f 44 65 6c 65 74 65 49  63 6f 6e 22 2c 2c 62 6c  |_DeleteIcon",,bl|
0002b330  6f 63 6b 25 0d 18 70 38  62 6c 6f 63 6b 25 21 34  |ock%..p8block%!4|
0002b340  3d 66 69 65 6c 64 25 28  46 69 65 6c 64 25 29 3a  |=field%(Field%):|
0002b350  c8 99 20 22 57 69 6d 70  5f 44 65 6c 65 74 65 49  |.. "Wimp_DeleteI|
0002b360  63 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 0d 18 71 0e  |con",,block%..q.|
0002b370  66 69 65 6c 64 73 25 2d  3d 31 0d 18 72 17 43 61  |fields%-=1..r.Ca|
0002b380  6c 63 24 3d 63 61 6c 63  24 28 46 69 65 6c 64 25  |lc$=calc$(Field%|
0002b390  29 0d 18 73 19 e3 20 46  25 3d 46 69 65 6c 64 25  |)..s.. F%=Field%|
0002b3a0  20 b8 20 66 69 65 6c 64  73 25 0d 18 74 a3 20 20  | . fields%..t.  |
0002b3b0  64 65 73 63 25 28 46 25  29 3d 64 65 73 63 25 28  |desc%(F%)=desc%(|
0002b3c0  46 25 2b 31 29 3a 66 69  65 6c 64 25 28 46 25 29  |F%+1):field%(F%)|
0002b3d0  3d 66 69 65 6c 64 25 28  46 25 2b 31 29 3a 54 61  |=field%(F%+1):Ta|
0002b3e0  67 24 28 46 25 29 3d 54  61 67 24 28 46 25 2b 31  |g$(F%)=Tag$(F%+1|
0002b3f0  29 3a 6c 65 6e 25 28 46  25 29 3d 6c 65 6e 25 28  |):len%(F%)=len%(|
0002b400  46 25 2b 31 29 3a 63 68  61 72 74 79 70 65 25 28  |F%+1):chartype%(|
0002b410  46 25 29 3d 63 68 61 72  74 79 70 65 25 28 46 25  |F%)=chartype%(F%|
0002b420  2b 31 29 3a 66 69 78 25  28 46 25 29 3d 66 69 78  |+1):fix%(F%)=fix|
0002b430  25 28 46 25 2b 31 29 3a  63 61 6c 63 24 28 46 25  |%(F%+1):calc$(F%|
0002b440  29 3d 63 61 6c 63 24 28  46 25 2b 31 29 0d 18 75  |)=calc$(F%+1)..u|
0002b450  08 ed 20 46 25 0d 18 76  12 21 62 6c 6f 63 6b 25  |.. F%..v.!block%|
0002b460  3d 6d 61 69 6e 57 25 0d  18 77 24 c8 99 20 22 57  |=mainW%..w$.. "W|
0002b470  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
0002b480  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 18 78 3b 70  |te",,block%..x;p|
0002b490  6f 73 78 25 2d 3d 62 6c  6f 63 6b 25 21 32 30 2d  |osx%-=block%!20-|
0002b4a0  62 6c 6f 63 6b 25 21 34  3a 70 6f 73 79 25 2d 3d  |block%!4:posy%-=|
0002b4b0  62 6c 6f 63 6b 25 21 32  34 2d 62 6c 6f 63 6b 25  |block%!24-block%|
0002b4c0  21 31 36 2d 34 38 0d 18  79 42 c8 99 20 22 57 69  |!16-48..yB.. "Wi|
0002b4d0  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
0002b4e0  2d 31 2c 62 6c 6f 63 6b  25 21 34 2c 62 6c 6f 63  |-1,block%!4,bloc|
0002b4f0  6b 25 21 38 2c 62 6c 6f  63 6b 25 21 31 32 2c 62  |k%!8,block%!12,b|
0002b500  6c 6f 63 6b 25 21 31 36  0d 18 7a 05 e1 0d 18 7b  |lock%!16..z....{|
0002b510  05 3a 0d 18 7c 28 dd 20  f2 63 72 65 61 74 65 5f  |.:..|(. .create_|
0002b520  66 69 65 6c 64 28 42 65  66 6f 72 65 25 2c 78 25  |field(Before%,x%|
0002b530  2c 79 25 2c 43 61 6c 63  24 29 0d 18 7d 44 ea 20  |,y%,Calc$)..}D. |
0002b540  44 65 73 63 25 2c 46 69  65 6c 64 25 2c 46 25 2c  |Desc%,Field%,F%,|
0002b550  74 61 67 24 2c 4c 65 6e  25 2c 43 68 61 72 25 2c  |tag$,Len%,Char%,|
0002b560  46 25 2c 4c 25 2c 4c 46  25 2c 78 25 2c 79 25 2c  |F%,L%,LF%,x%,y%,|
0002b570  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 0d 18  |width%,height%..|
0002b580  7e 39 e7 20 66 69 65 6c  64 73 25 3d 4d 61 78 46  |~9. fields%=MaxF|
0002b590  69 65 6c 64 73 25 20 8c  20 f2 73 6f 66 74 65 72  |ields% . .softer|
0002b5a0  72 6f 72 28 c3 28 4d 61  78 46 69 65 6c 64 73 25  |ror(.(MaxFields%|
0002b5b0  29 2c 32 33 29 3a e1 0d  18 7f 36 e7 20 24 44 65  |),23):....6. $De|
0002b5c0  73 63 54 65 78 74 25 3d  22 22 20 80 20 24 54 61  |scText%="" . $Ta|
0002b5d0  67 54 65 78 74 25 3d 22  22 20 80 20 66 69 65 6c  |gText%="" . fiel|
0002b5e0  64 74 79 70 65 25 3c 3d  38 20 8c 20 e1 0d 18 80  |dtype%<=8 . ....|
0002b5f0  25 4c 25 3d a9 28 24 44  65 73 63 54 65 78 74 25  |%L%=.($DescText%|
0002b600  29 3a 4c 46 25 3d bb 28  24 4c 65 6e 54 65 78 74  |):LF%=.($LenText|
0002b610  25 29 0d 18 81 23 e7 20  4c 46 25 3e 32 34 36 20  |%)...#. LF%>246 |
0002b620  8c 20 f2 73 6f 66 74 65  72 72 6f 72 28 22 22 2c  |. .softerror("",|
0002b630  36 34 29 3a e1 0d 18 82  40 78 25 3d bb 28 24 62  |64):....@x%=.($b|
0002b640  6f 78 58 25 29 3a 79 25  3d bb 28 24 62 6f 78 59  |oxX%):y%=.($boxY|
0002b650  25 29 3a 77 69 64 74 68  25 3d bb 28 24 62 6f 78  |%):width%=.($box|
0002b660  57 25 29 3a 68 65 69 67  68 74 25 3d bb 28 24 62  |W%):height%=.($b|
0002b670  6f 78 48 25 29 0d 18 83  13 c8 8e 20 66 69 65 6c  |oxH%)...... fiel|
0002b680  64 74 79 70 65 25 20 ca  0d 18 84 11 20 20 c9 20  |dtype% .....  . |
0002b690  33 39 2c 34 30 2c 35 39  3a 0d 18 85 0b 20 20 4c  |39,40,59:....  L|
0002b6a0  46 25 3d 30 0d 18 86 1c  20 20 e7 20 77 69 64 74  |F%=0....  . widt|
0002b6b0  68 25 3d 30 20 8c 20 77  69 64 74 68 25 3d 34 38  |h%=0 . width%=48|
0002b6c0  0d 18 87 1e 20 20 e7 20  68 65 69 67 68 74 25 3d  |....  . height%=|
0002b6d0  30 20 8c 20 68 65 69 67  68 74 25 3d 34 38 0d 18  |0 . height%=48..|
0002b6e0  88 1c 20 20 c9 20 34 31  2c 34 32 2c 34 33 2c 34  |..  . 41,42,43,4|
0002b6f0  34 2c 34 35 3a 4c 46 25  3d 31 0d 18 89 15 20 20  |4,45:LF%=1....  |
0002b700  c9 20 38 2c 34 38 2c 35  30 3a 4c 46 25 3d 38 0d  |. 8,48,50:LF%=8.|
0002b710  18 8a 11 20 20 c9 20 34  39 3a 4c 46 25 3d 31 35  |...  . 49:LF%=15|
0002b720  0d 18 8b 11 20 20 c9 20  35 31 3a 4c 46 25 3d 31  |....  . 51:LF%=1|
0002b730  30 0d 18 8c 14 20 20 c9  20 35 32 2c 35 38 3a 4c  |0....  . 52,58:L|
0002b740  46 25 3d 32 34 0d 18 8d  13 20 20 c9 20 35 33 2c  |F%=24....  . 53,|
0002b750  35 35 3a 4c 46 25 3d 33  0d 18 8e 13 20 20 c9 20  |55:LF%=3....  . |
0002b760  35 34 2c 35 36 3a 4c 46  25 3d 32 0d 18 8f 10 20  |54,56:LF%=2.... |
0002b770  20 c9 20 35 37 3a 4c 46  25 3d 34 0d 18 90 05 cb  | . 57:LF%=4.....|
0002b780  0d 18 91 30 e7 20 4c 46  25 3e 30 20 80 20 24 54  |...0. LF%>0 . $T|
0002b790  61 67 54 65 78 74 25 3d  22 22 20 8c 20 f2 73 6f  |agText%="" . .so|
0002b7a0  66 74 65 72 72 6f 72 28  22 22 2c 31 36 29 3a e1  |fterror("",16):.|
0002b7b0  0d 18 92 0b f5 20 46 25  2b 3d 31 0d 18 93 25 fd  |..... F%+=1...%.|
0002b7c0  20 24 54 61 67 54 65 78  74 25 3d 54 61 67 24 28  | $TagText%=Tag$(|
0002b7d0  46 25 29 20 84 20 46 25  3e 66 69 65 6c 64 73 25  |F%) . F%>fields%|
0002b7e0  0d 18 94 37 e7 20 46 25  3c 3d 66 69 65 6c 64 73  |...7. F%<=fields|
0002b7f0  25 20 80 20 24 54 61 67  54 65 78 74 25 3c 3e 22  |% . $TagText%<>"|
0002b800  22 20 8c 20 f2 73 6f 66  74 65 72 72 6f 72 28 22  |" . .softerror("|
0002b810  22 2c 32 30 29 3a e1 0d  18 95 38 66 69 65 6c 64  |",20):....8field|
0002b820  73 25 2b 3d 31 3a 54 61  67 24 28 66 69 65 6c 64  |s%+=1:Tag$(field|
0002b830  73 25 29 3d 24 54 61 67  54 65 78 74 25 3a 6c 65  |s%)=$TagText%:le|
0002b840  6e 25 28 66 69 65 6c 64  73 25 29 3d 4c 46 25 0d  |n%(fields%)=LF%.|
0002b850  18 96 20 e7 20 77 69 64  74 68 25 3d 30 20 80 20  |.. . width%=0 . |
0002b860  24 54 61 67 54 65 78 74  25 3c 3e 22 22 20 8c 0d  |$TagText%<>"" ..|
0002b870  18 97 47 20 20 e7 20 6c  65 6e 25 28 66 69 65 6c  |..G  . len%(fiel|
0002b880  64 73 25 29 3c 37 30 20  8c 20 77 69 64 74 68 25  |ds%)<70 . width%|
0002b890  3d 6c 65 6e 25 28 66 69  65 6c 64 73 25 29 2a 31  |=len%(fields%)*1|
0002b8a0  36 2b 31 36 20 8b 20 77  69 64 74 68 25 3d 37 30  |6+16 . width%=70|
0002b8b0  2a 31 36 2b 31 36 0d 18  98 05 cd 0d 18 99 27 e7  |*16+16........'.|
0002b8c0  20 68 65 69 67 68 74 25  3d 30 20 80 20 77 69 64  | height%=0 . wid|
0002b8d0  74 68 25 3e 30 20 8c 20  68 65 69 67 68 74 25 3d  |th%>0 . height%=|
0002b8e0  34 38 0d 18 9a 21 63 68  61 72 74 79 70 65 25 28  |48...!chartype%(|
0002b8f0  66 69 65 6c 64 73 25 29  3d 66 69 65 6c 64 74 79  |fields%)=fieldty|
0002b900  70 65 25 0d 18 9b 49 e7  20 a4 73 65 6c 65 63 74  |pe%...I. .select|
0002b910  65 64 28 63 72 65 61 74  65 57 25 2c 31 34 29 20  |ed(createW%,14) |
0002b920  8c 20 66 69 78 25 28 66  69 65 6c 64 73 25 29 3d  |. fix%(fields%)=|
0002b930  bb 28 24 46 69 78 70 74  25 29 20 8b 20 66 69 78  |.($Fixpt%) . fix|
0002b940  25 28 66 69 65 6c 64 73  25 29 3d 30 0d 18 9c 44  |%(fields%)=0...D|
0002b950  f2 65 78 74 65 6e 64 5f  6e 61 6d 65 64 5f 73 6c  |.extend_named_sl|
0002b960  69 64 69 6e 67 5f 62 6c  6f 63 6b 28 66 6f 72 6d  |iding_block(form|
0002b970  61 6e 63 68 6f 72 25 2c  46 70 74 72 25 2d 21 66  |anchor%,Fptr%-!f|
0002b980  6f 72 6d 61 6e 63 68 6f  72 25 2b 4c 25 2b 36 29  |ormanchor%+L%+6)|
0002b990  0d 18 9d 6b 64 65 73 63  25 28 66 69 65 6c 64 73  |...kdesc%(fields|
0002b9a0  25 29 3d a4 63 72 65 61  74 65 5f 69 63 6f 6e 28  |%)=.create_icon(|
0002b9b0  6d 61 69 6e 57 25 2c 78  25 2d 4c 25 2a 31 36 2d  |mainW%,x%-L%*16-|
0002b9c0  31 36 2c 79 25 2c 4c 25  2a 31 36 2b 38 2c 34 38  |16,y%,L%*16+8,48|
0002b9d0  2c 28 77 69 6e 62 61 63  6b 25 3c 3c 32 38 29 2b  |,(winback%<<28)+|
0002b9e0  26 37 30 31 36 37 33 31  2c 22 22 2c 46 70 74 72  |&7016731,"",Fptr|
0002b9f0  25 2c 68 61 6e 64 25 2c  4c 25 29 0d 18 9e 21 24  |%,hand%,L%)...!$|
0002ba00  46 70 74 72 25 3d 24 44  65 73 63 54 65 78 74 25  |Fptr%=$DescText%|
0002ba10  3a 46 70 74 72 25 2b 3d  4c 25 2b 31 0d 18 9f 0d  |:Fptr%+=L%+1....|
0002ba20  24 46 70 74 72 25 3d 22  22 0d 18 a0 13 c8 8e 20  |$Fptr%=""...... |
0002ba30  66 69 65 6c 64 74 79 70  65 25 20 ca 0d 18 a1 0a  |fieldtype% .....|
0002ba40  20 20 c9 20 33 3a 0d 18  a2 1e 20 20 6d 69 6e 24  |  . 3:....  min$|
0002ba50  3d 24 a4 74 65 78 74 28  63 72 65 61 74 65 57 25  |=$.text(createW%|
0002ba60  2c 31 35 29 0d 18 a3 1e  20 20 6d 61 78 24 3d 24  |,15)....  max$=$|
0002ba70  a4 74 65 78 74 28 63 72  65 61 74 65 57 25 2c 32  |.text(createW%,2|
0002ba80  35 29 0d 18 a4 4c 20 20  e7 20 6d 69 6e 24 3c 3e  |5)...L  . min$<>|
0002ba90  22 22 20 84 20 6d 61 78  24 3c 3e 22 22 20 8c 20  |"" . max$<>"" . |
0002baa0  63 61 6c 63 24 28 66 69  65 6c 64 73 25 29 3d 6d  |calc$(fields%)=m|
0002bab0  69 6e 24 2b 22 7c 22 2b  6d 61 78 24 3a 63 61 6c  |in$+"|"+max$:cal|
0002bac0  63 24 28 30 29 3d 22 4c  4f 41 44 45 44 22 0d 18  |c$(0)="LOADED"..|
0002bad0  a5 0b 20 20 c9 20 34 37  3a 0d 18 a6 33 20 20 6d  |..  . 47:...3  m|
0002bae0  69 6e 24 3d 24 a4 74 65  78 74 28 63 72 65 61 74  |in$=$.text(creat|
0002baf0  65 57 25 2c 31 35 29 3a  e7 20 6d 69 6e 24 3d 22  |eW%,15):. min$="|
0002bb00  22 20 8c 20 6d 69 6e 24  3d 22 30 22 0d 18 a7 34  |" . min$="0"...4|
0002bb10  20 20 63 61 6c 63 24 28  66 69 65 6c 64 73 25 29  |  calc$(fields%)|
0002bb20  3d 6d 69 6e 24 2b 22 7c  22 2b 6d 69 6e 24 3a 63  |=min$+"|"+min$:c|
0002bb30  61 6c 63 24 28 30 29 3d  22 4c 4f 41 44 45 44 22  |alc$(0)="LOADED"|
0002bb40  0d 18 a8 05 cb 0d 18 a9  13 c8 8e 20 66 69 65 6c  |........... fiel|
0002bb50  64 74 79 70 65 25 20 ca  0d 18 aa 51 20 20 c9 20  |dtype% ....Q  . |
0002bb60  30 2c 31 2c 32 2c 33 2c  34 2c 35 2c 36 2c 37 2c  |0,1,2,3,4,5,6,7,|
0002bb70  38 2c 33 39 2c 34 30 2c  34 36 2c 34 37 2c 34 38  |8,39,40,46,47,48|
0002bb80  2c 34 39 2c 35 30 2c 35  31 2c 35 32 2c 35 33 2c  |,49,50,51,52,53,|
0002bb90  35 34 2c 35 35 2c 35 36  2c 35 37 3a 76 61 6c 70  |54,55,56,57:valp|
0002bba0  74 72 25 3d 68 61 6e 64  25 0d 18 ab 23 20 20 7f  |tr%=hand%...#  .|
0002bbb0  3a 76 61 6c 70 74 72 25  3d 68 76 61 6c 69 64 25  |:valptr%=hvalid%|
0002bbc0  28 66 69 65 6c 64 74 79  70 65 25 29 0d 18 ac 05  |(fieldtype%)....|
0002bbd0  cb 0d 18 ad 2d f2 69 63  6f 6e 5f 64 65 73 69 67  |....-.icon_desig|
0002bbe0  6e 28 66 69 65 6c 64 74  79 70 65 25 2c 31 2c 77  |n(fieldtype%,1,w|
0002bbf0  69 64 74 68 25 2c 68 65  69 67 68 74 25 29 0d 18  |idth%,height%)..|
0002bc00  ae 58 66 69 65 6c 64 25  28 66 69 65 6c 64 73 25  |.Xfield%(fields%|
0002bc10  29 3d a4 63 72 65 61 74  65 5f 69 63 6f 6e 28 6d  |)=.create_icon(m|
0002bc20  61 69 6e 57 25 2c 78 25  2c 79 25 2c 77 69 64 74  |ainW%,x%,y%,widt|
0002bc30  68 25 2c 68 65 69 67 68  74 25 2c 69 66 6c 61 67  |h%,height%,iflag|
0002bc40  73 25 2c 22 22 2c 46 70  74 72 25 2c 76 61 6c 70  |s%,"",Fptr%,valp|
0002bc50  74 72 25 2c 34 29 0d 18  af 47 e7 20 66 69 65 6c  |tr%,4)...G. fiel|
0002bc60  64 74 79 70 65 25 3d 34  30 20 8c 20 52 66 25 28  |dtype%=40 . Rf%(|
0002bc70  66 69 65 6c 64 73 25 29  3d a4 63 72 65 61 74 65  |fields%)=.create|
0002bc80  5f 61 6e 63 68 6f 72 28  22 50 69 63 74 75 72 65  |_anchor("Picture|
0002bc90  22 2b c3 28 66 69 65 6c  64 73 25 29 29 0d 18 b0  |"+.(fields%))...|
0002bca0  0c 46 70 74 72 25 2b 3d  35 0d 18 b1 4c f2 72 65  |.Fptr%+=5...L.re|
0002bcb0  64 72 61 77 5f 69 63 6f  6e 28 6d 61 69 6e 57 25  |draw_icon(mainW%|
0002bcc0  2c 64 65 73 63 25 28 66  69 65 6c 64 73 25 29 29  |,desc%(fields%))|
0002bcd0  3a f2 72 65 64 72 61 77  5f 69 63 6f 6e 28 6d 61  |:.redraw_icon(ma|
0002bce0  69 6e 57 25 2c 66 69 65  6c 64 25 28 66 69 65 6c  |inW%,field%(fiel|
0002bcf0  64 73 25 29 29 0d 18 b2  44 e7 20 42 65 66 6f 72  |ds%))...D. Befor|
0002bd00  65 25 3c 66 69 65 6c 64  73 25 20 80 20 42 65 66  |e%<fields% . Bef|
0002bd10  6f 72 65 25 3e 30 20 8c  20 f2 72 65 5f 73 65 71  |ore%>0 . .re_seq|
0002bd20  75 65 6e 63 65 28 66 69  65 6c 64 73 25 2c 42 65  |uence(fields%,Be|
0002bd30  66 6f 72 65 25 2c 2d 31  29 0d 18 b3 05 e1 0d 18  |fore%,-1).......|
0002bd40  b4 05 3a 0d 18 b5 17 dd  20 f2 61 64 6a 75 73 74  |..:..... .adjust|
0002bd50  5f 66 69 65 6c 64 28 62  25 29 0d 18 b6 11 ea 20  |_field(b%)..... |
0002bd60  44 70 74 72 25 2c 46 70  74 72 25 0d 18 b7 24 c8  |Dptr%,Fptr%...$.|
0002bd70  99 20 22 57 69 6d 70 5f  47 65 74 50 6f 69 6e 74  |. "Wimp_GetPoint|
0002bd80  65 72 49 6e 66 6f 22 2c  2c 62 6c 6f 63 6b 25 0d  |erInfo",,block%.|
0002bd90  18 b8 20 6e 65 77 78 25  3d 21 62 6c 6f 63 6b 25  |.. newx%=!block%|
0002bda0  3a 6e 65 77 79 25 3d 62  6c 6f 63 6b 25 21 34 0d  |:newy%=block%!4.|
0002bdb0  18 b9 23 46 69 65 6c 64  6e 75 6d 62 65 72 25 3d  |..#Fieldnumber%=|
0002bdc0  a4 67 65 74 5f 66 69 65  6c 64 28 66 69 63 6f 6e  |.get_field(ficon|
0002bdd0  25 29 0d 18 ba 16 e7 20  28 66 69 63 6f 6e 25 20  |%)..... (ficon% |
0002bde0  83 20 32 29 3d 30 20 8c  0d 18 bb 43 20 20 21 62  |. 2)=0 ....C  !b|
0002bdf0  6c 6f 63 6b 25 3d 6d 61  69 6e 57 25 3a 62 6c 6f  |lock%=mainW%:blo|
0002be00  63 6b 25 21 34 3d 66 69  63 6f 6e 25 3a c8 99 20  |ck%!4=ficon%:.. |
0002be10  22 57 69 6d 70 5f 47 65  74 49 63 6f 6e 53 74 61  |"Wimp_GetIconSta|
0002be20  74 65 22 2c 2c 62 6c 6f  63 6b 25 0d 18 bc 2e 20  |te",,block%.... |
0002be30  20 44 70 74 72 25 3d 62  6c 6f 63 6b 25 21 32 38  | Dptr%=block%!28|
0002be40  3a 44 65 73 63 24 3d 24  44 70 74 72 25 3a 4c 25  |:Desc$=$Dptr%:L%|
0002be50  3d a9 28 44 65 73 63 24  29 0d 18 bd 22 20 20 c8  |=.(Desc$)..."  .|
0002be60  99 20 22 57 69 6d 70 5f  44 65 6c 65 74 65 49 63  |. "Wimp_DeleteIc|
0002be70  6f 6e 22 2c 2c 62 6c 6f  63 6b 25 0d 18 be 26 20  |on",,block%...& |
0002be80  20 c8 99 20 22 57 69 6d  70 5f 47 65 74 57 69 6e  | .. "Wimp_GetWin|
0002be90  64 6f 77 53 74 61 74 65  22 2c 2c 62 6c 6f 63 6b  |dowState",,block|
0002bea0  25 0d 18 bf 2d 20 20 78  25 3d 62 6c 6f 63 6b 25  |%...-  x%=block%|
0002beb0  21 32 30 2d 62 6c 6f 63  6b 25 21 34 2b 6e 65 77  |!20-block%!4+new|
0002bec0  78 25 2d 6f 6c 64 78 25  2b 6d 69 6e 78 25 0d 18  |x%-oldx%+minx%..|
0002bed0  c0 2e 20 20 79 25 3d 62  6c 6f 63 6b 25 21 32 34  |..  y%=block%!24|
0002bee0  2d 62 6c 6f 63 6b 25 21  31 36 2b 6d 69 6e 79 25  |-block%!16+miny%|
0002bef0  2b 6e 65 77 79 25 2d 6f  6c 64 79 25 0d 18 c1 5b  |+newy%-oldy%...[|
0002bf00  20 20 64 65 73 63 25 28  46 69 65 6c 64 6e 75 6d  |  desc%(Fieldnum|
0002bf10  62 65 72 25 29 3d a4 63  72 65 61 74 65 5f 69 63  |ber%)=.create_ic|
0002bf20  6f 6e 28 6d 61 69 6e 57  25 2c 78 25 2c 79 25 2c  |on(mainW%,x%,y%,|
0002bf30  4c 25 2a 31 36 2b 38 2c  34 38 2c 26 31 37 30 31  |L%*16+8,48,&1701|
0002bf40  36 37 33 31 2c 22 22 2c  44 70 74 72 25 2c 68 61  |6731,"",Dptr%,ha|
0002bf50  6e 64 25 2c 4c 25 29 0d  18 c2 07 20 20 cc 0d 18  |nd%,L%)....  ...|
0002bf60  c3 43 20 20 21 62 6c 6f  63 6b 25 3d 6d 61 69 6e  |.C  !block%=main|
0002bf70  57 25 3a 62 6c 6f 63 6b  25 21 34 3d 66 69 63 6f  |W%:block%!4=fico|
0002bf80  6e 25 3a c8 99 20 22 57  69 6d 70 5f 47 65 74 49  |n%:.. "Wimp_GetI|
0002bf90  63 6f 6e 53 74 61 74 65  22 2c 2c 62 6c 6f 63 6b  |conState",,block|
0002bfa0  25 0d 18 c4 15 20 20 46  70 74 72 25 3d 62 6c 6f  |%....  Fptr%=blo|
0002bfb0  63 6b 25 21 32 38 0d 18  c5 0d 20 20 c8 8e 20 62  |ck%!28....  .. b|
0002bfc0  25 20 ca 0d 18 c6 0d 20  20 20 20 c9 20 31 36 3a  |% .....    . 16:|
0002bfd0  0d 18 c7 24 20 20 20 20  c8 99 20 22 57 69 6d 70  |...$    .. "Wimp|
0002bfe0  5f 44 65 6c 65 74 65 49  63 6f 6e 22 2c 2c 62 6c  |_DeleteIcon",,bl|
0002bff0  6f 63 6b 25 0d 18 c8 28  20 20 20 20 c8 99 20 22  |ock%...(    .. "|
0002c000  57 69 6d 70 5f 47 65 74  57 69 6e 64 6f 77 53 74  |Wimp_GetWindowSt|
0002c010  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 18 c9 23  |ate",,block%...#|
0002c020  20 20 20 20 78 25 3d 62  6c 6f 63 6b 25 21 32 30  |    x%=block%!20|
0002c030  2d 62 6c 6f 63 6b 25 21  34 2b 6d 69 6e 78 25 0d  |-block%!4+minx%.|
0002c040  18 ca 30 20 20 20 20 79  25 3d 62 6c 6f 63 6b 25  |..0    y%=block%|
0002c050  21 32 34 2d 62 6c 6f 63  6b 25 21 31 36 2b 6d 69  |!24-block%!16+mi|
0002c060  6e 79 25 2b 6e 65 77 79  25 2d 6f 6c 64 79 25 0d  |ny%+newy%-oldy%.|
0002c070  18 cb 46 20 20 20 20 77  69 64 74 68 25 3d 6d 61  |..F    width%=ma|
0002c080  78 78 25 2d 6d 69 6e 78  25 2b 6e 65 77 78 25 2d  |xx%-minx%+newx%-|
0002c090  6f 6c 64 78 25 3a 68 65  69 67 68 74 25 3d 6d 61  |oldx%:height%=ma|
0002c0a0  78 79 25 2d 6d 69 6e 79  25 2b 6f 6c 64 79 25 2d  |xy%-miny%+oldy%-|
0002c0b0  6e 65 77 79 25 0d 18 cc  0d 20 20 20 20 c9 20 36  |newy%....    . 6|
0002c0c0  34 3a 0d 18 cd 47 20 20  20 20 21 62 6c 6f 63 6b  |4:...G    !block|
0002c0d0  25 3d 6d 61 69 6e 57 25  3a 62 6c 6f 63 6b 25 21  |%=mainW%:block%!|
0002c0e0  34 3d 66 69 63 6f 6e 25  2d 31 3a c8 99 20 22 57  |4=ficon%-1:.. "W|
0002c0f0  69 6d 70 5f 47 65 74 49  63 6f 6e 53 74 61 74 65  |imp_GetIconState|
0002c100  22 2c 2c 62 6c 6f 63 6b  25 0d 18 ce 30 20 20 20  |",,block%...0   |
0002c110  20 44 70 74 72 25 3d 62  6c 6f 63 6b 25 21 32 38  | Dptr%=block%!28|
0002c120  3a 44 65 73 63 24 3d 24  44 70 74 72 25 3a 4c 25  |:Desc$=$Dptr%:L%|
0002c130  3d a9 28 44 65 73 63 24  29 0d 18 cf 24 20 20 20  |=.(Desc$)...$   |
0002c140  20 c8 99 20 22 57 69 6d  70 5f 44 65 6c 65 74 65  | .. "Wimp_Delete|
0002c150  49 63 6f 6e 22 2c 2c 62  6c 6f 63 6b 25 0d 18 d0  |Icon",,block%...|
0002c160  43 20 20 20 20 21 62 6c  6f 63 6b 25 3d 6d 61 69  |C    !block%=mai|
0002c170  6e 57 25 3a 62 6c 6f 63  6b 25 21 34 3d 66 69 63  |nW%:block%!4=fic|
0002c180  6f 6e 25 3a c8 99 20 22  57 69 6d 70 5f 44 65 6c  |on%:.. "Wimp_Del|
0002c190  65 74 65 49 63 6f 6e 22  2c 2c 62 6c 6f 63 6b 25  |eteIcon",,block%|
0002c1a0  0d 18 d1 28 20 20 20 20  c8 99 20 22 57 69 6d 70  |...(    .. "Wimp|
0002c1b0  5f 47 65 74 57 69 6e 64  6f 77 53 74 61 74 65 22  |_GetWindowState"|
0002c1c0  2c 2c 62 6c 6f 63 6b 25  0d 18 d2 38 20 20 20 20  |,,block%...8    |
0002c1d0  78 25 3d 62 6c 6f 63 6b  25 21 32 30 2d 62 6c 6f  |x%=block%!20-blo|
0002c1e0  63 6b 25 21 34 2b 6e 65  77 78 25 2d 6f 6c 64 78  |ck%!4+newx%-oldx|
0002c1f0  25 2b 6d 69 6e 78 25 2d  4c 25 2a 31 36 2d 31 36  |%+minx%-L%*16-16|
0002c200  0d 18 d3 30 20 20 20 20  79 25 3d 62 6c 6f 63 6b  |...0    y%=block|
0002c210  25 21 32 34 2d 62 6c 6f  63 6b 25 21 31 36 2b 6d  |%!24-block%!16+m|
0002c220  69 6e 79 25 2b 6e 65 77  79 25 2d 6f 6c 64 79 25  |iny%+newy%-oldy%|
0002c230  0d 18 d4 6b 20 20 20 20  64 65 73 63 25 28 46 69  |...k    desc%(Fi|
0002c240  65 6c 64 6e 75 6d 62 65  72 25 29 3d a4 63 72 65  |eldnumber%)=.cre|
0002c250  61 74 65 5f 69 63 6f 6e  28 6d 61 69 6e 57 25 2c  |ate_icon(mainW%,|
0002c260  78 25 2c 79 25 2c 4c 25  2a 31 36 2b 38 2c 34 38  |x%,y%,L%*16+8,48|
0002c270  2c 28 77 69 6e 62 61 63  6b 25 3c 3c 32 38 29 2b  |,(winback%<<28)+|
0002c280  26 37 30 31 36 37 33 31  2c 22 22 2c 44 70 74 72  |&7016731,"",Dptr|
0002c290  25 2c 68 61 6e 64 25 2c  4c 25 29 0d 18 d5 28 20  |%,hand%,L%)...( |
0002c2a0  20 20 20 c8 99 20 22 57  69 6d 70 5f 47 65 74 57  |   .. "Wimp_GetW|
0002c2b0  69 6e 64 6f 77 53 74 61  74 65 22 2c 2c 62 6c 6f  |indowState",,blo|
0002c2c0  63 6b 25 0d 18 d6 2f 20  20 20 20 78 25 3d 62 6c  |ck%.../    x%=bl|
0002c2d0  6f 63 6b 25 21 32 30 2d  62 6c 6f 63 6b 25 21 34  |ock%!20-block%!4|
0002c2e0  2b 6e 65 77 78 25 2d 6f  6c 64 78 25 2b 6d 69 6e  |+newx%-oldx%+min|
0002c2f0  78 25 0d 18 d7 30 20 20  20 20 79 25 3d 62 6c 6f  |x%...0    y%=blo|
0002c300  63 6b 25 21 32 34 2d 62  6c 6f 63 6b 25 21 31 36  |ck%!24-block%!16|
0002c310  2b 6d 69 6e 79 25 2b 6e  65 77 79 25 2d 6f 6c 64  |+miny%+newy%-old|
0002c320  79 25 0d 18 d8 2e 20 20  20 20 77 69 64 74 68 25  |y%....    width%|
0002c330  3d 6d 61 78 78 25 2d 6d  69 6e 78 25 3a 68 65 69  |=maxx%-minx%:hei|
0002c340  67 68 74 25 3d 6d 61 78  79 25 2d 6d 69 6e 79 25  |ght%=maxy%-miny%|
0002c350  0d 18 d9 07 20 20 cb 0d  18 da 28 20 20 66 69 65  |....  ....(  fie|
0002c360  6c 64 74 79 70 65 25 3d  63 68 61 72 74 79 70 65  |ldtype%=chartype|
0002c370  25 28 46 69 65 6c 64 6e  75 6d 62 65 72 25 29 0d  |%(Fieldnumber%).|
0002c380  18 db 15 20 20 c8 8e 20  66 69 65 6c 64 74 79 70  |...  .. fieldtyp|
0002c390  65 25 20 ca 0d 18 dc 56  20 20 20 20 c9 20 30 2c  |e% ....V    . 0,|
0002c3a0  31 2c 32 2c 33 2c 34 2c  35 2c 36 2c 37 2c 38 2c  |1,2,3,4,5,6,7,8,|
0002c3b0  33 39 2c 34 30 2c 34 36  2c 34 37 2c 34 38 2c 34  |39,40,46,47,48,4|
0002c3c0  39 2c 35 30 2c 35 31 2c  35 32 2c 35 33 2c 35 34  |9,50,51,52,53,54|
0002c3d0  2c 35 35 2c 35 36 2c 35  37 2c 35 38 3a 76 61 6c  |,55,56,57,58:val|
0002c3e0  70 74 72 25 3d 68 61 6e  64 25 0d 18 dd 21 20 20  |ptr%=hand%...!  |
0002c3f0  20 20 c9 20 35 39 3a 76  61 6c 70 74 72 25 3d 21  |  . 59:valptr%=!|
0002c400  6c 6f 67 6f 61 6e 63 68  6f 72 25 0d 18 de 25 20  |logoanchor%...% |
0002c410  20 20 20 7f 3a 76 61 6c  70 74 72 25 3d 68 76 61  |   .:valptr%=hva|
0002c420  6c 69 64 25 28 66 69 65  6c 64 74 79 70 65 25 29  |lid%(fieldtype%)|
0002c430  0d 18 df 07 20 20 cb 0d  18 e0 2f 20 20 f2 69 63  |....  ..../  .ic|
0002c440  6f 6e 5f 64 65 73 69 67  6e 28 66 69 65 6c 64 74  |on_design(fieldt|
0002c450  79 70 65 25 2c 31 2c 77  69 64 74 68 25 2c 68 65  |ype%,1,width%,he|
0002c460  69 67 68 74 25 29 0d 18  e1 5f 20 20 66 69 65 6c  |ight%)..._  fiel|
0002c470  64 25 28 46 69 65 6c 64  6e 75 6d 62 65 72 25 29  |d%(Fieldnumber%)|
0002c480  3d a4 63 72 65 61 74 65  5f 69 63 6f 6e 28 6d 61  |=.create_icon(ma|
0002c490  69 6e 57 25 2c 78 25 2c  79 25 2c 77 69 64 74 68  |inW%,x%,y%,width|
0002c4a0  25 2c 68 65 69 67 68 74  25 2c 69 66 6c 61 67 73  |%,height%,iflags|
0002c4b0  25 2c 22 22 2c 46 70 74  72 25 2c 76 61 6c 70 74  |%,"",Fptr%,valpt|
0002c4c0  72 25 2c 34 29 0d 18 e2  53 20 20 e7 20 66 69 65  |r%,4)...S  . fie|
0002c4d0  6c 64 74 79 70 65 25 3d  34 30 20 8c 20 52 66 25  |ldtype%=40 . Rf%|
0002c4e0  28 46 69 65 6c 64 6e 75  6d 62 65 72 25 29 3d a4  |(Fieldnumber%)=.|
0002c4f0  63 72 65 61 74 65 5f 61  6e 63 68 6f 72 28 22 50  |create_anchor("P|
0002c500  69 63 74 75 72 65 22 2b  c3 28 46 69 65 6c 64 6e  |icture"+.(Fieldn|
0002c510  75 6d 62 65 72 25 29 29  0d 18 e3 05 cd 0d 18 e4  |umber%))........|
0002c520  40 24 62 6f 78 58 25 3d  c3 28 78 25 29 3a 24 62  |@$boxX%=.(x%):$b|
0002c530  6f 78 59 25 3d c3 28 79  25 29 3a 24 62 6f 78 57  |oxY%=.(y%):$boxW|
0002c540  25 3d c3 28 77 69 64 74  68 25 29 3a 24 62 6f 78  |%=.(width%):$box|
0002c550  48 25 3d c3 28 68 65 69  67 68 74 25 29 0d 18 e5  |H%=.(height%)...|
0002c560  12 21 62 6c 6f 63 6b 25  3d 6d 61 69 6e 57 25 0d  |.!block%=mainW%.|
0002c570  18 e6 24 c8 99 20 22 57  69 6d 70 5f 47 65 74 57  |..$.. "Wimp_GetW|
0002c580  69 6e 64 6f 77 53 74 61  74 65 22 2c 2c 62 6c 6f  |indowState",,blo|
0002c590  63 6b 25 0d 18 e7 42 c8  99 20 22 57 69 6d 70 5f  |ck%...B.. "Wimp_|
0002c5a0  46 6f 72 63 65 52 65 64  72 61 77 22 2c 2d 31 2c  |ForceRedraw",-1,|
0002c5b0  62 6c 6f 63 6b 25 21 34  2c 62 6c 6f 63 6b 25 21  |block%!4,block%!|
0002c5c0  38 2c 62 6c 6f 63 6b 25  21 31 32 2c 62 6c 6f 63  |8,block%!12,bloc|
0002c5d0  6b 25 21 31 36 0d 18 e8  05 e1 0d 18 e9 05 3a 0d  |k%!16.........:.|
0002c5e0  18 ea 1b dd 20 f2 73 77  61 70 5f 66 69 65 6c 64  |.... .swap_field|
0002c5f0  73 28 46 31 25 2c 46 32  25 29 0d 18 eb 1c e7 20  |s(F1%,F2%)..... |
0002c600  46 32 25 3e 30 20 80 20  46 32 25 3c 3d 66 69 65  |F2%>0 . F2%<=fie|
0002c610  6c 64 73 25 20 8c 0d 18  ec 1e 20 20 c8 94 20 64  |lds% .....  .. d|
0002c620  65 73 63 25 28 46 31 25  29 2c 64 65 73 63 25 28  |esc%(F1%),desc%(|
0002c630  46 32 25 29 0d 18 ed 1c  20 20 c8 94 20 54 61 67  |F2%)....  .. Tag|
0002c640  24 28 46 31 25 29 2c 54  61 67 24 28 46 32 25 29  |$(F1%),Tag$(F2%)|
0002c650  0d 18 ee 20 20 20 c8 94  20 66 69 65 6c 64 25 28  |...   .. field%(|
0002c660  46 31 25 29 2c 66 69 65  6c 64 25 28 46 32 25 29  |F1%),field%(F2%)|
0002c670  0d 18 ef 1c 20 20 c8 94  20 6c 65 6e 25 28 46 31  |....  .. len%(F1|
0002c680  25 29 2c 6c 65 6e 25 28  46 32 25 29 0d 18 f0 26  |%),len%(F2%)...&|
0002c690  20 20 c8 94 20 63 68 61  72 74 79 70 65 25 28 46  |  .. chartype%(F|
0002c6a0  31 25 29 2c 63 68 61 72  74 79 70 65 25 28 46 32  |1%),chartype%(F2|
0002c6b0  25 29 0d 18 f1 1c 20 20  c8 94 20 66 69 78 25 28  |%)....  .. fix%(|
0002c6c0  46 31 25 29 2c 66 69 78  25 28 46 32 25 29 0d 18  |F1%),fix%(F2%)..|
0002c6d0  f2 1e 20 20 c8 94 20 63  61 6c 63 24 28 46 31 25  |..  .. calc$(F1%|
0002c6e0  29 2c 63 61 6c 63 24 28  46 32 25 29 0d 18 f3 1d  |),calc$(F2%)....|
0002c6f0  20 20 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |  .close_window(|
0002c700  63 72 65 61 74 65 57 25  29 0d 18 f4 05 cd 0d 18  |createW%).......|
0002c710  f5 05 e1 0d 18 f6 05 3a  0d 18 f7 1e dd 20 f2 72  |.......:..... .r|
0002c720  65 5f 73 65 71 75 65 6e  63 65 28 46 31 25 2c 46  |e_sequence(F1%,F|
0002c730  32 25 2c 5a 25 29 0d 18  f8 77 44 25 3d 64 65 73  |2%,Z%)...wD%=des|
0002c740  63 25 28 46 31 25 29 3a  54 24 3d 54 61 67 24 28  |c%(F1%):T$=Tag$(|
0002c750  46 31 25 29 3a 46 25 3d  66 69 65 6c 64 25 28 46  |F1%):F%=field%(F|
0002c760  31 25 29 3a 4c 25 3d 6c  65 6e 25 28 46 31 25 29  |1%):L%=len%(F1%)|
0002c770  3a 43 25 3d 63 68 61 72  74 79 70 65 25 28 46 31  |:C%=chartype%(F1|
0002c780  25 29 3a 66 25 3d 66 69  78 25 28 46 31 25 29 3a  |%):f%=fix%(F1%):|
0002c790  e7 20 43 61 6c 63 24 3d  22 22 20 8c 20 43 61 6c  |. Calc$="" . Cal|
0002c7a0  63 24 3d 63 61 6c 63 24  28 46 31 25 29 0d 18 f9  |c$=calc$(F1%)...|
0002c7b0  1a e3 20 49 25 3d 46 31  25 2b 5a 25 20 b8 20 46  |.. I%=F1%+Z% . F|
0002c7c0  32 25 20 88 20 5a 25 0d  18 fa aa 20 20 64 65 73  |2% . Z%....  des|
0002c7d0  63 25 28 49 25 2d 5a 25  29 3d 64 65 73 63 25 28  |c%(I%-Z%)=desc%(|
0002c7e0  49 25 29 3a 54 61 67 24  28 49 25 2d 5a 25 29 3d  |I%):Tag$(I%-Z%)=|
0002c7f0  54 61 67 24 28 49 25 29  3a 66 69 65 6c 64 25 28  |Tag$(I%):field%(|
0002c800  49 25 2d 5a 25 29 3d 66  69 65 6c 64 25 28 49 25  |I%-Z%)=field%(I%|
0002c810  29 3a 6c 65 6e 25 28 49  25 2d 5a 25 29 3d 6c 65  |):len%(I%-Z%)=le|
0002c820  6e 25 28 49 25 29 3a 63  68 61 72 74 79 70 65 25  |n%(I%):chartype%|
0002c830  28 49 25 2d 5a 25 29 3d  63 68 61 72 74 79 70 65  |(I%-Z%)=chartype|
0002c840  25 28 49 25 29 3a 66 69  78 25 28 49 25 2d 5a 25  |%(I%):fix%(I%-Z%|
0002c850  29 3d 66 69 78 25 28 49  25 29 3a 63 61 6c 63 24  |)=fix%(I%):calc$|
0002c860  28 49 25 2d 5a 25 29 3d  63 61 6c 63 24 28 49 25  |(I%-Z%)=calc$(I%|
0002c870  29 0d 18 fb 08 ed 20 49  25 0d 18 fc 6a 64 65 73  |)..... I%...jdes|
0002c880  63 25 28 46 32 25 29 3d  44 25 3a 54 61 67 24 28  |c%(F2%)=D%:Tag$(|
0002c890  46 32 25 29 3d 54 24 3a  66 69 65 6c 64 25 28 46  |F2%)=T$:field%(F|
0002c8a0  32 25 29 3d 46 25 3a 6c  65 6e 25 28 46 32 25 29  |2%)=F%:len%(F2%)|
0002c8b0  3d 4c 25 3a 63 68 61 72  74 79 70 65 25 28 46 32  |=L%:chartype%(F2|
0002c8c0  25 29 3d 43 25 3a 66 69  78 25 28 46 32 25 29 3d  |%)=C%:fix%(F2%)=|
0002c8d0  66 25 3a 63 61 6c 63 24  28 46 32 25 29 3d 43 61  |f%:calc$(F2%)=Ca|
0002c8e0  6c 63 24 0d 18 fd 05 e1  0d 18 fe 05 3a 0d 18 ff  |lc$.........:...|
0002c8f0  29 dd 20 f2 69 63 6f 6e  5f 64 65 73 69 67 6e 28  |). .icon_design(|
0002c900  63 68 61 72 25 2c 66 75  6e 63 25 2c f8 20 77 25  |char%,func%,. w%|
0002c910  2c f8 20 68 25 29 0d 19  00 0e c8 8e 20 66 75 6e  |,. h%)...... fun|
0002c920  63 25 20 ca 0d 19 01 53  20 20 c9 20 30 3a 62 66  |c% ....S  . 0:bf|
0002c930  67 25 3d 26 31 37 30 30  41 35 33 42 3a 66 66 67  |g%=&1700A53B:ffg|
0002c940  25 3d 26 30 37 30 30 41  35 33 35 3a e7 20 6c 6f  |%=&0700A535:. lo|
0002c950  67 6f 73 6c 6f 61 64 65  64 25 20 8c 20 6c 66 67  |gosloaded% . lfg|
0002c960  25 3d 26 30 30 30 30 30  31 31 41 20 8b 20 6c 66  |%=&0000011A . lf|
0002c970  67 25 3d 66 66 67 25 0d  19 02 53 20 20 c9 20 31  |g%=ffg%...S  . 1|
0002c980  3a 62 66 67 25 3d 26 31  37 30 30 36 35 33 42 3a  |:bfg%=&1700653B:|
0002c990  66 66 67 25 3d 26 30 37  30 30 36 35 33 35 3a e7  |ffg%=&07006535:.|
0002c9a0  20 6c 6f 67 6f 73 6c 6f  61 64 65 64 25 20 8c 20  | logosloaded% . |
0002c9b0  6c 66 67 25 3d 26 30 30  30 30 36 31 31 45 20 8b  |lfg%=&0000611E .|
0002c9c0  20 6c 66 67 25 3d 66 66  67 25 0d 19 03 05 cb 0d  | lfg%=ffg%......|
0002c9d0  19 04 0e c8 8e 20 63 68  61 72 25 20 ca 0d 19 05  |..... char% ....|
0002c9e0  49 20 20 c9 20 39 2c 31  30 2c 31 31 2c 31 32 2c  |I  . 9,10,11,12,|
0002c9f0  31 33 2c 31 34 2c 31 35  2c 31 36 2c 31 37 2c 31  |13,14,15,16,17,1|
0002ca00  38 2c 31 39 2c 32 30 2c  32 31 2c 32 32 2c 32 33  |8,19,20,21,22,23|
0002ca10  2c 32 34 2c 32 35 2c 32  36 2c 32 37 2c 32 38 2c  |,24,25,26,27,28,|
0002ca20  32 39 2c 33 30 3a 0d 19  06 46 20 20 21 62 6c 6f  |29,30:...F  !blo|
0002ca30  63 6b 25 3d 6b 65 79 70  61 64 57 25 3a 62 6c 6f  |ck%=keypadW%:blo|
0002ca40  63 6b 25 21 34 3d 63 68  61 72 25 2d 39 3a c8 99  |ck%!4=char%-9:..|
0002ca50  20 22 57 69 6d 70 5f 47  65 74 49 63 6f 6e 53 74  | "Wimp_GetIconSt|
0002ca60  61 74 65 22 2c 2c 62 6c  6f 63 6b 25 0d 19 07 3f  |ate",,block%...?|
0002ca70  20 20 77 25 3d 62 6c 6f  63 6b 25 21 31 36 2d 62  |  w%=block%!16-b|
0002ca80  6c 6f 63 6b 25 21 38 3a  68 25 3d 62 6c 6f 63 6b  |lock%!8:h%=block|
0002ca90  25 21 32 30 2d 62 6c 6f  63 6b 25 21 31 32 3a 69  |%!20-block%!12:i|
0002caa0  66 6c 61 67 73 25 3d 62  66 67 25 0d 19 08 2a 20  |flags%=bfg%...* |
0002cab0  20 c9 20 33 32 2c 33 33  2c 33 34 3a 77 25 3d 31  | . 32,33,34:w%=1|
0002cac0  31 32 3a 68 25 3d 34 34  3a 69 66 6c 61 67 73 25  |12:h%=44:iflags%|
0002cad0  3d 62 66 67 25 0d 19 09  23 20 20 c9 20 33 35 3a  |=bfg%...#  . 35:|
0002cae0  77 25 3d 38 30 3a 68 25  3d 36 34 3a 69 66 6c 61  |w%=80:h%=64:ifla|
0002caf0  67 73 25 3d 62 66 67 25  0d 19 0a 28 20 20 c9 20  |gs%=bfg%...(  . |
0002cb00  33 31 3a 77 25 3d 34 34  3a 68 25 3d 34 34 3a 69  |31:w%=44:h%=44:i|
0002cb10  66 6c 61 67 73 25 3d 26  31 37 30 30 42 35 33 42  |flags%=&1700B53B|
0002cb20  0d 19 0b 29 20 20 c9 20  33 36 2c 33 37 2c 33 38  |...)  . 36,37,38|
0002cb30  3a 77 25 3d 34 38 3a 68  25 3d 34 34 3a 69 66 6c  |:w%=48:h%=44:ifl|
0002cb40  61 67 73 25 3d 62 66 67  25 0d 19 0c 17 20 20 c9  |ags%=bfg%....  .|
0002cb50  20 33 39 3a 69 66 6c 61  67 73 25 3d 66 66 67 25  | 39:iflags%=ffg%|
0002cb60  0d 19 0d 37 20 20 c9 20  34 30 3a e7 20 66 75 6e  |...7  . 40:. fun|
0002cb70  63 25 3d 30 20 8c 20 69  66 6c 61 67 73 25 3d 26  |c%=0 . iflags%=&|
0002cb80  30 37 30 30 41 35 33 45  20 8b 20 69 66 6c 61 67  |0700A53E . iflag|
0002cb90  73 25 3d 66 66 67 25 0d  19 0e 34 20 20 c9 20 34  |s%=ffg%...4  . 4|
0002cba0  31 2c 34 32 2c 34 33 2c  34 34 2c 34 35 3a 77 25  |1,42,43,44,45:w%|
0002cbb0  3d 35 32 3a 68 25 3d 35  32 3a 69 66 6c 61 67 73  |=52:h%=52:iflags|
0002cbc0  25 3d 26 31 37 30 30 42  35 33 42 0d 19 0f 17 20  |%=&1700B53B.... |
0002cbd0  20 c9 20 35 39 3a 69 66  6c 61 67 73 25 3d 6c 66  | . 59:iflags%=lf|
0002cbe0  67 25 0d 19 10 14 20 20  7f 3a 69 66 6c 61 67 73  |g%....  .:iflags|
0002cbf0  25 3d 66 66 67 25 0d 19  11 05 cb 0d 19 12 25 e7  |%=ffg%........%.|
0002cc00  20 77 25 3d 30 20 80 20  68 25 3d 30 20 8c 20 69  | w%=0 . h%=0 . i|
0002cc10  66 6c 61 67 73 25 3d 26  30 30 30 30 30 30 30 30  |flags%=&00000000|
0002cc20  0d 19 13 05 e1 0d 19 14  05 3a 0d 19 15 15 dd 20  |.........:..... |
0002cc30  a4 67 65 74 5f 66 69 65  6c 64 28 69 63 25 29 0d  |.get_field(ic%).|
0002cc40  19 16 08 ea 20 46 25 0d  19 17 0b f5 20 46 25 2b  |.... F%..... F%+|
0002cc50  3d 31 0d 19 18 24 fd 20  66 69 65 6c 64 25 28 46  |=1...$. field%(F|
0002cc60  25 29 3d 69 63 25 20 84  20 64 65 73 63 25 28 46  |%)=ic% . desc%(F|
0002cc70  25 29 3d 69 63 25 0d 19  19 07 3d 46 25 0d 19 1a  |%)=ic%....=F%...|
0002cc80  05 3a 0d 19 1b 15 dd 20  f2 61 64 6a 75 73 74 5f  |.:..... .adjust_|
0002cc90  6f 6e 28 6f 6e 25 29 0d  19 1c 1b 64 65 73 69 67  |on(on%)....desig|
0002cca0  6e 25 3d 6f 6e 25 3a 61  64 6a 75 73 74 25 3d 6f  |n%=on%:adjust%=o|
0002ccb0  6e 25 0d 19 1d 18 f2 6c  69 74 28 6d 65 6e 75 25  |n%.....lit(menu%|
0002ccc0  28 39 29 2c 35 2c 6f 6e  25 29 0d 19 1e 1a f2 6c  |(9),5,on%).....l|
0002ccd0  69 74 28 6d 65 6e 75 25  28 39 29 2c 31 2c ac 20  |it(menu%(9),1,. |
0002cce0  6f 6e 25 29 0d 19 1f 1a  f2 6c 69 74 28 6d 65 6e  |on%).....lit(men|
0002ccf0  75 25 28 39 29 2c 32 2c  ac 20 6f 6e 25 29 0d 19  |u%(9),2,. on%)..|
0002cd00  20 1a f2 6c 69 74 28 6d  65 6e 75 25 28 39 29 2c  | ..lit(menu%(9),|
0002cd10  33 2c ac 20 6f 6e 25 29  0d 19 21 1a f2 6c 69 74  |3,. on%)..!..lit|
0002cd20  28 6d 65 6e 75 25 28 39  29 2c 34 2c ac 20 6f 6e  |(menu%(9),4,. on|
0002cd30  25 29 0d 19 22 22 f2 69  63 6f 6e 5f 62 69 74 28  |%).."".icon_bit(|
0002cd40  32 32 2c 63 72 65 61 74  65 57 25 2c 36 2c ac 20  |22,createW%,6,. |
0002cd50  6f 6e 25 29 0d 19 23 05  e1 0d 19 24 05 3a 0d 19  |on%)..#....$.:..|
0002cd60  25 1e dd 20 f2 63 68 61  6e 67 65 5f 6c 65 6e 67  |%.. .change_leng|
0002cd70  74 68 28 4e 4c 25 2c 6d  73 67 25 29 0d 19 26 14  |th(NL%,msg%)..&.|
0002cd80  ea 20 45 58 25 2c 6b 6c  6d 25 2c 53 24 2c 4e 25  |. EX%,klm%,S$,N%|
0002cd90  0d 19 27 0f 45 58 25 3d  4e 4c 25 2d 52 41 25 0d  |..'.EX%=NL%-RA%.|
0002cda0  19 28 0f e7 20 45 58 25  3d 30 20 8c 20 e1 0d 19  |.(.. EX%=0 . ...|
0002cdb0  29 2a 64 62 61 73 65 68  61 6e 64 6c 65 25 3d ad  |)*dbasehandle%=.|
0002cdc0  28 24 64 61 74 61 62 61  73 65 25 2b 22 2e 44 61  |($database%+".Da|
0002cdd0  74 61 62 61 73 65 22 29  0d 19 2a 22 f2 72 65 61  |tabase")..*".rea|
0002cde0  64 73 6d 61 72 72 61 79  28 64 62 61 73 65 68 61  |dsmarray(dbaseha|
0002cdf0  6e 64 6c 65 25 2c 52 41  25 29 0d 19 2b 0a c8 8e  |ndle%,RA%)..+...|
0002ce00  20 b9 20 ca 0d 19 2c 1c  20 20 c9 20 ac 20 6d 73  | . ...,.  . . ms|
0002ce10  67 25 3a f2 65 78 74 65  6e 64 5f 64 62 61 73 65  |g%:.extend_dbase|
0002ce20  0d 19 2d 10 20 20 c9 20  28 45 58 25 3e 30 29 3a  |..-.  . (EX%>0):|
0002ce30  0d 19 2e 57 20 20 e7 20  a4 63 6f 6e 66 69 72 6d  |...W  . .confirm|
0002ce40  28 22 45 78 74 65 6e 64  20 66 69 6c 65 20 66 72  |("Extend file fr|
0002ce50  6f 6d 20 22 2b c3 28 52  41 25 29 2b 22 20 74 6f  |om "+.(RA%)+" to|
0002ce60  20 22 2b c3 28 4e 4c 25  29 2b 22 20 72 65 63 6f  | "+.(NL%)+" reco|
0002ce70  72 64 73 22 29 3d b9 20  8c 20 f2 65 78 74 65 6e  |rds")=. . .exten|
0002ce80  64 5f 64 62 61 73 65 0d  19 2f 10 20 20 c9 20 28  |d_dbase../.  . (|
0002ce90  45 58 25 3c 30 29 3a 0d  19 30 59 20 20 e7 20 a4  |EX%<0):..0Y  . .|
0002cea0  63 6f 6e 66 69 72 6d 28  22 53 68 6f 72 74 65 6e  |confirm("Shorten|
0002ceb0  20 66 69 6c 65 20 66 72  6f 6d 20 22 2b c3 28 52  | file from "+.(R|
0002cec0  41 25 29 2b 22 20 74 6f  20 22 2b c3 28 4e 4c 25  |A%)+" to "+.(NL%|
0002ced0  29 2b 22 20 72 65 63 6f  72 64 73 22 29 3d b9 20  |)+" records")=. |
0002cee0  8c 20 f2 73 68 6f 72 74  65 6e 5f 64 62 61 73 65  |. .shorten_dbase|
0002cef0  0d 19 31 05 cb 0d 19 32  1b 24 52 65 63 6f 72 64  |..1....2.$Record|
0002cf00  73 25 3d c3 28 52 41 25  29 3a 4e 25 3d 52 41 25  |s%=.(RA%):N%=RA%|
0002cf10  0d 19 33 22 f2 77 72 69  74 65 73 6d 61 72 72 61  |..3".writesmarra|
0002cf20  79 28 64 62 61 73 65 68  61 6e 64 6c 65 25 2c 4e  |y(dbasehandle%,N|
0002cf30  25 29 0d 19 34 1d f2 63  6c 6f 73 65 5f 66 69 6c  |%)..4..close_fil|
0002cf40  65 28 64 62 61 73 65 68  61 6e 64 6c 65 25 29 0d  |e(dbasehandle%).|
0002cf50  19 35 25 e7 20 6d 73 67  25 20 8c 20 61 64 64 72  |.5%. msg% . addr|
0002cf60  3d a4 6d 6f 76 65 74 6f  28 6b 65 79 25 2c 74 6f  |=.moveto(key%,to|
0002cf70  70 2c 31 29 0d 19 36 05  e1 0d 19 37 05 3a 0d 19  |p,1)..6....7.:..|
0002cf80  38 13 dd 20 f2 65 78 74  65 6e 64 5f 64 62 61 73  |8.. .extend_dbas|
0002cf90  65 0d 19 39 26 ea 20 65  6e 64 25 2c 50 25 2c 49  |e..9&. end%,P%,I|
0002cfa0  25 2c 6b 65 79 25 2c 6b  65 79 62 61 73 65 25 2c  |%,key%,keybase%,|
0002cfb0  4b 4c 4d 25 2c 53 24 0d  19 3a 14 e3 20 6b 65 79  |KLM%,S$..:.. key|
0002cfc0  25 3d 30 20 b8 20 4b 65  79 73 25 0d 19 3b 18 20  |%=0 . Keys%..;. |
0002cfd0  20 53 24 3d c4 4b 4c 25  28 6b 65 79 25 29 2c 22  | S$=.KL%(key%),"|
0002cfe0  2e 22 29 0d 19 3c 17 20  20 4b 4c 4d 25 3d 4b 4c  |.")..<.  KLM%=KL|
0002cff0  25 28 6b 65 79 25 29 2b  31 33 0d 19 3d 1c 20 20  |%(key%)+13..=.  |
0002d000  50 25 3d 4c 48 25 2b 34  38 2b 28 4e 4c 25 2b 31  |P%=LH%+48+(NL%+1|
0002d010  29 2a 4b 4c 4d 25 0d 19  3e 36 20 20 f2 65 78 74  |)*KLM%..>6  .ext|
0002d020  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
0002d030  67 5f 62 6c 6f 63 6b 28  6b 65 79 61 6e 63 68 6f  |g_block(keyancho|
0002d040  72 25 28 6b 65 79 25 29  2c 50 25 29 0d 19 3f 20  |r%(key%),P%)..? |
0002d050  20 20 6b 65 79 62 61 73  65 25 3d 21 6b 65 79 61  |  keybase%=!keya|
0002d060  6e 63 68 6f 72 25 28 6b  65 79 25 29 0d 19 40 18  |nchor%(key%)..@.|
0002d070  20 20 50 25 3d 4c 48 25  2b 34 38 2b 52 41 25 2a  |  P%=LH%+48+RA%*|
0002d080  4b 4c 4d 25 0d 19 41 1a  20 20 e3 20 49 25 3d 52  |KLM%..A.  . I%=R|
0002d090  41 25 20 b8 20 45 58 25  2b 52 41 25 2d 31 0d 19  |A% . EX%+RA%-1..|
0002d0a0  42 1e 20 20 20 20 21 28  6b 65 79 62 61 73 65 25  |B.    !(keybase%|
0002d0b0  2b 50 25 29 3d 50 25 2b  4b 4c 4d 25 0d 19 43 1a  |+P%)=P%+KLM%..C.|
0002d0c0  20 20 20 20 21 28 6b 65  79 62 61 73 65 25 2b 50  |    !(keybase%+P|
0002d0d0  25 2b 34 29 3d 30 0d 19  44 1b 20 20 20 20 24 28  |%+4)=0..D.    $(|
0002d0e0  6b 65 79 62 61 73 65 25  2b 50 25 2b 38 29 3d 53  |keybase%+P%+8)=S|
0002d0f0  24 0d 19 45 25 20 20 20  20 21 28 6b 65 79 62 61  |$..E%    !(keyba|
0002d100  73 65 25 2b 50 25 2b 4b  4c 25 28 6b 65 79 25 29  |se%+P%+KL%(key%)|
0002d110  2b 39 29 3d 49 25 0d 19  46 10 20 20 20 20 50 25  |+9)=I%..F.    P%|
0002d120  2b 3d 4b 4c 4d 25 0d 19  47 0a 20 20 ed 20 49 25  |+=KLM%..G.  . I%|
0002d130  0d 19 48 16 20 20 21 28  6b 65 79 62 61 73 65 25  |..H.  !(keybase%|
0002d140  2b 50 25 29 3d 30 0d 19  49 18 20 20 21 28 6b 65  |+P%)=0..I.  !(ke|
0002d150  79 62 61 73 65 25 2b 50  25 2b 34 29 3d 30 0d 19  |ybase%+P%+4)=0..|
0002d160  4a 19 20 20 24 28 6b 65  79 62 61 73 65 25 2b 50  |J.  $(keybase%+P|
0002d170  25 2b 38 29 3d 53 24 0d  19 4b 22 20 20 21 28 6b  |%+8)=S$..K"  !(k|
0002d180  65 79 62 61 73 65 25 2b  50 25 2b 4b 4c 25 28 6b  |eybase%+P%+KL%(k|
0002d190  65 79 25 29 2b 39 29 3d  30 0d 19 4c 0a ed 20 6b  |ey%)+9)=0..L.. k|
0002d1a0  65 79 25 0d 19 4d 17 65  6e 64 25 3d a2 23 64 62  |ey%..M.end%=.#db|
0002d1b0  61 73 65 68 61 6e 64 6c  65 25 0d 19 4e 12 e3 20  |asehandle%..N.. |
0002d1c0  49 25 3d 30 20 b8 20 45  58 25 2d 31 0d 19 4f 24  |I%=0 . EX%-1..O$|
0002d1d0  20 20 cf 23 64 62 61 73  65 68 61 6e 64 6c 65 25  |  .#dbasehandle%|
0002d1e0  3d 65 6e 64 25 2b 49 25  2a 4c 65 6e 67 74 68 25  |=end%+I%*Length%|
0002d1f0  0d 19 50 16 20 20 e3 20  4a 25 3d 31 20 b8 20 66  |..P.  . J%=1 . f|
0002d200  69 65 6c 64 73 25 0d 19  51 19 20 20 20 20 d5 23  |ields%..Q.    .#|
0002d210  64 62 61 73 65 68 61 6e  64 6c 65 25 2c 22 22 0d  |dbasehandle%,"".|
0002d220  19 52 0a 20 20 ed 20 4a  25 0d 19 53 08 ed 20 49  |.R.  . J%..S.. I|
0002d230  25 0d 19 54 23 cf 23 64  62 61 73 65 68 61 6e 64  |%..T#.#dbasehand|
0002d240  6c 65 25 3d 65 6e 64 25  2b 45 58 25 2a 4c 65 6e  |le%=end%+EX%*Len|
0002d250  67 74 68 25 0d 19 55 0b  52 41 25 3d 4e 4c 25 0d  |gth%..U.RA%=NL%.|
0002d260  19 56 05 e1 0d 19 57 05  3a 0d 19 58 14 dd 20 f2  |.V....W.:..X.. .|
0002d270  73 68 6f 72 74 65 6e 5f  64 62 61 73 65 0d 19 59  |shorten_dbase..Y|
0002d280  22 ea 20 50 25 2c 4c 25  2c 52 25 2c 73 24 2c 6b  |". P%,L%,R%,s$,k|
0002d290  65 79 25 2c 6b 65 79 62  61 73 65 25 2c 53 24 0d  |ey%,keybase%,S$.|
0002d2a0  19 5a 14 e3 20 6b 65 79  25 3d 30 20 b8 20 4b 65  |.Z.. key%=0 . Ke|
0002d2b0  79 73 25 0d 19 5b 18 20  20 53 24 3d c4 4b 4c 25  |ys%..[.  S$=.KL%|
0002d2c0  28 6b 65 79 25 29 2c 22  2e 22 29 0d 19 5c 17 20  |(key%),".")..\. |
0002d2d0  20 4b 4c 4d 25 3d 4b 4c  25 28 6b 65 79 25 29 2b  | KLM%=KL%(key%)+|
0002d2e0  31 33 0d 19 5d 20 20 20  6b 65 79 62 61 73 65 25  |13..]   keybase%|
0002d2f0  3d 21 6b 65 79 61 6e 63  68 6f 72 25 28 6b 65 79  |=!keyanchor%(key|
0002d300  25 29 0d 19 5e 24 20 20  73 24 3d 24 28 6b 65 79  |%)..^$  s$=$(key|
0002d310  62 61 73 65 25 2b 4c 48  25 2b 35 36 2b 4e 4c 25  |base%+LH%+56+NL%|
0002d320  2a 4b 4c 4d 25 29 0d 19  5f 2b 20 20 e7 20 73 24  |*KLM%).._+  . s$|
0002d330  3c 3e 53 24 20 8c 20 e7  20 a4 63 6f 6e 66 69 72  |<>S$ . . .confir|
0002d340  6d 28 a4 6d 73 67 28 35  32 29 29 3d a3 20 8c 20  |m(.msg(52))=. . |
0002d350  e1 0d 19 60 18 20 20 50  25 3d 4c 48 25 2b 34 38  |...`.  P%=LH%+48|
0002d360  2b 4e 4c 25 2a 4b 4c 4d  25 0d 19 61 16 20 20 21  |+NL%*KLM%..a.  !|
0002d370  28 6b 65 79 62 61 73 65  25 2b 50 25 29 3d 30 0d  |(keybase%+P%)=0.|
0002d380  19 62 18 20 20 21 28 6b  65 79 62 61 73 65 25 2b  |.b.  !(keybase%+|
0002d390  50 25 2b 34 29 3d 30 0d  19 63 19 20 20 24 28 6b  |P%+4)=0..c.  $(k|
0002d3a0  65 79 62 61 73 65 25 2b  50 25 2b 38 29 3d 53 24  |eybase%+P%+8)=S$|
0002d3b0  0d 19 64 22 20 20 21 28  6b 65 79 62 61 73 65 25  |..d"  !(keybase%|
0002d3c0  2b 50 25 2b 4b 4c 25 28  6b 65 79 25 29 2b 39 29  |+P%+KL%(key%)+9)|
0002d3d0  3d 30 0d 19 65 0a ed 20  6b 65 79 25 0d 19 66 22  |=0..e.. key%..f"|
0002d3e0  a2 23 64 62 61 73 65 68  61 6e 64 6c 65 25 3d 4c  |.#dbasehandle%=L|
0002d3f0  65 6e 67 74 68 25 2a 28  4e 4c 25 2b 31 29 0d 19  |ength%*(NL%+1)..|
0002d400  67 0b 52 41 25 3d 4e 4c  25 0d 19 68 05 e1 0d 19  |g.RA%=NL%..h....|
0002d410  69 05 3a 0d 19 6a 2c dd  20 f2 63 6f 70 79 5f 64  |i.:..j,. .copy_d|
0002d420  61 74 61 62 61 73 65 5f  73 70 72 69 74 65 66 69  |atabase_spritefi|
0002d430  6c 65 28 70 61 74 68 24  2c 6c 65 61 66 24 29 0d  |le(path$,leaf$).|
0002d440  19 6b 0e ea 20 73 70 72  69 74 65 73 25 0d 19 6c  |.k.. sprites%..l|
0002d450  31 f2 63 72 65 61 74 65  5f 6e 61 6d 65 64 5f 73  |1.create_named_s|
0002d460  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 73 70 72  |liding_block(spr|
0002d470  73 61 6e 63 68 6f 72 25  2c 31 30 32 34 29 0d 19  |sanchor%,1024)..|
0002d480  6d 41 f4 20 23 23 23 20  54 68 69 73 20 69 73 20  |mA. ### This is |
0002d490  61 20 74 65 6d 70 6f 72  61 72 79 20 73 70 72 69  |a temporary spri|
0002d4a0  74 65 20 61 72 65 61 20  75 73 65 64 20 73 69 6d  |te area used sim|
0002d4b0  70 6c 79 20 74 6f 20 68  6f 6c 64 20 23 23 23 0d  |ply to hold ###.|
0002d4c0  19 6e 42 f4 20 23 23 23  20 74 68 65 20 73 70 72  |.nB. ### the spr|
0002d4d0  69 74 65 20 27 6e 65 77  5f 61 70 70 6c 27 20 77  |ite 'new_appl' w|
0002d4e0  68 69 6c 73 74 20 69 74  20 69 73 20 72 65 6e 61  |hilst it is rena|
0002d4f0  6d 65 64 20 61 6e 64 20  73 61 76 65 64 20 23 23  |med and saved ##|
0002d500  23 0d 19 6f 19 73 70 72  69 74 65 73 25 3d 21 73  |#..o.sprites%=!s|
0002d510  70 72 73 61 6e 63 68 6f  72 25 0d 19 70 12 21 73  |prsanchor%..p.!s|
0002d520  70 72 69 74 65 73 25 3d  31 30 32 34 0d 19 71 11  |prites%=1024..q.|
0002d530  73 70 72 69 74 65 73 25  21 38 3d 31 36 0d 19 72  |sprites%!8=16..r|
0002d540  24 f4 20 23 23 23 20 49  6e 69 74 69 61 6c 69 73  |$. ### Initialis|
0002d550  65 20 73 70 72 69 74 65  20 61 72 65 61 20 23 23  |e sprite area ##|
0002d560  23 0d 19 73 22 c8 99 20  22 4f 53 5f 53 70 72 69  |#..s".. "OS_Spri|
0002d570  74 65 4f 70 22 2c 26 31  30 39 2c 73 70 72 69 74  |teOp",&109,sprit|
0002d580  65 73 25 0d 19 74 2f f4  20 23 23 23 20 4c 6f 61  |es%..t/. ### Loa|
0002d590  64 20 21 53 70 72 69 74  65 73 20 66 69 6c 65 20  |d !Sprites file |
0002d5a0  66 72 6f 6d 20 52 65 73  6f 75 72 63 65 73 20 23  |from Resources #|
0002d5b0  23 23 0d 19 75 48 c8 99  20 22 4f 53 5f 53 70 72  |##..uH.. "OS_Spr|
0002d5c0  69 74 65 4f 70 22 2c 26  31 30 41 2c 73 70 72 69  |iteOp",&10A,spri|
0002d5d0  74 65 73 25 2c 22 3c 50  42 61 73 65 24 44 69 72  |tes%,"<PBase$Dir|
0002d5e0  3e 2e 52 65 73 6f 75 72  63 65 73 2e 54 65 6d 70  |>.Resources.Temp|
0002d5f0  2e 21 53 70 72 69 74 65  73 22 0d 19 76 3b f4 20  |.!Sprites"..v;. |
0002d600  23 23 23 20 52 65 6e 61  6d 65 20 73 70 72 69 74  |### Rename sprit|
0002d610  65 20 27 6e 65 77 5f 61  70 70 6c 27 20 74 6f 20  |e 'new_appl' to |
0002d620  6e 65 77 20 64 61 74 61  62 61 73 65 20 6e 61 6d  |new database nam|
0002d630  65 20 23 23 23 0d 19 77  33 c8 99 20 22 4f 53 5f  |e ###..w3.. "OS_|
0002d640  53 70 72 69 74 65 4f 70  22 2c 26 31 31 41 2c 73  |SpriteOp",&11A,s|
0002d650  70 72 69 74 65 73 25 2c  22 6e 65 77 5f 61 70 70  |prites%,"new_app|
0002d660  6c 22 2c 6c 65 61 66 24  0d 19 78 41 f4 20 23 23  |l",leaf$..xA. ##|
0002d670  23 20 53 61 76 65 20 73  70 72 69 74 65 66 69 6c  |# Save spritefil|
0002d680  65 20 28 77 69 74 68 20  72 65 6e 61 6d 65 64 20  |e (with renamed |
0002d690  6e 65 77 5f 61 70 70 6c  29 20 61 73 20 21 53 70  |new_appl) as !Sp|
0002d6a0  72 69 74 65 73 20 23 23  23 0d 19 79 34 c8 99 20  |rites ###..y4.. |
0002d6b0  22 4f 53 5f 53 70 72 69  74 65 4f 70 22 2c 26 31  |"OS_SpriteOp",&1|
0002d6c0  30 43 2c 73 70 72 69 74  65 73 25 2c 70 61 74 68  |0C,sprites%,path|
0002d6d0  24 2b 22 2e 21 53 70 72  69 74 65 73 22 0d 19 7a  |$+".!Sprites"..z|
0002d6e0  27 f4 20 23 23 23 20 44  6f 20 73 61 6d 65 20 66  |'. ### Do same f|
0002d6f0  6f 72 20 68 69 2d 72 65  73 20 73 70 72 69 74 65  |or hi-res sprite|
0002d700  20 23 23 23 0d 19 7b 22  c8 99 20 22 4f 53 5f 53  | ###..{".. "OS_S|
0002d710  70 72 69 74 65 4f 70 22  2c 26 31 30 39 2c 73 70  |priteOp",&109,sp|
0002d720  72 69 74 65 73 25 0d 19  7c 4a c8 99 20 22 4f 53  |rites%..|J.. "OS|
0002d730  5f 53 70 72 69 74 65 4f  70 22 2c 26 31 30 41 2c  |_SpriteOp",&10A,|
0002d740  73 70 72 69 74 65 73 25  2c 22 3c 50 42 61 73 65  |sprites%,"<PBase|
0002d750  24 44 69 72 3e 2e 52 65  73 6f 75 72 63 65 73 2e  |$Dir>.Resources.|
0002d760  54 65 6d 70 2e 21 53 70  72 69 74 65 73 32 32 22  |Temp.!Sprites22"|
0002d770  0d 19 7d 33 c8 99 20 22  4f 53 5f 53 70 72 69 74  |..}3.. "OS_Sprit|
0002d780  65 4f 70 22 2c 26 31 31  41 2c 73 70 72 69 74 65  |eOp",&11A,sprite|
0002d790  73 25 2c 22 6e 65 77 5f  61 70 70 6c 22 2c 6c 65  |s%,"new_appl",le|
0002d7a0  61 66 24 0d 19 7e 36 c8  99 20 22 4f 53 5f 53 70  |af$..~6.. "OS_Sp|
0002d7b0  72 69 74 65 4f 70 22 2c  26 31 30 43 2c 73 70 72  |riteOp",&10C,spr|
0002d7c0  69 74 65 73 25 2c 70 61  74 68 24 2b 22 2e 21 53  |ites%,path$+".!S|
0002d7d0  70 72 69 74 65 73 32 32  22 0d 19 7f 25 f2 73 63  |prites22"...%.sc|
0002d7e0  72 61 70 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |rap_sliding_bloc|
0002d7f0  6b 28 73 70 72 73 61 6e  63 68 6f 72 25 29 0d 19  |k(sprsanchor%)..|
0002d800  80 05 e1 0d 19 81 05 3a  0d 19 82 1b dd 20 f2 64  |.......:..... .d|
0002d810  65 66 61 75 6c 74 73 28  66 24 2c 4e 25 2c 6b 65  |efaults(f$,N%,ke|
0002d820  79 25 29 0d 19 83 13 24  52 65 63 6f 72 64 73 25  |y%)....$Records%|
0002d830  3d c3 28 4e 25 29 0d 19  84 20 f2 6d 61 6b 65 5f  |=.(N%)... .make_|
0002d840  65 6d 70 74 79 5f 69 6e  64 65 78 28 4e 25 2c 6b  |empty_index(N%,k|
0002d850  65 79 25 2c b9 29 0d 19  85 21 f2 73 61 76 65 5f  |ey%,.)...!.save_|
0002d860  72 65 63 73 28 66 24 2b  22 2e 44 61 74 61 62 61  |recs(f$+".Databa|
0002d870  73 65 22 2c 4e 25 29 0d  19 86 19 70 72 65 73 65  |se",N%)....prese|
0002d880  6e 74 25 3d 37 3a f2 73  61 76 65 5f 6b 65 79 73  |nt%=7:.save_keys|
0002d890  0d 19 87 0d 64 65 73 69  67 6e 25 3d a3 0d 19 88  |....design%=....|
0002d8a0  12 f2 67 65 74 5f 69 74  5f 69 6e 28 66 24 29 0d  |..get_it_in(f$).|
0002d8b0  19 89 16 f2 6c 69 74 28  6d 65 6e 75 25 28 30 29  |....lit(menu%(0)|
0002d8c0  2c 32 2c b9 29 0d 19 8a  05 e1 0d 19 8b 05 3a 0d  |,2,.).........:.|
0002d8d0  19 8c 12 dd 20 f2 64 65  66 61 75 6c 74 5f 6b 65  |.... .default_ke|
0002d8e0  79 0d 19 8d 08 ea 20 46  25 0d 19 8e 13 46 25 3d  |y..... F%....F%=|
0002d8f0  a4 66 69 72 73 74 5f 66  69 65 6c 64 0d 19 8f 0a  |.first_field....|
0002d900  c8 8e 20 b9 20 ca 0d 19  90 27 20 20 c9 20 63 68  |.. . ....'  . ch|
0002d910  61 72 74 79 70 65 25 28  46 25 29 3d 33 3a 4b 4c  |artype%(F%)=3:KL|
0002d920  25 28 30 29 3d 6c 65 6e  25 28 46 25 29 0d 19 91  |%(0)=len%(F%)...|
0002d930  1b 20 20 c9 20 6c 65 6e  25 28 46 25 29 3e 33 3a  |.  . len%(F%)>3:|
0002d940  4b 4c 25 28 30 29 3d 34  0d 19 92 17 20 20 7f 3a  |KL%(0)=4....  .:|
0002d950  4b 4c 25 28 30 29 3d 6c  65 6e 25 28 46 25 29 0d  |KL%(0)=len%(F%).|
0002d960  19 93 05 cb 0d 19 94 1a  49 6e 64 65 78 24 28 30  |........Index$(0|
0002d970  29 3d 22 50 72 69 6d 61  72 79 4b 65 79 22 0d 19  |)="PrimaryKey"..|
0002d980  95 0a 6b 65 79 25 3d 30  0d 19 96 21 4b 57 25 28  |..key%=0...!KW%(|
0002d990  29 3d 30 3a 4b 57 25 28  6b 65 79 25 2c 30 29 3d  |)=0:KW%(key%,0)=|
0002d9a0  4b 4c 25 28 6b 65 79 25  29 0d 19 97 20 4b 46 25  |KL%(key%)... KF%|
0002d9b0  28 6b 65 79 25 2c 30 29  3d 46 25 3a 4b 46 25 28  |(key%,0)=F%:KF%(|
0002d9c0  6b 65 79 25 2c 31 29 3d  30 0d 19 98 16 f2 73 65  |key%,1)=0.....se|
0002d9d0  74 5f 6b 65 79 64 61 74  61 28 6b 65 79 25 29 0d  |t_keydata(key%).|
0002d9e0  19 99 05 e1 0d 19 9a 05  3a 0d 19 9b 13 dd 20 f2  |........:..... .|
0002d9f0  6e 65 77 5f 74 72 65 65  28 66 25 29 0d 19 9c 1d  |new_tree(f%)....|
0002da00  ea 20 52 45 43 25 2c 49  25 2c 70 74 72 25 2c 66  |. REC%,I%,ptr%,f|
0002da10  69 6c 65 25 2c 6f 6c 64  24 0d 19 9d 96 6f 6c 64  |ile%,old$....old|
0002da20  24 3d 22 4c 65 6e 67 74  68 3a 20 22 2b c3 28 4b  |$="Length: "+.(K|
0002da30  4c 25 28 30 29 29 2b 22  2c 20 46 69 65 6c 64 28  |L%(0))+", Field(|
0002da40  73 29 3a 20 22 2b 54 61  67 24 28 4b 46 25 28 30  |s): "+Tag$(KF%(0|
0002da50  2c 30 29 29 2b 22 20 22  2b 54 61 67 24 28 4b 46  |,0))+" "+Tag$(KF|
0002da60  25 28 30 2c 31 29 29 2b  22 2c 20 43 68 61 72 73  |%(0,1))+", Chars|
0002da70  3a 20 22 2b c3 28 4b 57  25 28 30 2c 30 29 29 2b  |: "+.(KW%(0,0))+|
0002da80  22 2c 22 2b c3 28 4b 57  25 28 30 2c 31 29 29 2b  |","+.(KW%(0,1))+|
0002da90  22 2c 22 2b c3 28 4b 57  25 28 30 2c 32 29 29 2b  |","+.(KW%(0,2))+|
0002daa0  22 2c 22 2b c3 28 4b 57  25 28 30 2c 33 29 29 0d  |","+.(KW%(0,3)).|
0002dab0  19 9e 2f 64 25 3d a4 73  65 6c 65 63 74 65 64 28  |../d%=.selected(|
0002dac0  6b 65 79 57 25 2c 39 29  3a 73 25 3d a4 73 65 6c  |keyW%,9):s%=.sel|
0002dad0  65 63 74 65 64 28 6b 65  79 57 25 2c 38 29 0d 19  |ected(keyW%,8)..|
0002dae0  9f 0f e7 20 64 25 20 8c  20 66 25 3d 30 0d 19 a0  |... d% . f%=0...|
0002daf0  1a 4d 24 3d 22 42 75 69  6c 64 20 69 6e 64 65 78  |.M$="Build index|
0002db00  20 77 69 74 68 20 22 0d  19 a1 4f e7 20 73 25 20  | with "...O. s% |
0002db10  8c 20 4d 24 2b 3d 22 72  65 63 6f 72 64 73 20 69  |. M$+="records i|
0002db20  6e 20 73 61 6d 65 20 73  75 62 66 69 6c 65 73 22  |n same subfiles"|
0002db30  20 8b 20 4d 24 2b 3d 22  61 6c 6c 20 72 65 63 6f  | . M$+="all reco|
0002db40  72 64 73 20 69 6e 20 73  75 62 66 69 6c 65 20 22  |rds in subfile "|
0002db50  2b c3 28 66 25 29 0d 19  a2 1e 4d 24 2b 3d 22 20  |+.(f%)....M$+=" |
0002db60  6f 66 20 63 75 72 72 65  6e 74 20 64 61 74 61 62  |of current datab|
0002db70  61 73 65 22 0d 19 a3 34  e7 20 64 25 20 8c 20 4d  |ase"...4. d% . M|
0002db80  24 2b 3d 22 2c 20 61 6c  73 6f 20 72 65 73 74 6f  |$+=", also resto|
0002db90  72 69 6e 67 20 27 64 65  6c 65 74 65 64 27 20 72  |ring 'deleted' r|
0002dba0  65 63 6f 72 64 73 2e 22  0d 19 a4 45 e7 20 64 25  |ecords."...E. d%|
0002dbb0  20 84 20 ac 20 73 25 20  8c 20 4d 24 2b 3d 22 20  | . . s% . M$+=" |
0002dbc0  57 41 52 4e 49 4e 47 21  20 4f 74 68 65 72 20 69  |WARNING! Other i|
0002dbd0  6e 64 69 63 65 73 20 77  69 6c 6c 20 6e 65 65 64  |ndices will need|
0002dbe0  20 72 65 62 75 69 6c 64  69 6e 67 21 22 0d 19 a5  | rebuilding!"...|
0002dbf0  1a e7 20 ac 20 a4 63 6f  6e 66 69 72 6d 28 4d 24  |.. . .confirm(M$|
0002dc00  29 3d b9 20 8c 20 e1 0d  19 a6 21 f2 6d 61 72 6b  |)=. . ....!.mark|
0002dc10  5f 66 69 6c 65 73 28 30  2c 52 41 25 2c ac 20 64  |_files(0,RA%,. d|
0002dc20  25 2c 73 25 2c 66 25 29  0d 19 a7 14 f2 63 6f 70  |%,s%,f%).....cop|
0002dc30  79 5f 6b 65 79 64 61 74  61 28 30 29 0d 19 a8 22  |y_keydata(0)..."|
0002dc40  52 41 25 3d bb 28 24 52  65 63 6f 72 64 73 25 29  |RA%=.($Records%)|
0002dc50  3a 66 24 3d 24 64 61 74  61 62 61 73 65 25 0d 19  |:f$=$database%..|
0002dc60  a9 27 f2 73 63 72 61 70  5f 73 6c 69 64 69 6e 67  |.'.scrap_sliding|
0002dc70  5f 62 6c 6f 63 6b 28 6b  65 79 61 6e 63 68 6f 72  |_block(keyanchor|
0002dc80  25 28 30 29 29 0d 19 aa  1e f2 6d 61 6b 65 5f 65  |%(0)).....make_e|
0002dc90  6d 70 74 79 5f 69 6e 64  65 78 28 52 41 25 2c 30  |mpty_index(RA%,0|
0002dca0  2c b9 29 0d 19 ab 18 f2  63 6c 6f 73 65 5f 77 69  |,.).....close_wi|
0002dcb0  6e 64 6f 77 28 6b 65 79  57 25 29 0d 19 ac 15 f2  |ndow(keyW%).....|
0002dcc0  72 65 64 72 61 77 28 6b  65 79 70 61 64 57 25 29  |redraw(keypadW%)|
0002dcd0  0d 19 ad 15 70 74 72 25  3d 21 74 65 6d 70 61 6e  |....ptr%=!tempan|
0002dce0  63 68 6f 72 25 0d 19 ae  0f f2 70 6f 6c 6c 3a f2  |chor%.....poll:.|
0002dcf0  70 6f 6c 6c 0d 19 af 15  c8 99 20 22 48 6f 75 72  |poll...... "Hour|
0002dd00  67 6c 61 73 73 5f 4f 6e  22 0d 19 b0 2a 64 62 61  |glass_On"...*dba|
0002dd10  73 65 68 61 6e 64 6c 65  25 3d 8e 28 24 64 61 74  |sehandle%=.($dat|
0002dd20  61 62 61 73 65 25 2b 22  2e 44 61 74 61 62 61 73  |abase%+".Databas|
0002dd30  65 22 29 0d 19 b1 14 e3  20 52 45 43 25 3d 30 20  |e")..... REC%=0 |
0002dd40  b8 20 52 41 25 2d 31 0d  19 b2 15 20 20 66 69 6c  |. RA%-1....  fil|
0002dd50  65 25 3d 70 74 72 25 3f  52 45 43 25 0d 19 b3 14  |e%=ptr%?REC%....|
0002dd60  20 20 e7 20 66 69 6c 65  25 3c 3e 32 35 35 20 8c  |  . file%<>255 .|
0002dd70  0d 19 b4 17 20 20 20 20  74 6f 70 3d 38 2a 66 69  |....    top=8*fi|
0002dd80  6c 65 25 2b 4c 48 25 0d  19 b5 27 20 20 20 20 f2  |le%+LH%...'    .|
0002dd90  72 65 61 64 73 6d 61 72  72 61 79 28 64 62 61 73  |readsmarray(dbas|
0002dda0  65 68 61 6e 64 6c 65 25  2c 52 45 43 25 29 0d 19  |ehandle%,REC%)..|
0002ddb0  b6 17 20 20 20 20 4b 45  59 24 3d a4 6b 65 79 32  |..    KEY$=.key2|
0002ddc0  28 30 2c 31 29 0d 19 b7  20 20 20 20 20 6b 6c 25  |(0,1)...     kl%|
0002ddd0  3d 4b 4c 25 28 30 29 3a  76 61 6c 24 3d a4 74 79  |=KL%(0):val$=.ty|
0002dde0  70 65 28 30 29 0d 19 b8  26 20 20 20 20 e7 20 4b  |pe(0)...&    . K|
0002ddf0  45 59 24 3c 3e 22 22 20  8c 20 f2 69 6e 73 65 72  |EY$<>"" . .inser|
0002de00  74 28 a3 2c 4b 45 59 24  2c 30 29 0d 19 b9 07 20  |t(.,KEY$,0).... |
0002de10  20 cd 0d 19 ba 30 20 20  c8 99 20 22 48 6f 75 72  | ....0  .. "Hour|
0002de20  67 6c 61 73 73 5f 50 65  72 63 65 6e 74 61 67 65  |glass_Percentage|
0002de30  22 2c 28 52 45 43 25 2a  31 30 30 29 20 81 20 52  |",(REC%*100) . R|
0002de40  41 25 0d 19 bb 0a ed 20  52 45 43 25 0d 19 bc 1d  |A%..... REC%....|
0002de50  f2 63 6c 6f 73 65 5f 66  69 6c 65 28 64 62 61 73  |.close_file(dbas|
0002de60  65 68 61 6e 64 6c 65 25  29 0d 19 bd 22 6e 65 77  |ehandle%)..."new|
0002de70  74 72 65 65 25 3d a3 3a  64 65 73 69 67 6e 25 3d  |tree%=.:design%=|
0002de80  a3 3a 61 64 6a 75 73 74  25 3d a3 0d 19 be 25 f2  |.:adjust%=....%.|
0002de90  73 63 72 61 70 5f 73 6c  69 64 69 6e 67 5f 62 6c  |scrap_sliding_bl|
0002dea0  6f 63 6b 28 74 65 6d 70  61 6e 63 68 6f 72 25 29  |ock(tempanchor%)|
0002deb0  0d 19 bf 16 c8 99 20 22  48 6f 75 72 67 6c 61 73  |...... "Hourglas|
0002dec0  73 5f 4f 66 66 22 0d 19  c0 0e 70 72 65 73 65 6e  |s_Off"....presen|
0002ded0  74 25 3d 37 0d 19 c1 1c  e7 20 a4 73 65 6c 65 63  |t%=7..... .selec|
0002dee0  74 65 64 28 70 61 73 73  57 25 2c 31 36 29 20 8c  |ted(passW%,16) .|
0002def0  0d 19 c2 41 20 20 d5 23  6c 6f 67 68 61 6e 64 6c  |...A  .#loghandl|
0002df00  65 25 2c 22 50 72 69 6d  61 72 79 20 6b 65 79 20  |e%,"Primary key |
0002df10  61 6c 74 65 72 65 64 2e  20 50 72 65 76 69 6f 75  |altered. Previou|
0002df20  73 20 73 74 72 75 63 74  75 72 65 20 77 61 73 3a  |s structure was:|
0002df30  22 0d 19 c3 17 20 20 d5  23 6c 6f 67 68 61 6e 64  |"....  .#loghand|
0002df40  6c 65 25 2c 6f 6c 64 24  0d 19 c4 05 cd 0d 19 c5  |le%,old$........|
0002df50  1c c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  |... "Wimp_Create|
0002df60  4d 65 6e 75 22 2c 2c 2d  31 0d 19 c6 2a 62 6c 6f  |Menu",,-1...*blo|
0002df70  63 6b 25 21 38 3d 30 3a  62 6c 6f 63 6b 25 21 31  |ck%!8=0:block%!1|
0002df80  32 3d 77 69 25 3a 62 6c  6f 63 6b 25 21 31 36 3d  |2=wi%:block%!16=|
0002df90  69 63 25 0d 19 c7 25 c8  99 20 22 49 6e 74 65 72  |ic%...%.. "Inter|
0002dfa0  66 61 63 65 5f 53 6c 61  62 42 75 74 74 6f 6e 22  |face_SlabButton"|
0002dfb0  2c 2c 62 6c 6f 63 6b 25  0d 19 c8 1a f2 67 65 74  |,,block%.....get|
0002dfc0  5f 69 74 5f 69 6e 28 24  64 61 74 61 62 61 73 65  |_it_in($database|
0002dfd0  25 29 0d 19 c9 05 e1 0d  19 ca 05 3a 0d 19 cb 13  |%).........:....|
0002dfe0  dd 20 f2 72 65 66 6f 72  6d 61 74 28 66 24 29 0d  |. .reformat(f$).|
0002dff0  19 cc 34 ea 20 49 25 2c  46 2c 52 45 43 25 2c 64  |..4. I%,F,REC%,d|
0002e000  66 69 65 6c 64 73 25 2c  44 4c 65 6e 67 74 68 25  |fields%,DLength%|
0002e010  2c 63 68 64 64 2c 7a 25  2c 62 6c 6f 62 73 25 2c  |,chdd,z%,blobs%,|
0002e020  65 78 25 0d 19 cd 27 ea  20 44 54 61 67 24 28 29  |ex%...'. DTag$()|
0002e030  2c 46 25 28 29 2c 46 31  25 28 29 2c 4c 25 28 29  |,F%(),F1%(),L%()|
0002e040  2c 6c 24 28 29 2c 63 24  28 29 0d 19 ce 0c 46 24  |,l$(),c$()....F$|
0002e050  28 30 29 3d 22 22 0d 19  cf 22 c8 99 20 22 4f 53  |(0)=""...".. "OS|
0002e060  5f 46 69 6c 65 22 2c 35  2c 66 24 2b 22 2e 46 6f  |_File",5,f$+".Fo|
0002e070  72 6d 22 20 b8 20 7a 25  0d 19 d0 0a c8 8e 20 b9  |rm" . z%...... .|
0002e080  20 ca 0d 19 d1 1f 20 20  c9 20 7a 25 3c 3e 31 3a  | .....  . z%<>1:|
0002e090  f2 73 6f 66 74 65 72 72  6f 72 28 22 22 2c 31 39  |.softerror("",19|
0002e0a0  29 0d 19 d2 27 20 20 c9  20 66 24 3d 24 64 61 74  |)...'  . f$=$dat|
0002e0b0  61 62 61 73 65 25 3a f2  73 6f 66 74 65 72 72 6f  |abase%:.softerro|
0002e0c0  72 28 22 22 2c 33 36 29  0d 19 d3 07 20 20 7f 0d  |r("",36)....  ..|
0002e0d0  19 d4 24 20 20 62 6c 6f  62 73 25 3d a4 66 69 6e  |..$  blobs%=.fin|
0002e0e0  64 5f 62 6c 6f 62 73 28  24 64 61 74 61 62 61 73  |d_blobs($databas|
0002e0f0  65 25 29 0d 19 d5 15 20  20 46 3d 8e 28 66 24 2b  |e%)....  F=.(f$+|
0002e100  22 2e 46 6f 72 6d 22 29  0d 19 d6 12 20 20 e8 23  |".Form")....  .#|
0002e110  46 2c 64 66 69 65 6c 64  73 25 0d 19 d7 58 20 20  |F,dfields%...X  |
0002e120  de 20 44 54 61 67 24 28  64 66 69 65 6c 64 73 25  |. DTag$(dfields%|
0002e130  29 2c 46 25 28 64 66 69  65 6c 64 73 25 29 2c 46  |),F%(dfields%),F|
0002e140  31 25 28 66 69 65 6c 64  73 25 29 2c 4c 25 28 64  |1%(fields%),L%(d|
0002e150  66 69 65 6c 64 73 25 29  2c 6c 24 28 64 66 69 65  |fields%),l$(dfie|
0002e160  6c 64 73 25 29 2c 63 24  28 64 66 69 65 6c 64 73  |lds%),c$(dfields|
0002e170  25 29 0d 19 d8 17 20 20  e3 20 49 25 3d 31 20 b8  |%)....  . I%=1 .|
0002e180  20 64 66 69 65 6c 64 73  25 0d 19 d9 46 20 20 20  | dfields%...F   |
0002e190  20 e8 23 46 2c 44 65 73  63 24 2c 44 54 61 67 24  | .#F,Desc$,DTag$|
0002e1a0  28 49 25 29 2c 78 64 25  2c 79 64 25 2c 78 66 25  |(I%),xd%,yd%,xf%|
0002e1b0  2c 79 66 25 2c 4c 25 28  49 25 29 2c 63 68 61 72  |,yf%,L%(I%),char|
0002e1c0  25 2c 65 78 74 72 61 25  2c 65 78 74 72 61 25 0d  |%,extra%,extra%.|
0002e1d0  19 da 1a 20 20 20 20 44  4c 65 6e 67 74 68 25 2b  |...    DLength%+|
0002e1e0  3d 4c 25 28 49 25 29 2b  31 0d 19 db 0a 20 20 ed  |=L%(I%)+1....  .|
0002e1f0  20 49 25 0d 19 dc 09 20  20 d9 23 46 0d 19 dd 1c  | I%....  .#F....|
0002e200  20 20 63 68 64 64 3d ae  28 66 24 2b 22 2e 44 61  |  chdd=.(f$+".Da|
0002e210  74 61 62 61 73 65 22 29  0d 19 de 0e 20 20 f2 63  |tabase")....  .c|
0002e220  6f 6d 70 61 72 65 0d 19  df 17 20 20 c8 99 20 22  |ompare....  .. "|
0002e230  48 6f 75 72 67 6c 61 73  73 5f 4f 6e 22 0d 19 e0  |Hourglass_On"...|
0002e240  14 20 20 e3 20 52 45 43  25 3d 30 20 b8 20 52 41  |.  . REC%=0 . RA|
0002e250  25 0d 19 e1 1c 20 20 20  20 cf 23 63 68 64 64 3d  |%....    .#chdd=|
0002e260  52 45 43 25 2a 44 4c 65  6e 67 74 68 25 0d 19 e2  |REC%*DLength%...|
0002e270  28 20 20 20 20 f2 72 65  61 64 28 66 69 65 6c 64  |(    .read(field|
0002e280  73 25 2c a3 2c 52 45 43  25 2c 24 64 61 74 61 62  |s%,.,REC%,$datab|
0002e290  61 73 65 25 29 0d 19 e3  19 20 20 20 20 e3 20 49  |ase%)....    . I|
0002e2a0  25 3d 31 20 b8 20 64 66  69 65 6c 64 73 25 0d 19  |%=1 . dfields%..|
0002e2b0  e4 1b 20 20 20 20 20 20  53 24 3d 66 69 65 6c 64  |..      S$=field|
0002e2c0  24 28 46 25 28 49 25 29  29 0d 19 e5 29 20 20 20  |$(F%(I%))...)   |
0002e2d0  20 20 20 e7 20 a9 28 53  24 29 3e 4c 25 28 49 25  |   . .(S$)>L%(I%|
0002e2e0  29 20 8c 20 53 24 3d c0  53 24 2c 4c 25 28 49 25  |) . S$=.S$,L%(I%|
0002e2f0  29 29 0d 19 e6 13 20 20  20 20 20 20 d5 23 63 68  |))....      .#ch|
0002e300  64 64 2c 53 24 0d 19 e7  0c 20 20 20 20 ed 20 49  |dd,S$....    . I|
0002e310  25 0d 19 e8 0e 20 20 20  20 65 78 25 3d 2d 31 0d  |%....    ex%=-1.|
0002e320  19 e9 15 20 20 20 20 c8  95 20 65 78 25 3c 62 6c  |...    .. ex%<bl|
0002e330  6f 62 73 25 0d 19 ea 1d  20 20 20 20 20 20 65 78  |obs%....      ex|
0002e340  25 2b 3d 31 3a 46 25 3d  45 78 74 25 28 65 78 25  |%+=1:F%=Ext%(ex%|
0002e350  29 0d 19 eb 46 20 20 20  20 20 20 f2 63 6f 70 79  |)...F      .copy|
0002e360  5f 62 6c 6f 62 28 24 64  61 74 61 62 61 73 65 25  |_blob($database%|
0002e370  2c 66 24 2c 52 45 43 25  2c 52 45 43 25 2c 46 25  |,f$,REC%,REC%,F%|
0002e380  2c 46 31 25 28 46 25 29  2c 63 68 61 72 74 79 70  |,F1%(F%),chartyp|
0002e390  65 25 28 46 25 29 29 0d  19 ec 09 20 20 20 20 ce  |e%(F%))....    .|
0002e3a0  0d 19 ed 32 20 20 20 20  c8 99 20 22 48 6f 75 72  |...2    .. "Hour|
0002e3b0  67 6c 61 73 73 5f 50 65  72 63 65 6e 74 61 67 65  |glass_Percentage|
0002e3c0  22 2c 28 52 45 43 25 2a  31 30 30 29 20 81 20 52  |",(REC%*100) . R|
0002e3d0  41 25 0d 19 ee 0c 20 20  ed 20 52 45 43 25 0d 19  |A%....  . REC%..|
0002e3e0  ef 18 20 20 c8 99 20 22  48 6f 75 72 67 6c 61 73  |..  .. "Hourglas|
0002e3f0  73 5f 4f 66 66 22 0d 19  f0 17 20 20 f2 63 6c 6f  |s_Off"....  .clo|
0002e400  73 65 5f 66 69 6c 65 28  63 68 64 64 29 0d 19 f1  |se_file(chdd)...|
0002e410  29 20 20 c8 99 20 22 4f  53 5f 46 69 6c 65 22 2c  |)  .. "OS_File",|
0002e420  31 38 2c 66 24 2b 22 2e  44 61 74 61 62 61 73 65  |18,f$+".Database|
0002e430  22 2c 26 37 66 32 0d 19  f2 49 20 20 c8 99 20 22  |",&7f2...I  .. "|
0002e440  4f 53 5f 43 4c 49 22 2c  22 43 6f 70 79 20 22 2b  |OS_CLI","Copy "+|
0002e450  24 64 61 74 61 62 61 73  65 25 2b 22 2e 50 72 69  |$database%+".Pri|
0002e460  6d 61 72 79 4b 65 79 20  22 2b 66 24 2b 22 2e 50  |maryKey "+f$+".P|
0002e470  72 69 6d 61 72 79 4b 65  79 20 7e 43 7e 56 22 0d  |rimaryKey ~C~V".|
0002e480  19 f3 43 20 20 c8 99 20  22 4f 53 5f 43 4c 49 22  |..C  .. "OS_CLI"|
0002e490  2c 22 43 6f 70 79 20 22  2b 24 64 61 74 61 62 61  |,"Copy "+$databa|
0002e4a0  73 65 25 2b 22 2e 43 6f  6c 6f 75 72 73 20 22 2b  |se%+".Colours "+|
0002e4b0  66 24 2b 22 2e 43 6f 6c  6f 75 72 73 20 7e 43 7e  |f$+".Colours ~C~|
0002e4c0  56 22 0d 19 f4 48 20 20  c8 99 20 22 4f 53 5f 43  |V"...H  .. "OS_C|
0002e4d0  4c 49 22 2c 22 43 6f 70  79 20 22 2b 24 64 61 74  |LI","Copy "+$dat|
0002e4e0  61 62 61 73 65 25 2b 22  2e 56 61 6c 54 61 62 6c  |abase%+".ValTabl|
0002e4f0  65 73 20 22 2b 66 24 2b  22 2e 56 61 6c 54 61 62  |es "+f$+".ValTab|
0002e500  6c 65 73 20 7e 43 52 7e  56 22 0d 19 f5 44 20 20  |les ~CR~V"...D  |
0002e510  c8 99 20 22 4f 53 5f 43  4c 49 22 2c 22 43 6f 70  |.. "OS_CLI","Cop|
0002e520  79 20 22 2b 24 64 61 74  61 62 61 73 65 25 2b 22  |y "+$database%+"|
0002e530  2e 49 6e 64 69 63 65 73  20 22 2b 66 24 2b 22 2e  |.Indices "+f$+".|
0002e540  49 6e 64 69 63 65 73 20  7e 43 52 7e 56 22 0d 19  |Indices ~CR~V"..|
0002e550  f6 46 20 20 c8 99 20 22  4f 53 5f 43 4c 49 22 2c  |.F  .. "OS_CLI",|
0002e560  22 43 6f 70 79 20 22 2b  24 64 61 74 61 62 61 73  |"Copy "+$databas|
0002e570  65 25 2b 22 2e 50 72 69  6e 74 52 65 73 20 22 2b  |e%+".PrintRes "+|
0002e580  66 24 2b 22 2e 50 72 69  6e 74 52 65 73 20 7e 43  |f$+".PrintRes ~C|
0002e590  52 7e 56 22 0d 19 f7 1b  20 20 e7 20 6c 69 6e 6b  |R~V"....  . link|
0002e5a0  24 28 30 29 3d 22 4c 4f  41 44 45 44 22 20 8c 0d  |$(0)="LOADED" ..|
0002e5b0  19 f8 18 20 20 20 20 6c  6b 3d ae 28 66 24 2b 22  |...    lk=.(f$+"|
0002e5c0  2e 4c 69 6e 6b 22 29 0d  19 f9 19 20 20 20 20 e3  |.Link")....    .|
0002e5d0  20 46 25 3d 31 20 b8 20  64 66 69 65 6c 64 73 25  | F%=1 . dfields%|
0002e5e0  0d 19 fa 15 20 20 20 20  20 20 f1 23 6c 6b 2c 6c  |....      .#lk,l|
0002e5f0  24 28 46 25 29 0d 19 fb  0c 20 20 20 20 ed 20 46  |$(F%)....    . F|
0002e600  25 0d 19 fc 17 20 20 20  20 f2 63 6c 6f 73 65 5f  |%....    .close_|
0002e610  66 69 6c 65 28 6c 6b 29  0d 19 fd 07 20 20 cd 0d  |file(lk)....  ..|
0002e620  19 fe 1b 20 20 e7 20 63  61 6c 63 24 28 30 29 3d  |...  . calc$(0)=|
0002e630  22 4c 4f 41 44 45 44 22  20 8c 0d 19 ff 18 20 20  |"LOADED" .....  |
0002e640  20 20 63 6c 3d ae 28 66  24 2b 22 2e 43 61 6c 63  |  cl=.(f$+".Calc|
0002e650  22 29 0d 1a 00 19 20 20  20 20 e3 20 46 25 3d 31  |")....    . F%=1|
0002e660  20 b8 20 64 66 69 65 6c  64 73 25 0d 1a 01 15 20  | . dfields%.... |
0002e670  20 20 20 20 20 f1 23 63  6c 2c 63 24 28 46 25 29  |     .#cl,c$(F%)|
0002e680  0d 1a 02 0c 20 20 20 20  ed 20 46 25 0d 1a 03 17  |....    . F%....|
0002e690  20 20 20 20 f2 63 6c 6f  73 65 5f 66 69 6c 65 28  |    .close_file(|
0002e6a0  63 6c 29 0d 1a 04 07 20  20 cd 0d 1a 05 1d 20 20  |cl)....  .....  |
0002e6b0  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 72 65  |.close_window(re|
0002e6c0  66 6f 72 6d 57 25 29 0d  1a 06 05 cb 0d 1a 07 0e  |formW%).........|
0002e6d0  72 65 66 6f 72 6d 24 3d  22 22 0d 1a 08 44 e7 20  |reform$=""...D. |
0002e6e0  a4 73 65 6c 65 63 74 65  64 28 70 61 73 73 57 25  |.selected(passW%|
0002e6f0  2c 31 36 29 20 8c 20 d5  23 6c 6f 67 68 61 6e 64  |,16) . .#loghand|
0002e700  6c 65 25 2c 22 52 65 63  6f 72 64 20 73 74 72 75  |le%,"Record stru|
0002e710  63 74 75 72 65 20 63 68  61 6e 67 65 64 22 0d 1a  |cture changed"..|
0002e720  09 05 e1 0d 1a 0a 05 3a  0d 1a 0b 0e dd 20 f2 63  |.......:..... .c|
0002e730  6f 6d 70 61 72 65 0d 1a  0c 13 ea 20 73 6f 75 72  |ompare..... sour|
0002e740  63 65 25 2c 64 65 73 74  25 0d 1a 0d 18 e3 20 64  |ce%,dest%..... d|
0002e750  65 73 74 25 3d 31 20 b8  20 64 66 69 65 6c 64 73  |est%=1 . dfields|
0002e760  25 0d 1a 0e 17 20 20 73  6f 75 72 63 65 25 3d 66  |%....  source%=f|
0002e770  69 65 6c 64 73 25 2b 31  0d 1a 0f 07 20 20 f5 0d  |ields%+1....  ..|
0002e780  1a 10 12 20 20 20 20 73  6f 75 72 63 65 25 2d 3d  |...    source%-=|
0002e790  31 0d 1a 11 2e 20 20 fd  20 73 6f 75 72 63 65 25  |1....  . source%|
0002e7a0  3d 30 20 84 20 54 61 67  24 28 73 6f 75 72 63 65  |=0 . Tag$(source|
0002e7b0  25 29 3d 44 54 61 67 24  28 64 65 73 74 25 29 0d  |%)=DTag$(dest%).|
0002e7c0  1a 12 2a 20 20 46 25 28  64 65 73 74 25 29 3d 73  |..*  F%(dest%)=s|
0002e7d0  6f 75 72 63 65 25 3a 46  31 25 28 73 6f 75 72 63  |ource%:F1%(sourc|
0002e7e0  65 25 29 3d 64 65 73 74  25 0d 1a 13 13 20 20 e7  |e%)=dest%....  .|
0002e7f0  20 73 6f 75 72 63 65 25  3e 30 20 8c 0d 1a 14 20  | source%>0 .... |
0002e800  20 20 20 20 6c 24 28 64  65 73 74 25 29 3d 6c 69  |    l$(dest%)=li|
0002e810  6e 6b 24 28 73 6f 75 72  63 65 25 29 0d 1a 15 20  |nk$(source%)... |
0002e820  20 20 20 20 63 24 28 64  65 73 74 25 29 3d 63 61  |    c$(dest%)=ca|
0002e830  6c 63 24 28 73 6f 75 72  63 65 25 29 0d 1a 16 07  |lc$(source%)....|
0002e840  20 20 cd 0d 1a 17 0b ed  20 64 65 73 74 25 0d 1a  |  ...... dest%..|
0002e850  18 05 e1 0d 1a 19 05 3a  0d 1a 1a 1a dd 20 f2 6d  |.......:..... .m|
0002e860  65 72 67 65 5f 66 69 6c  65 73 28 66 24 2c 66 69  |erge_files(f$,fi|
0002e870  25 29 0d 1a 1b 37 ea 20  52 65 63 25 2c 70 74 72  |%)...7. Rec%,ptr|
0002e880  25 2c 66 69 6c 65 25 2c  64 25 2c 73 25 2c 7a 25  |%,file%,d%,s%,z%|
0002e890  2c 52 55 4d 25 2c 52 41  4d 25 2c 4e 4c 25 2c 65  |,RUM%,RAM%,NL%,e|
0002e8a0  78 25 2c 62 6c 6f 62 73  25 0d 1a 1c 26 c8 99 20  |x%,blobs%...&.. |
0002e8b0  22 4f 53 5f 46 69 6c 65  22 2c 35 2c 66 24 2b 22  |"OS_File",5,f$+"|
0002e8c0  2e 44 61 74 61 62 61 73  65 22 20 b8 20 7a 25 0d  |.Database" . z%.|
0002e8d0  1a 1d 0a c8 8e 20 b9 20  ca 0d 1a 1e 1f 20 20 c9  |..... . .....  .|
0002e8e0  20 7a 25 3c 3e 31 3a f2  73 6f 66 74 65 72 72 6f  | z%<>1:.softerro|
0002e8f0  72 28 22 22 2c 32 39 29  0d 1a 1f 27 20 20 c9 20  |r("",29)...'  . |
0002e900  66 24 3d 24 64 61 74 61  62 61 73 65 25 3a f2 73  |f$=$database%:.s|
0002e910  6f 66 74 65 72 72 6f 72  28 22 22 2c 31 35 29 0d  |ofterror("",15).|
0002e920  1a 20 26 20 20 c9 20 ac  20 a4 69 64 65 6e 74 69  |. &  . . .identi|
0002e930  63 61 6c 3a f2 73 6f 66  74 65 72 72 6f 72 28 22  |cal:.softerror("|
0002e940  22 2c 32 31 29 0d 1a 21  07 20 20 7f 0d 1a 22 37  |",21)..!.  ..."7|
0002e950  20 20 73 25 3d a4 73 65  6c 65 63 74 65 64 28 72  |  s%=.selected(r|
0002e960  65 66 6f 72 6d 57 25 2c  32 29 3a 64 25 3d a4 73  |eformW%,2):d%=.s|
0002e970  65 6c 65 63 74 65 64 28  72 65 66 6f 72 6d 57 25  |elected(reformW%|
0002e980  2c 33 29 0d 1a 23 12 20  20 e7 20 64 25 20 8c 20  |,3)..#.  . d% . |
0002e990  66 69 25 3d 30 0d 1a 24  1d 20 20 4d 24 3d 22 4d  |fi%=0..$.  M$="M|
0002e9a0  65 72 67 65 20 22 2b 66  24 2b 22 20 77 69 74 68  |erge "+f$+" with|
0002e9b0  20 22 0d 1a 25 41 20 20  e7 20 73 25 20 8c 20 4d  | "..%A  . s% . M|
0002e9c0  24 2b 3d 22 63 6f 72 72  65 73 70 6f 6e 64 69 6e  |$+="correspondin|
0002e9d0  67 20 73 75 62 66 69 6c  65 73 22 20 8b 20 4d 24  |g subfiles" . M$|
0002e9e0  2b 3d 22 73 75 62 66 69  6c 65 20 22 2b c3 28 66  |+="subfile "+.(f|
0002e9f0  69 25 29 0d 1a 26 20 20  20 4d 24 2b 3d 22 20 6f  |i%)..&   M$+=" o|
0002ea00  66 20 63 75 72 72 65 6e  74 20 64 61 74 61 62 61  |f current databa|
0002ea10  73 65 22 0d 1a 27 33 20  20 e7 20 64 25 20 8c 20  |se"..'3  . d% . |
0002ea20  4d 24 2b 3d 22 2c 20 61  6c 73 6f 20 72 65 73 74  |M$+=", also rest|
0002ea30  6f 72 69 6e 67 20 64 65  6c 65 74 65 64 20 72 65  |oring deleted re|
0002ea40  63 6f 72 64 73 22 0d 1a  28 42 20 20 e7 20 64 25  |cords"..(B  . d%|
0002ea50  20 84 20 ac 20 73 25 20  8c 20 4d 24 2b 3d 22 2e  | . . s% . M$+=".|
0002ea60  20 57 41 52 4e 49 4e 47  21 20 49 6e 64 69 63 65  | WARNING! Indice|
0002ea70  73 20 77 69 6c 6c 20 6e  65 65 64 20 72 65 62 75  |s will need rebu|
0002ea80  69 6c 64 69 6e 67 21 22  0d 1a 29 18 20 20 e7 20  |ilding!"..).  . |
0002ea90  a4 63 6f 6e 66 69 72 6d  28 4d 24 29 3d b9 20 8c  |.confirm(M$)=. .|
0002eaa0  0d 1a 2a 30 20 20 20 20  c8 99 20 22 4f 53 5f 46  |..*0    .. "OS_F|
0002eab0  69 6c 65 22 2c 35 2c 66  24 2b 22 2e 44 61 74 61  |ile",5,f$+".Data|
0002eac0  62 61 73 65 22 20 b8 20  2c 2c 2c 2c 6c 65 6e 25  |base" . ,,,,len%|
0002ead0  0d 1a 2b 1f 20 20 20 20  52 41 4d 25 3d 28 6c 65  |..+.    RAM%=(le|
0002eae0  6e 25 20 81 20 4c 65 6e  67 74 68 25 29 2d 31 0d  |n% . Length%)-1.|
0002eaf0  1a 2c 30 20 20 20 20 f2  6f 70 65 6e 5f 69 6e 64  |.,0    .open_ind|
0002eb00  65 78 28 66 24 2b 22 2e  50 72 69 6d 61 72 79 4b  |ex(f$+".PrimaryK|
0002eb10  65 79 22 2c 4d 61 78 4b  65 79 73 25 2b 31 29 0d  |ey",MaxKeys%+1).|
0002eb20  1a 2d 30 20 20 20 20 f2  6d 61 72 6b 5f 66 69 6c  |.-0    .mark_fil|
0002eb30  65 73 28 4d 61 78 4b 65  79 73 25 2b 31 2c 52 41  |es(MaxKeys%+1,RA|
0002eb40  4d 25 2c ac 20 64 25 2c  73 25 2c 66 69 25 29 0d  |M%,. d%,s%,fi%).|
0002eb50  1a 2e 28 20 20 20 20 6b  65 79 62 61 73 65 25 3d  |..(    keybase%=|
0002eb60  21 6b 65 79 61 6e 63 68  6f 72 25 28 4d 61 78 4b  |!keyanchor%(MaxK|
0002eb70  65 79 73 25 2b 31 29 0d  1a 2f 2d 20 20 20 20 f2  |eys%+1)../-    .|
0002eb80  63 6f 75 6e 74 28 4d 61  78 4b 65 79 73 25 2b 31  |count(MaxKeys%+1|
0002eb90  2c 52 55 4d 25 29 3a f2  63 6f 75 6e 74 28 30 2c  |,RUM%):.count(0,|
0002eba0  52 55 25 29 0d 1a 30 14  20 20 20 20 4e 4c 25 3d  |RU%)..0.    NL%=|
0002ebb0  52 55 25 2b 52 55 4d 25  0d 1a 31 19 20 20 20 20  |RU%+RUM%..1.    |
0002ebc0  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 4f 6e  |.. "Hourglass_On|
0002ebd0  22 0d 1a 32 29 20 20 20  20 e7 20 4e 4c 25 3e 52  |"..2)    . NL%>R|
0002ebe0  41 25 20 8c 20 f2 63 68  61 6e 67 65 5f 6c 65 6e  |A% . .change_len|
0002ebf0  67 74 68 28 4e 4c 25 2c  a3 29 0d 1a 33 26 20 20  |gth(NL%,.)..3&  |
0002ec00  20 20 62 6c 6f 62 73 25  3d a4 66 69 6e 64 5f 62  |  blobs%=.find_b|
0002ec10  6c 6f 62 73 28 24 64 61  74 61 62 61 73 65 25 29  |lobs($database%)|
0002ec20  0d 1a 34 19 20 20 20 20  70 74 72 25 3d 21 74 65  |..4.    ptr%=!te|
0002ec30  6d 70 61 6e 63 68 6f 72  25 0d 1a 35 19 20 20 20  |mpanchor%..5.   |
0002ec40  20 e3 20 52 65 63 25 3d  30 20 b8 20 52 41 4d 25  | . Rec%=0 . RAM%|
0002ec50  2d 31 0d 1a 36 19 20 20  20 20 20 20 66 69 6c 65  |-1..6.      file|
0002ec60  25 3d 70 74 72 25 3f 52  65 63 25 0d 1a 37 18 20  |%=ptr%?Rec%..7. |
0002ec70  20 20 20 20 20 e7 20 66  69 6c 65 25 3c 3e 32 35  |     . file%<>25|
0002ec80  35 20 8c 0d 1a 38 1b 20  20 20 20 20 20 20 20 74  |5 ...8.        t|
0002ec90  6f 70 3d 38 2a 66 69 6c  65 25 2b 4c 48 25 0d 1a  |op=8*file%+LH%..|
0002eca0  39 24 20 20 20 20 20 20  20 20 f2 72 65 61 64 28  |9$        .read(|
0002ecb0  66 69 65 6c 64 73 25 2c  a3 2c 52 65 63 25 2c 66  |fields%,.,Rec%,f|
0002ecc0  24 29 0d 1a 3a 20 20 20  20 20 20 20 20 20 f2 77  |$)..:         .w|
0002ecd0  72 69 74 65 28 66 69 65  6c 64 73 25 2c 6b 65 79  |rite(fields%,key|
0002ece0  25 29 0d 1a 3b 12 20 20  20 20 20 20 20 20 65 78  |%)..;.        ex|
0002ecf0  25 3d 2d 31 0d 1a 3c 19  20 20 20 20 20 20 20 20  |%=-1..<.        |
0002ed00  c8 95 20 65 78 25 3c 62  6c 6f 62 73 25 0d 1a 3d  |.. ex%<blobs%..=|
0002ed10  21 20 20 20 20 20 20 20  20 20 20 65 78 25 2b 3d  |!          ex%+=|
0002ed20  31 3a 46 25 3d 45 78 74  25 28 65 78 25 29 0d 1a  |1:F%=Ext%(ex%)..|
0002ed30  3e 45 20 20 20 20 20 20  20 20 20 20 f2 63 6f 70  |>E          .cop|
0002ed40  79 5f 62 6c 6f 62 28 66  24 2c 24 64 61 74 61 62  |y_blob(f$,$datab|
0002ed50  61 73 65 25 2c 52 65 63  25 2c 52 45 43 25 2c 46  |ase%,Rec%,REC%,F|
0002ed60  25 2c 46 25 2c 63 68 61  72 74 79 70 65 25 28 46  |%,F%,chartype%(F|
0002ed70  25 29 29 0d 1a 3f 0d 20  20 20 20 20 20 20 20 ce  |%))..?.        .|
0002ed80  0d 1a 40 37 20 20 20 20  20 20 20 20 c8 99 20 22  |..@7        .. "|
0002ed90  48 6f 75 72 67 6c 61 73  73 5f 50 65 72 63 65 6e  |Hourglass_Percen|
0002eda0  74 61 67 65 22 2c 28 52  65 63 25 2a 31 30 30 29  |tage",(Rec%*100)|
0002edb0  20 81 20 52 55 4d 25 0d  1a 41 0b 20 20 20 20 20  | . RUM%..A.     |
0002edc0  20 cd 0d 1a 42 0e 20 20  20 20 ed 20 52 65 63 25  | ...B.    . Rec%|
0002edd0  0d 1a 43 1a 20 20 20 20  c8 99 20 22 48 6f 75 72  |..C.    .. "Hour|
0002ede0  67 6c 61 73 73 5f 4f 66  66 22 0d 1a 44 1f 20 20  |glass_Off"..D.  |
0002edf0  20 20 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |  .close_window(|
0002ee00  72 65 66 6f 72 6d 57 25  29 0d 1a 45 29 20 20 20  |reformW%)..E)   |
0002ee10  20 f2 73 63 72 61 70 5f  73 6c 69 64 69 6e 67 5f  | .scrap_sliding_|
0002ee20  62 6c 6f 63 6b 28 74 65  6d 70 61 6e 63 68 6f 72  |block(tempanchor|
0002ee30  25 29 0d 1a 46 34 20 20  20 20 f2 73 63 72 61 70  |%)..F4    .scrap|
0002ee40  5f 73 6c 69 64 69 6e 67  5f 62 6c 6f 63 6b 28 6b  |_sliding_block(k|
0002ee50  65 79 61 6e 63 68 6f 72  25 28 4d 61 78 4b 65 79  |eyanchor%(MaxKey|
0002ee60  73 25 2b 31 29 29 0d 1a  47 21 20 20 20 20 66 69  |s%+1))..G!    fi|
0002ee70  6c 65 25 3d 66 69 25 3a  74 6f 70 3d 38 2a 66 69  |le%=fi%:top=8*fi|
0002ee80  6c 65 25 2b 4c 48 25 0d  1a 48 20 20 20 20 20 61  |le%+LH%..H     a|
0002ee90  64 64 72 3d a4 6d 6f 76  65 74 6f 28 6b 65 79 25  |ddr=.moveto(key%|
0002eea0  2c 74 6f 70 2c 31 29 0d  1a 49 07 20 20 cd 0d 1a  |,top,1)..I.  ...|
0002eeb0  4a 05 cb 0d 1a 4b 0e 72  65 66 6f 72 6d 24 3d 22  |J....K.reform$="|
0002eec0  22 0d 1a 4c 43 e7 20 a4  73 65 6c 65 63 74 65 64  |"..LC. .selected|
0002eed0  28 70 61 73 73 57 25 2c  31 36 29 20 8c 20 d5 23  |(passW%,16) . .#|
0002eee0  6c 6f 67 68 61 6e 64 6c  65 25 2c 22 52 65 63 6f  |loghandle%,"Reco|
0002eef0  72 64 73 20 6d 65 72 67  65 64 20 66 72 6f 6d 20  |rds merged from |
0002ef00  22 2b 66 24 0d 1a 4d 05  e1 0d 1a 4e 05 3a 0d 1a  |"+f$..M....N.:..|
0002ef10  4f 10 dd 20 a4 69 64 65  6e 74 69 63 61 6c 0d 1a  |O.. .identical..|
0002ef20  50 1e ea 20 49 25 2c 46  2c 64 66 69 65 6c 64 73  |P.. I%,F,dfields|
0002ef30  25 2c 64 69 66 66 65 72  65 6e 74 25 0d 1a 51 13  |%,different%..Q.|
0002ef40  46 3d 8e 28 66 24 2b 22  2e 46 6f 72 6d 22 29 0d  |F=.(f$+".Form").|
0002ef50  1a 52 10 e8 23 46 2c 64  66 69 65 6c 64 73 25 0d  |.R..#F,dfields%.|
0002ef60  1a 53 26 e7 20 64 66 69  65 6c 64 73 25 3c 3e 66  |.S&. dfields%<>f|
0002ef70  69 65 6c 64 73 25 20 8c  20 64 69 66 66 65 72 65  |ields% . differe|
0002ef80  6e 74 25 3d b9 0d 1a 54  20 c8 95 20 49 25 3c 66  |nt%=...T .. I%<f|
0002ef90  69 65 6c 64 73 25 20 80  20 ac 20 64 69 66 66 65  |ields% . . diffe|
0002efa0  72 65 6e 74 25 0d 1a 55  0b 20 20 49 25 2b 3d 31  |rent%..U.  I%+=1|
0002efb0  0d 1a 56 3d 20 20 e8 23  46 2c 44 65 73 63 24 2c  |..V=  .#F,Desc$,|
0002efc0  54 61 67 24 2c 78 64 25  2c 79 64 25 2c 78 66 25  |Tag$,xd%,yd%,xf%|
0002efd0  2c 79 66 25 2c 6c 65 6e  25 2c 63 68 61 72 25 2c  |,yf%,len%,char%,|
0002efe0  65 78 74 72 61 25 2c 65  78 74 72 61 25 0d 1a 57  |extra%,extra%..W|
0002eff0  25 20 20 e7 20 6c 65 6e  25 3c 3e 6c 65 6e 25 28  |%  . len%<>len%(|
0002f000  49 25 29 20 8c 20 64 69  66 66 65 72 65 6e 74 25  |I%) . different%|
0002f010  3d b9 0d 1a 58 05 ce 0d  1a 59 07 d9 23 46 0d 1a  |=...X....Y..#F..|
0002f020  5a 11 3d ac 20 64 69 66  66 65 72 65 6e 74 25 0d  |Z.=. different%.|
0002f030  1a 5b 05 3a 0d 1a 5c 24  dd 20 f2 6d 61 72 6b 5f  |.[.:..\$. .mark_|
0002f040  66 69 6c 65 73 28 6b 65  79 25 2c 52 41 25 2c 64  |files(key%,RA%,d|
0002f050  25 2c 73 25 2c 66 25 29  0d 1a 5d 1c ea 20 50 25  |%,s%,f%)..].. P%|
0002f060  2c 49 25 2c 4d 2c 66 69  6c 65 25 2c 74 6f 70 2c  |,I%,M,file%,top,|
0002f070  70 74 72 25 0d 1a 5e 32  f2 63 72 65 61 74 65 5f  |ptr%..^2.create_|
0002f080  6e 61 6d 65 64 5f 73 6c  69 64 69 6e 67 5f 62 6c  |named_sliding_bl|
0002f090  6f 63 6b 28 74 65 6d 70  61 6e 63 68 6f 72 25 2c  |ock(tempanchor%,|
0002f0a0  52 41 25 2b 31 29 0d 1a  5f 15 c8 99 20 22 48 6f  |RA%+1).._... "Ho|
0002f0b0  75 72 67 6c 61 73 73 5f  4f 6e 22 0d 1a 60 15 70  |urglass_On"..`.p|
0002f0c0  74 72 25 3d 21 74 65 6d  70 61 6e 63 68 6f 72 25  |tr%=!tempanchor%|
0002f0d0  0d 1a 61 12 e3 20 49 25  3d 30 20 b8 20 52 41 25  |..a.. I%=0 . RA%|
0002f0e0  2d 31 0d 1a 62 10 20 20  70 74 72 25 3f 49 25 3d  |-1..b.  ptr%?I%=|
0002f0f0  64 25 0d 1a 63 08 ed 20  49 25 0d 1a 64 0a e7 20  |d%..c.. I%..d.. |
0002f100  64 25 20 8c 0d 1a 65 13  20 20 e3 20 66 69 6c 65  |d% ...e.  . file|
0002f110  25 3d 30 20 b8 20 35 0d  1a 66 17 20 20 20 20 74  |%=0 . 5..f.    t|
0002f120  6f 70 3d 38 2a 66 69 6c  65 25 2b 4c 48 25 0d 1a  |op=8*file%+LH%..|
0002f130  67 21 20 20 20 20 50 25  3d a4 6e 65 69 67 68 62  |g!    P%=.neighb|
0002f140  6f 75 72 28 6b 65 79 25  2c 74 6f 70 2c 31 29 0d  |our(key%,top,1).|
0002f150  1a 68 12 20 20 20 20 c8  95 20 50 25 3c 3e 74 6f  |.h.    .. P%<>to|
0002f160  70 0d 1a 69 20 20 20 20  20 20 20 53 25 3d a4 72  |p..i       S%=.r|
0002f170  65 63 5f 6e 6f 28 6b 24  2c 6b 65 79 25 2c 50 25  |ec_no(k$,key%,P%|
0002f180  29 0d 1a 6a 2b 20 20 20  20 20 20 e7 20 73 25 20  |)..j+      . s% |
0002f190  8c 20 70 74 72 25 3f 53  25 3d 66 69 6c 65 25 20  |. ptr%?S%=file% |
0002f1a0  8b 20 70 74 72 25 3f 53  25 3d 66 25 0d 1a 6b 22  |. ptr%?S%=f%..k"|
0002f1b0  20 20 20 20 20 20 50 25  3d a4 6e 65 69 67 68 62  |      P%=.neighb|
0002f1c0  6f 75 72 28 6b 65 79 25  2c 50 25 2c 31 29 0d 1a  |our(key%,P%,1)..|
0002f1d0  6c 09 20 20 20 20 ce 0d  1a 6d 0d 20 20 ed 20 66  |l.    ...m.  . f|
0002f1e0  69 6c 65 25 0d 1a 6e 05  cd 0d 1a 6f 16 c8 99 20  |ile%..n....o... |
0002f1f0  22 48 6f 75 72 67 6c 61  73 73 5f 4f 66 66 22 0d  |"Hourglass_Off".|
0002f200  1a 70 05 e1 0d 1a 71 05  3a 0d 1a 72 21 dd 20 f2  |.p....q.:..r!. .|
0002f210  70 72 69 6e 74 5f 74 72  65 65 28 6b 65 79 25 2c  |print_tree(key%,|
0002f220  66 69 6c 65 25 2c 50 52  24 29 0d 1a 73 1e ea 20  |file%,PR$)..s.. |
0002f230  4c 25 28 29 2c 43 4f 4c  25 2c 6c 65 76 65 6c 73  |L%(),COL%,levels|
0002f240  25 2c 64 65 70 74 68 25  0d 1a 74 17 f2 72 65 61  |%,depth%..t..rea|
0002f250  64 5f 70 72 69 6e 74 5f  6f 70 74 69 6f 6e 73 0d  |d_print_options.|
0002f260  1a 75 18 72 65 70 6f 72  74 64 65 73 74 24 3d 22  |.u.reportdest$="|
0002f270  57 69 6e 64 6f 77 22 0d  1a 76 1e 6b 65 79 62 61  |Window"..v.keyba|
0002f280  73 65 25 3d 21 6b 65 79  61 6e 63 68 6f 72 25 28  |se%=!keyanchor%(|
0002f290  6b 65 79 25 29 0d 1a 77  16 50 25 3d 21 28 6b 65  |key%)..w.P%=!(ke|
0002f2a0  79 62 61 73 65 25 2b 74  6f 70 29 0d 1a 78 15 c8  |ybase%+top)..x..|
0002f2b0  99 20 22 48 6f 75 72 67  6c 61 73 73 5f 4f 6e 22  |. "Hourglass_On"|
0002f2c0  0d 1a 79 13 f2 74 72 61  76 65 72 73 65 28 50 25  |..y..traverse(P%|
0002f2d0  2c a3 29 0d 1a 7a 1b 6c  65 76 65 6c 73 25 3d 64  |,.)..z.levels%=d|
0002f2e0  65 70 74 68 25 2d 32 3a  43 4f 4c 25 3d 30 0d 1a  |epth%-2:COL%=0..|
0002f2f0  7b 11 de 20 4c 25 28 6c  65 76 65 6c 73 25 29 0d  |{.. L%(levels%).|
0002f300  1a 7c 11 f2 74 72 65 65  5f 68 65 61 64 69 6e 67  |.|..tree_heading|
0002f310  0d 1a 7d 16 50 25 3d 21  28 6b 65 79 62 61 73 65  |..}.P%=!(keybase|
0002f320  25 2b 74 6f 70 29 0d 1a  7e 13 f2 74 72 61 76 65  |%+top)..~..trave|
0002f330  72 73 65 28 50 25 2c b9  29 0d 1a 7f 19 48 24 3d  |rse(P%,.)....H$=|
0002f340  22 20 4e 6f 2e 20 6e 6f  64 65 73 20 20 20 20 20  |" No. nodes     |
0002f350  31 22 0d 1a 80 1a 48 31  24 3d 22 20 4d 61 78 20  |1"....H1$=" Max |
0002f360  6e 6f 64 65 73 20 20 20  20 20 31 22 0d 1a 81 14  |nodes     1"....|
0002f370  e3 20 4c 25 3d 31 20 b8  20 6c 65 76 65 6c 73 25  |. L%=1 . levels%|
0002f380  0d 1a 82 0f 20 20 e7 20  4c 25 3c 34 30 20 8c 0d  |....  . L%<40 ..|
0002f390  1a 83 14 20 20 20 20 4c  24 3d c3 28 4c 25 28 4c  |...    L$=.(L%(L|
0002f3a0  25 29 29 0d 1a 84 1b 20  20 20 20 4c 24 3d c4 36  |%))....    L$=.6|
0002f3b0  2d a9 28 4c 24 29 2c 22  20 22 29 2b 4c 24 0d 1a  |-.(L$)," ")+L$..|
0002f3c0  85 12 20 20 20 20 4d 24  3d c3 28 32 5e 4c 25 29  |..    M$=.(2^L%)|
0002f3d0  0d 1a 86 30 20 20 20 20  e7 20 a9 28 4d 24 29 3e  |...0    . .(M$)>|
0002f3e0  35 20 8c 20 4d 24 3d 42  4c 24 20 8b 20 4d 24 3d  |5 . M$=BL$ . M$=|
0002f3f0  c4 36 2d a9 28 4d 24 29  2c 22 20 22 29 2b 4d 24  |.6-.(M$)," ")+M$|
0002f400  0d 1a 87 16 20 20 20 20  48 24 2b 3d 4c 24 3a 48  |....    H$+=L$:H|
0002f410  31 24 2b 3d 4d 24 0d 1a  88 07 20 20 cd 0d 1a 89  |1$+=M$....  ....|
0002f420  08 ed 20 4c 25 0d 1a 8a  11 f2 72 75 6c 65 5f 6f  |.. L%.....rule_o|
0002f430  66 66 28 34 35 29 0d 1a  8b 3a 24 28 21 6c 69 6e  |ff(45)...:$(!lin|
0002f440  65 61 6e 63 68 6f 72 25  29 3d 48 24 3a f2 6c 69  |eanchor%)=H$:.li|
0002f450  73 74 5f 6c 69 6e 65 28  2d 31 2c 6c 69 6e 65 61  |st_line(-1,linea|
0002f460  6e 63 68 6f 72 25 2c a9  28 48 24 29 2c 33 32 29  |nchor%,.(H$),32)|
0002f470  0d 1a 8c 3c 24 28 21 6c  69 6e 65 61 6e 63 68 6f  |...<$(!lineancho|
0002f480  72 25 29 3d 48 31 24 3a  f2 6c 69 73 74 5f 6c 69  |r%)=H1$:.list_li|
0002f490  6e 65 28 2d 31 2c 6c 69  6e 65 61 6e 63 68 6f 72  |ne(-1,lineanchor|
0002f4a0  25 2c a9 28 48 31 24 29  2c 33 32 29 0d 1a 8d 3c  |%,.(H1$),32)...<|
0002f4b0  24 28 21 6c 69 6e 65 61  6e 63 68 6f 72 25 29 3d  |$(!lineanchor%)=|
0002f4c0  4c 48 24 3a f2 6c 69 73  74 5f 6c 69 6e 65 28 2d  |LH$:.list_line(-|
0002f4d0  31 2c 6c 69 6e 65 61 6e  63 68 6f 72 25 2c a9 28  |1,lineanchor%,.(|
0002f4e0  4c 48 24 29 2c 33 32 29  0d 1a 8e 11 f2 72 75 6c  |LH$),32).....rul|
0002f4f0  65 5f 6f 66 66 28 34 35  29 0d 1a 8f 16 c8 99 20  |e_off(45)...... |
0002f500  22 48 6f 75 72 67 6c 61  73 73 5f 4f 66 66 22 0d  |"Hourglass_Off".|
0002f510  1a 90 1d 66 6f 72 6d 61  74 24 3d 22 74 72 65 65  |...format$="tree|
0002f520  22 3a 74 6b 65 79 25 3d  6b 65 79 25 0d 1a 91 10  |":tkey%=key%....|
0002f530  f2 73 63 72 65 65 6e 5f  6c 69 73 74 0d 1a 92 16  |.screen_list....|
0002f540  70 69 74 63 68 24 3d a4  70 69 74 63 68 28 22 32  |pitch$=.pitch("2|
0002f550  22 29 0d 1a 93 17 f2 6c  69 74 28 6d 65 6e 75 25  |").....lit(menu%|
0002f560  28 31 38 29 2c 31 2c a3  29 0d 1a 94 05 e1 0d 1a  |(18),1,.).......|
0002f570  95 05 3a 0d 1a 96 13 dd  20 f2 74 72 65 65 5f 68  |..:..... .tree_h|
0002f580  65 61 64 69 6e 67 0d 1a  97 10 ea 20 7a 65 72 6f  |eading..... zero|
0002f590  25 2c 6c 65 6e 25 0d 1a  98 0f 42 4c 24 3d c4 36  |%,len%....BL$=.6|
0002f5a0  2c 22 20 22 29 0d 1a 99  1a 4c 48 24 3d 22 20 4c  |," ")....LH$=" L|
0002f5b0  65 76 65 6c 20 4e 6f 2e  20 20 52 6f 6f 74 22 0d  |evel No.  Root".|
0002f5c0  1a 9a 14 e3 20 4c 25 3d  31 20 b8 20 6c 65 76 65  |.... L%=1 . leve|
0002f5d0  6c 73 25 0d 1a 9b 0e 20  20 4c 24 3d c3 28 4c 25  |ls%....  L$=.(L%|
0002f5e0  29 0d 1a 9c 19 20 20 e7  20 4c 25 3c 31 30 20 8c  |)....  . L%<10 .|
0002f5f0  20 4c 24 3d 22 30 22 2b  4c 24 0d 1a 9d 0f 20 20  | L$="0"+L$....  |
0002f600  e7 20 4c 25 3c 34 30 20  8c 0d 1a 9e 16 20 20 20  |. L%<40 .....   |
0002f610  20 4c 48 24 2b 3d 22 20  20 20 20 22 2b 4c 24 0d  | LH$+="    "+L$.|
0002f620  1a 9f 13 20 20 20 20 6c  65 6e 25 3d a9 28 4c 48  |...    len%=.(LH|
0002f630  24 29 0d 1a a0 07 20 20  cd 0d 1a a1 08 ed 20 4c  |$)....  ...... L|
0002f640  25 0d 1a a2 17 55 24 3d  22 20 22 2b c4 6c 65 6e  |%....U$=" "+.len|
0002f650  25 2d 31 2c 22 2d 22 29  0d 1a a3 13 4c 65 6e 4c  |%-1,"-")....LenL|
0002f660  69 6e 65 25 3d 6c 65 6e  25 2b 34 0d 1a a4 0c 43  |ine%=len%+4....C|
0002f670  6f 75 6e 74 25 3d 30 0d  1a a5 22 63 6f 75 6e 74  |ount%=0..."count|
0002f680  25 3d a4 63 6f 75 6e 74  5f 72 65 63 73 28 6b 65  |%=.count_recs(ke|
0002f690  79 25 2c 7a 65 72 6f 25  29 0d 1a a6 44 74 65 78  |y%,zero%)...Dtex|
0002f6a0  74 62 6c 6f 63 6b 73 69  7a 65 25 3d 28 63 6f 75  |tblocksize%=(cou|
0002f6b0  6e 74 25 2b 31 31 29 2a  4c 65 6e 4c 69 6e 65 25  |nt%+11)*LenLine%|
0002f6c0  3a 74 65 78 74 62 6c 6f  63 6b 69 6e 63 25 3d 74  |:textblockinc%=t|
0002f6d0  65 78 74 62 6c 6f 63 6b  73 69 7a 65 25 0d 1a a7  |extblocksize%...|
0002f6e0  3b f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  |;.extend_named_s|
0002f6f0  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 74 65 78  |liding_block(tex|
0002f700  74 61 6e 63 68 6f 72 25  2c 74 65 78 74 62 6c 6f  |tanchor%,textblo|
0002f710  63 6b 73 69 7a 65 25 29  0d 1a a8 37 f2 65 78 74  |cksize%)...7.ext|
0002f720  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
0002f730  67 5f 62 6c 6f 63 6b 28  6c 69 6e 65 61 6e 63 68  |g_block(lineanch|
0002f740  6f 72 25 2c 4c 65 6e 4c  69 6e 65 25 2b 34 29 0d  |or%,LenLine%+4).|
0002f750  1a a9 19 54 65 78 74 50  74 72 25 3d 21 74 65 78  |...TextPtr%=!tex|
0002f760  74 61 6e 63 68 6f 72 25  0d 1a aa 15 72 65 63 62  |tanchor%....recb|
0002f770  6c 6f 63 6b 73 69 7a 65  25 3d 34 30 30 0d 1a ab  |locksize%=400...|
0002f780  39 f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  |9.extend_named_s|
0002f790  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 72 65 63  |liding_block(rec|
0002f7a0  61 6e 63 68 6f 72 25 2c  72 65 63 62 6c 6f 63 6b  |anchor%,recblock|
0002f7b0  73 69 7a 65 25 29 0d 1a  ac 11 f2 72 75 6c 65 5f  |size%).....rule_|
0002f7c0  6f 66 66 28 33 32 29 0d  1a ad 11 f2 72 75 6c 65  |off(32).....rule|
0002f7d0  5f 6f 66 66 28 34 35 29  0d 1a ae 5a f2 73 65 6e  |_off(45)...Z.sen|
0002f7e0  64 5f 74 69 74 6c 65 28  22 54 72 65 65 20 41 6e  |d_title("Tree An|
0002f7f0  61 6c 79 73 69 73 20 28  73 75 62 66 69 6c 65 3a  |alysis (subfile:|
0002f800  22 2b c3 28 66 69 6c 65  25 29 2b 22 2c 20 6b 65  |"+.(file%)+", ke|
0002f810  79 3a 22 2b c3 28 6b 65  79 25 29 2b 22 2c 20 22  |y:"+.(key%)+", "|
0002f820  2b 49 6e 64 65 78 24 28  6b 65 79 25 29 2b 22 29  |+Index$(key%)+")|
0002f830  22 29 0d 1a af 11 f2 72  75 6c 65 5f 6f 66 66 28  |").....rule_off(|
0002f840  33 32 29 0d 1a b0 3c 24  28 21 6c 69 6e 65 61 6e  |32)...<$(!linean|
0002f850  63 68 6f 72 25 29 3d 4c  48 24 3a f2 6c 69 73 74  |chor%)=LH$:.list|
0002f860  5f 6c 69 6e 65 28 2d 31  2c 6c 69 6e 65 61 6e 63  |_line(-1,lineanc|
0002f870  68 6f 72 25 2c a9 28 4c  48 24 29 2c 33 32 29 0d  |hor%,.(LH$),32).|
0002f880  1a b1 11 f2 72 75 6c 65  5f 6f 66 66 28 34 35 29  |....rule_off(45)|
0002f890  0d 1a b2 05 e1 0d 1a b3  05 3a 0d 1a b4 16 dd 20  |.........:..... |
0002f8a0  f2 74 72 61 76 65 72 73  65 28 50 25 2c 5a 25 29  |.traverse(P%,Z%)|
0002f8b0  0d 1a b5 0d ea 20 73 74  72 69 6e 67 24 0d 1a b6  |..... string$...|
0002f8c0  0f 43 4f 4c 25 3d 43 4f  4c 25 2b 31 0d 1a b7 1f  |.COL%=COL%+1....|
0002f8d0  e7 20 43 4f 4c 25 3e 64  65 70 74 68 25 20 8c 20  |. COL%>depth% . |
0002f8e0  64 65 70 74 68 25 3d 43  4f 4c 25 0d 1a b8 0e e7  |depth%=COL%.....|
0002f8f0  20 50 25 3c 30 20 8c 20  e1 0d 1a b9 15 4c 25 3d  | P%<0 . .....L%=|
0002f900  21 28 6b 65 79 62 61 73  65 25 2b 50 25 29 0d 1a  |!(keybase%+P%)..|
0002f910  ba 17 52 25 3d 21 28 6b  65 79 62 61 73 65 25 2b  |..R%=!(keybase%+|
0002f920  50 25 2b 34 29 0d 1a bb  17 53 24 3d 24 28 6b 65  |P%+4)....S$=$(ke|
0002f930  79 62 61 73 65 25 2b 50  25 2b 38 29 0d 1a bc 19  |ybase%+P%+8)....|
0002f940  e7 20 53 24 3d 22 22 20  8c 20 53 24 3d 22 3c 6e  |. S$="" . S$="<n|
0002f950  75 6c 6c 3e 22 0d 1a bd  25 72 65 63 25 3d 21 28  |ull>"...%rec%=!(|
0002f960  6b 65 79 62 61 73 65 25  2b 50 25 2b 38 2b 4b 4c  |keybase%+P%+8+KL|
0002f970  25 28 6b 65 79 25 29 2b  31 29 0d 1a be 0a e7 20  |%(key%)+1)..... |
0002f980  5a 25 20 8c 0d 1a bf 1d  20 20 4c 25 28 43 4f 4c  |Z% .....  L%(COL|
0002f990  25 2d 31 29 3d 4c 25 28  43 4f 4c 25 2d 31 29 2b  |%-1)=L%(COL%-1)+|
0002f9a0  31 0d 1a c0 13 20 20 e7  20 50 52 24 3d 22 41 4c  |1....  . PR$="AL|
0002f9b0  4c 22 20 8c 0d 1a c1 14  20 20 20 20 e7 20 43 4f  |L" .....    . CO|
0002f9c0  4c 25 3c 3d 34 30 20 8c  0d 1a c2 2a 20 20 20 20  |L%<=40 ....*    |
0002f9d0  20 20 73 74 72 69 6e 67  24 3d c4 43 4f 4c 25 2a  |  string$=.COL%*|
0002f9e0  36 2b 31 30 2d a9 28 53  24 29 2c 22 20 22 29 2b  |6+10-.(S$)," ")+|
0002f9f0  53 24 0d 1a c3 4c 20 20  20 20 20 20 24 28 21 6c  |S$...L      $(!l|
0002fa00  69 6e 65 61 6e 63 68 6f  72 25 29 3d 73 74 72 69  |ineanchor%)=stri|
0002fa10  6e 67 24 3a f2 6c 69 73  74 5f 6c 69 6e 65 28 72  |ng$:.list_line(r|
0002fa20  65 63 25 2c 6c 69 6e 65  61 6e 63 68 6f 72 25 2c  |ec%,lineanchor%,|
0002fa30  a9 28 73 74 72 69 6e 67  24 29 2c 33 32 29 0d 1a  |.(string$),32)..|
0002fa40  c4 0b 20 20 20 20 20 20  cc 0d 1a c5 31 20 20 20  |..      ....1   |
0002fa50  20 20 20 73 74 72 69 6e  67 24 3d 22 20 22 2b 53  |   string$=" "+S|
0002fa60  24 2b 22 20 28 6c 65 76  65 6c 20 22 2b c3 28 43  |$+" (level "+.(C|
0002fa70  4f 4c 25 2d 31 29 2b 22  29 22 0d 1a c6 4c 20 20  |OL%-1)+")"...L  |
0002fa80  20 20 20 20 24 28 21 6c  69 6e 65 61 6e 63 68 6f  |    $(!lineancho|
0002fa90  72 25 29 3d 73 74 72 69  6e 67 24 3a f2 6c 69 73  |r%)=string$:.lis|
0002faa0  74 5f 6c 69 6e 65 28 72  65 63 25 2c 6c 69 6e 65  |t_line(rec%,line|
0002fab0  61 6e 63 68 6f 72 25 2c  a9 28 73 74 72 69 6e 67  |anchor%,.(string|
0002fac0  24 29 2c 33 32 29 0d 1a  c7 09 20 20 20 20 cd 0d  |$),32)....    ..|
0002fad0  1a c8 07 20 20 cd 0d 1a  c9 05 cd 0d 1a ca 14 f2  |...  ...........|
0002fae0  74 72 61 76 65 72 73 65  28 4c 25 2c 5a 25 29 0d  |traverse(L%,Z%).|
0002faf0  1a cb 0f 43 4f 4c 25 3d  43 4f 4c 25 2d 31 0d 1a  |...COL%=COL%-1..|
0002fb00  cc 15 4c 25 3d 21 28 6b  65 79 62 61 73 65 25 2b  |..L%=!(keybase%+|
0002fb10  50 25 29 0d 1a cd 17 52  25 3d 21 28 6b 65 79 62  |P%)....R%=!(keyb|
0002fb20  61 73 65 25 2b 50 25 2b  34 29 0d 1a ce 17 53 24  |ase%+P%+4)....S$|
0002fb30  3d 24 28 6b 65 79 62 61  73 65 25 2b 50 25 2b 38  |=$(keybase%+P%+8|
0002fb40  29 0d 1a cf 25 72 65 63  25 3d 21 28 6b 65 79 62  |)...%rec%=!(keyb|
0002fb50  61 73 65 25 2b 50 25 2b  38 2b 4b 4c 25 28 6b 65  |ase%+P%+8+KL%(ke|
0002fb60  79 25 29 2b 31 29 0d 1a  d0 14 f2 74 72 61 76 65  |y%)+1).....trave|
0002fb70  72 73 65 28 52 25 2c 5a  25 29 0d 1a d1 0f 43 4f  |rse(R%,Z%)....CO|
0002fb80  4c 25 3d 43 4f 4c 25 2d  31 0d 1a d2 05 e1 0d 1a  |L%=COL%-1.......|
0002fb90  d3 05 3a 0d 1a d4 14 dd  20 f2 62 61 6c 61 6e 63  |..:..... .balanc|
0002fba0  65 28 6b 65 79 25 29 0d  1a d5 54 ea 20 72 65 63  |e(key%)...T. rec|
0002fbb0  70 74 72 25 2c 74 6f 70  2c 66 69 6c 65 25 2c 66  |ptr%,top,file%,f|
0002fbc0  6c 61 67 70 74 72 25 2c  62 61 6c 70 74 72 25 2c  |lagptr%,balptr%,|
0002fbd0  49 25 2c 4e 25 2c 41 25  2c 6d 61 78 25 2c 64 6f  |I%,N%,A%,max%,do|
0002fbe0  6e 65 25 2c 68 69 67 68  65 73 74 25 2c 61 76 61  |ne%,highest%,ava|
0002fbf0  69 6c 25 2c 73 65 67 6c  65 6e 25 0d 1a d6 14 ea  |il%,seglen%.....|
0002fc00  20 72 65 63 73 25 28 29  2c 70 74 72 25 28 29 0d  | recs%(),ptr%().|
0002fc10  1a d7 16 de 20 72 65 63  73 25 28 35 29 2c 70 74  |.... recs%(5),pt|
0002fc20  72 25 28 35 29 0d 1a d8  0e 6e 65 77 74 72 65 65  |r%(5)....newtree|
0002fc30  25 3d b9 0d 1a d9 17 73  65 67 6c 65 6e 25 3d 4b  |%=.....seglen%=K|
0002fc40  4c 25 28 6b 65 79 25 29  2b 35 0d 1a da 37 f2 65  |L%(key%)+5...7.e|
0002fc50  78 74 65 6e 64 5f 6e 61  6d 65 64 5f 73 6c 69 64  |xtend_named_slid|
0002fc60  69 6e 67 5f 62 6c 6f 63  6b 28 72 65 63 61 6e 63  |ing_block(recanc|
0002fc70  68 6f 72 25 2c 73 65 67  6c 65 6e 25 2a 52 41 25  |hor%,seglen%*RA%|
0002fc80  29 0d 1a db 37 f2 63 72  65 61 74 65 5f 6e 61 6d  |)...7.create_nam|
0002fc90  65 64 5f 73 6c 69 64 69  6e 67 5f 62 6c 6f 63 6b  |ed_sliding_block|
0002fca0  28 62 61 6c 61 6e 63 68  6f 72 25 2c 73 65 67 6c  |(balanchor%,segl|
0002fcb0  65 6e 25 2a 52 41 25 29  0d 1a dc 30 f2 63 72 65  |en%*RA%)...0.cre|
0002fcc0  61 74 65 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |ate_named_slidin|
0002fcd0  67 5f 62 6c 6f 63 6b 28  66 6c 61 67 61 6e 63 68  |g_block(flaganch|
0002fce0  6f 72 25 2c 52 41 25 29  0d 1a dd 41 72 65 63 70  |or%,RA%)...Arecp|
0002fcf0  74 72 25 3d 21 72 65 63  61 6e 63 68 6f 72 25 3a  |tr%=!recanchor%:|
0002fd00  66 6c 61 67 70 74 72 25  3d 21 66 6c 61 67 61 6e  |flagptr%=!flagan|
0002fd10  63 68 6f 72 25 3a 62 61  6c 70 74 72 25 3d 21 62  |chor%:balptr%=!b|
0002fd20  61 6c 61 6e 63 68 6f 72  25 0d 1a de 12 e3 20 49  |alanchor%..... I|
0002fd30  25 3d 30 20 b8 20 52 41  25 2d 31 0d 1a df 15 20  |%=0 . RA%-1.... |
0002fd40  20 66 6c 61 67 70 74 72  25 3f 49 25 3d 32 35 35  | flagptr%?I%=255|
0002fd50  0d 1a e0 08 ed 20 49 25  0d 1a e1 3e f4 20 42 79  |..... I%...>. By|
0002fd60  74 65 73 20 61 72 65 20  63 68 61 6e 67 65 64 20  |tes are changed |
0002fd70  66 72 6f 6d 20 32 35 35  20 74 6f 20 30 20 77 68  |from 255 to 0 wh|
0002fd80  65 72 65 20 72 65 63 6f  72 64 73 20 61 72 65 20  |ere records are |
0002fd90  69 6e 20 75 73 65 0d 1a  e2 15 c8 99 20 22 48 6f  |in use...... "Ho|
0002fda0  75 72 67 6c 61 73 73 5f  4f 6e 22 0d 1a e3 11 e3  |urglass_On".....|
0002fdb0  20 66 69 6c 65 25 3d 30  20 b8 20 35 0d 1a e4 19  | file%=0 . 5....|
0002fdc0  20 20 70 74 72 25 28 66  69 6c 65 25 29 3d 72 65  |  ptr%(file%)=re|
0002fdd0  63 70 74 72 25 0d 1a e5  15 20 20 74 6f 70 3d 38  |cptr%....  top=8|
0002fde0  2a 66 69 6c 65 25 2b 4c  48 25 0d 1a e6 2e 20 20  |*file%+LH%....  |
0002fdf0  72 65 63 73 25 28 66 69  6c 65 25 29 3d a4 63 6f  |recs%(file%)=.co|
0002fe00  75 6e 74 5f 72 65 63 73  28 6b 65 79 25 2c 72 65  |unt_recs(key%,re|
0002fe10  63 70 74 72 25 29 2d 31  0d 1a e7 1a 20 20 6d 61  |cptr%)-1....  ma|
0002fe20  78 25 2b 3d 72 65 63 73  25 28 66 69 6c 65 25 29  |x%+=recs%(file%)|
0002fe30  2b 31 0d 1a e8 0b ed 20  66 69 6c 65 25 0d 1a e9  |+1..... file%...|
0002fe40  21 f2 6d 61 6b 65 5f 65  6d 70 74 79 5f 69 6e 64  |!.make_empty_ind|
0002fe50  65 78 28 52 41 25 2c 6b  65 79 25 2c a3 29 0d 1a  |ex(RA%,key%,.)..|
0002fe60  ea 1b c8 99 20 22 48 6f  75 72 67 6c 61 73 73 5f  |.... "Hourglass_|
0002fe70  4c 45 44 73 22 2c 25 31  31 0d 1a eb 11 e3 20 66  |LEDs",%11..... f|
0002fe80  69 6c 65 25 3d 30 20 b8  20 35 0d 1a ec 15 20 20  |ile%=0 . 5....  |
0002fe90  74 6f 70 3d 38 2a 66 69  6c 65 25 2b 4c 48 25 0d  |top=8*file%+LH%.|
0002fea0  1a ed 19 20 20 e7 20 72  65 63 73 25 28 66 69 6c  |...  . recs%(fil|
0002feb0  65 25 29 3e 3d 30 20 8c  0d 1a ee 1b 20 20 20 20  |e%)>=0 .....    |
0002fec0  72 65 63 70 74 72 25 3d  70 74 72 25 28 66 69 6c  |recptr%=ptr%(fil|
0002fed0  65 25 29 0d 1a ef 0c 20  20 20 20 4e 25 3d 31 0d  |e%)....    N%=1.|
0002fee0  1a f0 09 20 20 20 20 f5  0d 1a f1 12 20 20 20 20  |...    .....    |
0002fef0  20 20 4e 25 3d 4e 25 2b  4e 25 0d 1a f2 1b 20 20  |  N%=N%+N%....  |
0002ff00  20 20 fd 20 4e 25 3e 72  65 63 73 25 28 66 69 6c  |  . N%>recs%(fil|
0002ff10  65 25 29 2b 32 0d 1a f3  10 20 20 20 20 73 74 65  |e%)+2....    ste|
0002ff20  70 25 3d 4e 25 0d 1a f4  15 20 20 20 20 4e 25 3d  |p%=N%....    N%=|
0002ff30  28 4e 25 20 81 20 32 29  2d 31 0d 1a f5 11 20 20  |(N% . 2)-1....  |
0002ff40  20 20 73 74 61 72 74 25  3d 4e 25 0d 1a f6 0c 20  |  start%=N%.... |
0002ff50  20 20 20 43 25 3d 30 0d  1a f7 09 20 20 20 20 f5  |   C%=0....    .|
0002ff60  0d 1a f8 1b 20 20 20 20  20 20 73 74 61 72 74 25  |....      start%|
0002ff70  3d 73 74 61 72 74 25 20  81 20 32 0d 1a f9 1a 20  |=start% . 2.... |
0002ff80  20 20 20 20 20 65 6e 64  25 3d 4e 25 2d 73 74 61  |     end%=N%-sta|
0002ff90  72 74 25 2d 31 0d 1a fa  19 20 20 20 20 20 20 73  |rt%-1....      s|
0002ffa0  74 65 70 25 3d 73 74 65  70 25 20 81 20 32 0d 1a  |tep%=step% . 2..|
0002ffb0  fb 24 20 20 20 20 20 20  e3 20 49 25 3d 73 74 61  |.$      . I%=sta|
0002ffc0  72 74 25 20 b8 20 65 6e  64 25 20 88 20 73 74 65  |rt% . end% . ste|
0002ffd0  70 25 0d 1a fc 39 20 20  20 20 20 20 20 20 41 25  |p%...9        A%|
0002ffe0  3d 72 65 63 70 74 72 25  2b 73 65 67 6c 65 6e 25  |=recptr%+seglen%|
0002fff0  2a 28 49 25 2a 28 72 65  63 73 25 28 66 69 6c 65  |*(I%*(recs%(file|
00030000  25 29 2b 31 29 20 81 20  4e 25 29 0d 1a fd 3d 20  |%)+1) . N%)...= |
00030010  20 20 20 20 20 20 20 62  61 6c 70 74 72 25 21 43  |       balptr%!C|
00030020  25 3d 21 41 25 3a 24 28  62 61 6c 70 74 72 25 2b  |%=!A%:$(balptr%+|
00030030  43 25 2b 34 29 3d 24 28  41 25 2b 34 29 3a 21 41  |C%+4)=$(A%+4):!A|
00030040  25 3d 2d 21 41 25 2d 31  0d 1a fe 17 20 20 20 20  |%=-!A%-1....    |
00030050  20 20 20 20 43 25 2b 3d  73 65 67 6c 65 6e 25 0d  |    C%+=seglen%.|
00030060  1a ff 0e 20 20 20 20 20  20 ed 20 49 25 0d 1b 00  |...      . I%...|
00030070  11 20 20 20 20 fd 20 73  74 65 70 25 3d 32 0d 1b  |.    . step%=2..|
00030080  01 26 20 20 20 20 6b 6c  25 3d 4b 4c 25 28 6b 65  |.&    kl%=KL%(ke|
00030090  79 25 29 3a 76 61 6c 24  3d a4 74 79 70 65 28 6b  |y%):val$=.type(k|
000300a0  65 79 25 29 0d 1b 02 25  20 20 20 20 e3 20 49 25  |ey%)...%    . I%|
000300b0  3d 30 20 b8 20 43 25 2d  73 65 67 6c 65 6e 25 20  |=0 . C%-seglen% |
000300c0  88 20 73 65 67 6c 65 6e  25 0d 1b 03 2e 20 20 20  |. seglen%....   |
000300d0  20 20 20 52 45 43 25 3d  62 61 6c 70 74 72 25 21  |   REC%=balptr%!|
000300e0  49 25 3a 4b 45 59 24 3d  24 28 62 61 6c 70 74 72  |I%:KEY$=$(balptr|
000300f0  25 2b 49 25 2b 34 29 0d  1b 04 1e 20 20 20 20 20  |%+I%+4)....     |
00030100  20 f2 69 6e 73 65 72 74  28 a3 2c 4b 45 59 24 2c  | .insert(.,KEY$,|
00030110  6b 65 79 25 29 0d 1b 05  12 20 20 20 20 20 20 64  |key%)....      d|
00030120  6f 6e 65 25 2b 3d 31 0d  1b 06 36 20 20 20 20 20  |one%+=1...6     |
00030130  20 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 50  | .. "Hourglass_P|
00030140  65 72 63 65 6e 74 61 67  65 22 2c 28 64 6f 6e 65  |ercentage",(done|
00030150  25 2a 31 30 30 29 20 81  20 6d 61 78 25 0d 1b 07  |%*100) . max%...|
00030160  0c 20 20 20 20 ed 20 49  25 0d 1b 08 1d 20 20 20  |.    . I%....   |
00030170  20 e3 20 49 25 3d 30 20  b8 20 72 65 63 73 25 28  | . I%=0 . recs%(|
00030180  66 69 6c 65 25 29 0d 1b  09 23 20 20 20 20 20 20  |file%)...#      |
00030190  52 45 43 25 3d 72 65 63  70 74 72 25 21 28 73 65  |REC%=recptr%!(se|
000301a0  67 6c 65 6e 25 2a 49 25  29 0d 1b 0a 15 20 20 20  |glen%*I%)....   |
000301b0  20 20 20 e7 20 52 45 43  25 3e 3d 30 20 8c 0d 1b  |   . REC%>=0 ...|
000301c0  0b 28 20 20 20 20 20 20  20 20 4b 45 59 24 3d 24  |.(        KEY$=$|
000301d0  28 72 65 63 70 74 72 25  2b 73 65 67 6c 65 6e 25  |(recptr%+seglen%|
000301e0  2a 49 25 2b 34 29 0d 1b  0c 20 20 20 20 20 20 20  |*I%+4)...       |
000301f0  20 20 f2 69 6e 73 65 72  74 28 a3 2c 4b 45 59 24  |  .insert(.,KEY$|
00030200  2c 6b 65 79 25 29 0d 1b  0d 14 20 20 20 20 20 20  |,key%)....      |
00030210  20 20 64 6f 6e 65 25 2b  3d 31 0d 1b 0e 38 20 20  |  done%+=1...8  |
00030220  20 20 20 20 20 20 c8 99  20 22 48 6f 75 72 67 6c  |      .. "Hourgl|
00030230  61 73 73 5f 50 65 72 63  65 6e 74 61 67 65 22 2c  |ass_Percentage",|
00030240  28 64 6f 6e 65 25 2a 31  30 30 29 20 81 20 6d 61  |(done%*100) . ma|
00030250  78 25 0d 1b 0f 0b 20 20  20 20 20 20 cd 0d 1b 10  |x%....      ....|
00030260  0c 20 20 20 20 ed 20 49  25 0d 1b 11 07 20 20 cd  |.    . I%....  .|
00030270  0d 1b 12 0b ed 20 66 69  6c 65 25 0d 1b 13 1b c8  |..... file%.....|
00030280  99 20 22 48 6f 75 72 67  6c 61 73 73 5f 4c 45 44  |. "Hourglass_LED|
00030290  73 22 2c 25 30 30 0d 1b  14 1e 6b 65 79 62 61 73  |s",%00....keybas|
000302a0  65 25 3d 21 6b 65 79 61  6e 63 68 6f 72 25 28 6b  |e%=!keyanchor%(k|
000302b0  65 79 25 29 0d 1b 15 1d  6e 6f 64 65 73 69 7a 65  |ey%)....nodesize|
000302c0  25 3d 38 2b 4b 4c 25 28  6b 65 79 25 29 2b 31 2b  |%=8+KL%(key%)+1+|
000302d0  34 0d 1b 16 14 61 76 61  69 6c 25 3d 21 6b 65 79  |4....avail%=!key|
000302e0  62 61 73 65 25 0d 1b 17  15 e3 20 49 25 3d 30 20  |base%..... I%=0 |
000302f0  b8 20 68 69 67 68 65 73  74 25 0d 1b 18 19 20 20  |. highest%....  |
00030300  e7 20 66 6c 61 67 70 74  72 25 3f 49 25 3d 32 35  |. flagptr%?I%=25|
00030310  35 20 8c 0d 1b 19 2b 20  20 20 20 21 28 6b 65 79  |5 ....+    !(key|
00030320  62 61 73 65 25 2b 61 76  61 69 6c 25 2b 38 2b 4b  |base%+avail%+8+K|
00030330  4c 25 28 6b 65 79 25 29  2b 31 29 3d 49 25 0d 1b  |L%(key%)+1)=I%..|
00030340  1a 19 20 20 20 20 61 76  61 69 6c 25 2b 3d 6e 6f  |..    avail%+=no|
00030350  64 65 73 69 7a 65 25 0d  1b 1b 07 20 20 cd 0d 1b  |desize%....  ...|
00030360  1c 08 ed 20 49 25 0d 1b  1d 16 c8 99 20 22 48 6f  |... I%...... "Ho|
00030370  75 72 67 6c 61 73 73 5f  4f 66 66 22 0d 1b 1e 24  |urglass_Off"...$|
00030380  f2 73 63 72 61 70 5f 73  6c 69 64 69 6e 67 5f 62  |.scrap_sliding_b|
00030390  6c 6f 63 6b 28 62 61 6c  61 6e 63 68 6f 72 25 29  |lock(balanchor%)|
000303a0  0d 1b 1f 24 f2 73 63 72  61 70 5f 73 6c 69 64 69  |...$.scrap_slidi|
000303b0  6e 67 5f 62 6c 6f 63 6b  28 72 65 63 61 6e 63 68  |ng_block(recanch|
000303c0  6f 72 25 29 0d 1b 20 25  f2 73 63 72 61 70 5f 73  |or%).. %.scrap_s|
000303d0  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 66 6c 61  |liding_block(fla|
000303e0  67 61 6e 63 68 6f 72 25  29 0d 1b 21 0e f2 73 61  |ganchor%)..!..sa|
000303f0  76 65 5f 6b 65 79 73 0d  1b 22 0e 6e 65 77 74 72  |ve_keys..".newtr|
00030400  65 65 25 3d a3 0d 1b 23  4b e7 20 a4 73 65 6c 65  |ee%=...#K. .sele|
00030410  63 74 65 64 28 70 61 73  73 57 25 2c 31 36 29 20  |cted(passW%,16) |
00030420  8c 20 d5 23 6c 6f 67 68  61 6e 64 6c 65 25 2c 22  |. .#loghandle%,"|
00030430  49 6e 64 65 78 20 22 2b  49 6e 64 65 78 24 28 6b  |Index "+Index$(k|
00030440  65 79 25 29 2b 22 20 62  61 6c 61 6e 63 65 64 22  |ey%)+" balanced"|
00030450  0d 1b 24 05 e1 0d 1b 25  05 3a 0d 1b 26 1f dd 20  |..$....%.:..&.. |
00030460  f2 64 75 70 6c 69 63 61  74 65 73 28 64 6b 65 79  |.duplicates(dkey|
00030470  25 2c 64 66 69 6c 65 25  29 0d 1b 27 37 ea 20 50  |%,dfile%)..'7. P|
00030480  24 2c 53 24 2c 52 50 24  2c 52 53 24 2c 64 61 64  |$,S$,RP$,RS$,dad|
00030490  64 72 2c 64 74 6f 70 2c  52 50 25 2c 52 53 25 2c  |dr,dtop,RP%,RS%,|
000304a0  63 6f 75 6e 74 25 2c 65  78 61 6d 69 6e 65 64 25  |count%,examined%|
000304b0  0d 1b 28 07 ea 20 85 0d  1b 29 1a ee 20 85 20 ea  |..(.. ...).. . .|
000304c0  3a f7 20 85 3a f2 61 62  6f 72 74 5f 64 75 70 3a  |:. .:.abort_dup:|
000304d0  e1 0d 1b 2a 22 63 6f 75  6e 74 25 3d a4 63 6f 75  |...*"count%=.cou|
000304e0  6e 74 5f 72 65 63 73 28  6b 65 79 25 2c 7a 65 72  |nt_recs(key%,zer|
000304f0  6f 25 29 0d 1b 2b 17 f2  72 65 61 64 5f 70 72 69  |o%)..+..read_pri|
00030500  6e 74 5f 6f 70 74 69 6f  6e 73 0d 1b 2c 42 72 65  |nt_options..,Bre|
00030510  70 6f 72 74 64 65 73 74  24 3d 22 57 69 6e 64 6f  |portdest$="Windo|
00030520  77 22 3a 66 6f 72 6d 61  74 24 3d 22 64 75 70 22  |w":format$="dup"|
00030530  3a 43 6f 75 6e 74 25 3d  30 3a 4c 65 6e 4c 69 6e  |:Count%=0:LenLin|
00030540  65 25 3d 4b 4c 25 28 30  29 2b 32 33 0d 1b 2d 3c  |e%=KL%(0)+23..-<|
00030550  74 65 78 74 62 6c 6f 63  6b 73 69 7a 65 25 3d 31  |textblocksize%=1|
00030560  30 30 2a 4c 65 6e 4c 69  6e 65 25 3a 74 65 78 74  |00*LenLine%:text|
00030570  62 6c 6f 63 6b 69 6e 63  25 3d 74 65 78 74 62 6c  |blockinc%=textbl|
00030580  6f 63 6b 73 69 7a 65 25  0d 1b 2e 3b f2 65 78 74  |ocksize%...;.ext|
00030590  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
000305a0  67 5f 62 6c 6f 63 6b 28  74 65 78 74 61 6e 63 68  |g_block(textanch|
000305b0  6f 72 25 2c 74 65 78 74  62 6c 6f 63 6b 73 69 7a  |or%,textblocksiz|
000305c0  65 25 29 0d 1b 2f 37 f2  65 78 74 65 6e 64 5f 6e  |e%)../7.extend_n|
000305d0  61 6d 65 64 5f 73 6c 69  64 69 6e 67 5f 62 6c 6f  |amed_sliding_blo|
000305e0  63 6b 28 6c 69 6e 65 61  6e 63 68 6f 72 25 2c 4c  |ck(lineanchor%,L|
000305f0  65 6e 4c 69 6e 65 25 2b  34 29 0d 1b 30 19 54 65  |enLine%+4)..0.Te|
00030600  78 74 50 74 72 25 3d 21  74 65 78 74 61 6e 63 68  |xtPtr%=!textanch|
00030610  6f 72 25 0d 1b 31 15 72  65 63 62 6c 6f 63 6b 73  |or%..1.recblocks|
00030620  69 7a 65 25 3d 34 30 30  0d 1b 32 39 f2 65 78 74  |ize%=400..29.ext|
00030630  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
00030640  67 5f 62 6c 6f 63 6b 28  72 65 63 61 6e 63 68 6f  |g_block(recancho|
00030650  72 25 2c 72 65 63 62 6c  6f 63 6b 73 69 7a 65 25  |r%,recblocksize%|
00030660  29 0d 1b 33 1c f2 63 6c  6f 73 65 5f 77 69 6e 64  |)..3..close_wind|
00030670  6f 77 28 64 61 74 61 64  69 63 57 25 29 0d 1b 34  |ow(datadicW%)..4|
00030680  11 f2 72 75 6c 65 5f 6f  66 66 28 33 32 29 0d 1b  |..rule_off(32)..|
00030690  35 61 6c 69 6e 65 24 3d  22 20 44 75 70 6c 69 63  |5aline$=" Duplic|
000306a0  61 74 65 64 20 70 72 69  6d 61 72 79 20 6b 65 79  |ated primary key|
000306b0  73 22 3a 24 28 21 6c 69  6e 65 61 6e 63 68 6f 72  |s":$(!lineanchor|
000306c0  25 29 3d 6c 69 6e 65 24  3a f2 6c 69 73 74 5f 6c  |%)=line$:.list_l|
000306d0  69 6e 65 28 2d 31 2c 6c  69 6e 65 61 6e 63 68 6f  |ine(-1,lineancho|
000306e0  72 25 2c a9 28 6c 69 6e  65 24 29 2c 33 32 29 0d  |r%,.(line$),32).|
000306f0  1b 36 11 f2 72 75 6c 65  5f 6f 66 66 28 34 35 29  |.6..rule_off(45)|
00030700  0d 1b 37 15 64 74 6f 70  3d 38 2a 64 66 69 6c 65  |..7.dtop=8*dfile|
00030710  25 2b 4c 48 25 0d 1b 38  22 64 61 64 64 72 3d a4  |%+LH%..8"daddr=.|
00030720  6e 65 69 67 68 62 6f 75  72 28 64 6b 65 79 25 2c  |neighbour(dkey%,|
00030730  64 74 6f 70 2c 31 29 0d  1b 39 15 c8 99 20 22 48  |dtop,1)..9... "H|
00030740  6f 75 72 67 6c 61 73 73  5f 4f 6e 22 0d 1b 3a 12  |ourglass_On"..:.|
00030750  c8 95 20 64 61 64 64 72  3c 3e 64 74 6f 70 0d 1b  |.. daddr<>dtop..|
00030760  3b 18 20 20 c8 99 20 22  4f 53 5f 42 79 74 65 22  |;.  .. "OS_Byte"|
00030770  2c 32 32 39 2c 30 0d 1b  3c 53 20 20 53 24 3d 24  |,229,0..<S  S$=$|
00030780  28 21 6b 65 79 61 6e 63  68 6f 72 25 28 64 6b 65  |(!keyanchor%(dke|
00030790  79 25 29 2b 64 61 64 64  72 2b 38 29 3a 52 53 25  |y%)+daddr+8):RS%|
000307a0  3d 21 28 21 6b 65 79 61  6e 63 68 6f 72 25 28 64  |=!(!keyanchor%(d|
000307b0  6b 65 79 25 29 2b 64 61  64 64 72 2b 39 2b 4b 4c  |key%)+daddr+9+KL|
000307c0  25 28 64 6b 65 79 25 29  29 0d 1b 3d 3b 20 20 52  |%(dkey%))..=;  R|
000307d0  53 24 3d c3 28 52 53 25  29 3a 52 53 24 3d 22 20  |S$=.(RS%):RS$=" |
000307e0  52 65 63 6f 72 64 20 4e  6f 2e 22 2b c4 37 2d a9  |Record No."+.7-.|
000307f0  28 52 53 24 29 2c 22 20  22 29 2b 52 53 24 2b 22  |(RS$)," ")+RS$+"|
00030800  20 20 20 22 0d 1b 3e 0f  20 20 e7 20 53 24 3d 50  |   "..>.  . S$=P|
00030810  24 20 8c 0d 1b 3f 14 20  20 20 20 6c 69 6e 65 24  |$ ...?.    line$|
00030820  3d 52 50 24 2b 50 24 0d  1b 40 45 20 20 20 20 24  |=RP$+P$..@E    $|
00030830  28 21 6c 69 6e 65 61 6e  63 68 6f 72 25 29 3d 6c  |(!lineanchor%)=l|
00030840  69 6e 65 24 3a f2 6c 69  73 74 5f 6c 69 6e 65 28  |ine$:.list_line(|
00030850  52 50 25 2c 6c 69 6e 65  61 6e 63 68 6f 72 25 2c  |RP%,lineanchor%,|
00030860  a9 28 6c 69 6e 65 24 29  2c 33 32 29 0d 1b 41 14  |.(line$),32)..A.|
00030870  20 20 20 20 6c 69 6e 65  24 3d 52 53 24 2b 53 24  |    line$=RS$+S$|
00030880  0d 1b 42 45 20 20 20 20  24 28 21 6c 69 6e 65 61  |..BE    $(!linea|
00030890  6e 63 68 6f 72 25 29 3d  6c 69 6e 65 24 3a f2 6c  |nchor%)=line$:.l|
000308a0  69 73 74 5f 6c 69 6e 65  28 52 53 25 2c 6c 69 6e  |ist_line(RS%,lin|
000308b0  65 61 6e 63 68 6f 72 25  2c a9 28 6c 69 6e 65 24  |eanchor%,.(line$|
000308c0  29 2c 33 32 29 0d 1b 43  07 20 20 cd 0d 1b 44 1b  |),32)..C.  ...D.|
000308d0  20 20 50 24 3d 53 24 3a  52 50 25 3d 52 53 25 3a  |  P$=S$:RP%=RS%:|
000308e0  52 50 24 3d 52 53 24 0d  1b 45 12 20 20 65 78 61  |RP$=RS$..E.  exa|
000308f0  6d 69 6e 65 64 25 2b 3d  31 0d 1b 46 36 20 20 c8  |mined%+=1..F6  .|
00030900  99 20 22 48 6f 75 72 67  6c 61 73 73 5f 50 65 72  |. "Hourglass_Per|
00030910  63 65 6e 74 61 67 65 22  2c 65 78 61 6d 69 6e 65  |centage",examine|
00030920  64 25 2a 31 30 30 20 81  20 63 6f 75 6e 74 25 0d  |d%*100 . count%.|
00030930  1b 47 25 20 20 64 61 64  64 72 3d a4 6e 65 69 67  |.G%  daddr=.neig|
00030940  68 62 6f 75 72 28 64 6b  65 79 25 2c 64 61 64 64  |hbour(dkey%,dadd|
00030950  72 2c 31 29 0d 1b 48 0b  20 20 f2 70 6f 6c 6c 0d  |r,1)..H.  .poll.|
00030960  1b 49 05 ce 0d 1b 4a 11  f2 72 75 6c 65 5f 6f 66  |.I....J..rule_of|
00030970  66 28 33 32 29 0d 1b 4b  16 c8 99 20 22 48 6f 75  |f(32)..K... "Hou|
00030980  72 67 6c 61 73 73 5f 4f  66 66 22 0d 1b 4c 10 f2  |rglass_Off"..L..|
00030990  73 63 72 65 65 6e 5f 6c  69 73 74 0d 1b 4d 05 e1  |screen_list..M..|
000309a0  0d 1b 4e 05 3a 0d 1b 4f  10 dd 20 f2 61 62 6f 72  |..N.:..O.. .abor|
000309b0  74 5f 64 75 70 0d 1b 50  16 c8 99 20 22 48 6f 75  |t_dup..P... "Hou|
000309c0  72 67 6c 61 73 73 5f 4f  66 66 22 0d 1b 51 10 f2  |rglass_Off"..Q..|
000309d0  73 63 72 65 65 6e 5f 6c  69 73 74 0d 1b 52 0c e7  |screen_list..R..|
000309e0  20 9f 3d 31 37 20 8c 0d  1b 53 17 20 20 f2 73 6f  | .=17 ...S.  .so|
000309f0  66 74 65 72 72 6f 72 28  22 22 2c 36 37 29 0d 1b  |fterror("",67)..|
00030a00  54 1d 20 20 cc 20 f2 77  69 6d 70 5f 65 72 72 6f  |T.  . .wimp_erro|
00030a10  72 28 b9 2c 9f 2c 9e 2c  f6 24 29 0d 1b 55 05 cd  |r(.,.,.,.$)..U..|
00030a20  0d 1b 56 05 e1 0d 1b 57  05 3a 0d 1b 58 16 dd 20  |..V....W.:..X.. |
00030a30  a4 73 74 72 69 70 73 70  61 63 65 73 28 73 24 29  |.stripspaces(s$)|
00030a40  0d 1b 59 0f c8 95 20 c2  73 24 29 3d 22 20 22 0d  |..Y... .s$)=" ".|
00030a50  1b 5a 0d 20 20 73 24 3d  c0 73 24 29 0d 1b 5b 05  |.Z.  s$=.s$)..[.|
00030a60  ce 0d 1b 5c 07 3d 73 24  0d 1b 5d 05 3a 0d 1b 5e  |...\.=s$..].:..^|
00030a70  0e f4 20 3e 52 41 4d 74  72 65 65 0d 1b 5f 05 3a  |.. >RAMtree.._.:|
00030a80  0d 1b 60 4b f4 20 49 6e  64 65 78 20 68 61 6e 64  |..`K. Index hand|
00030a90  6c 69 6e 67 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ling -----------|
00030aa0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00030ac0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 1b 61 05 3a  |-----------..a.:|
00030ad0  0d 1b 62 1f dd 20 a4 6e  65 69 67 68 62 6f 75 72  |..b.. .neighbour|
00030ae0  28 6b 65 79 25 2c 61 64  64 72 25 2c 64 25 29 0d  |(key%,addr%,d%).|
00030af0  1b 63 17 ea 20 52 25 2c  53 25 2c 70 25 2c 6b 65  |.c.. R%,S%,p%,ke|
00030b00  79 62 61 73 65 25 0d 1b  64 1e 6b 65 79 62 61 73  |ybase%..d.keybas|
00030b10  65 25 3d 21 6b 65 79 61  6e 63 68 6f 72 25 28 6b  |e%=!keyanchor%(k|
00030b20  65 79 25 29 0d 1b 65 0b  70 25 3d 64 25 2a 34 0d  |ey%)..e.p%=d%*4.|
00030b30  1b 66 1b 52 25 3d 21 28  6b 65 79 62 61 73 65 25  |.f.R%=!(keybase%|
00030b40  2b 61 64 64 72 25 2b 70  25 29 0d 1b 67 11 e7 20  |+addr%+p%)..g.. |
00030b50  52 25 3c 30 20 8c 20 3d  2d 52 25 0d 1b 68 0b 70  |R%<0 . =-R%..h.p|
00030b60  25 3d 34 2d 70 25 0d 1b  69 05 f5 0d 1b 6a 0e 20  |%=4-p%..i....j. |
00030b70  20 61 64 64 72 25 3d 52  25 0d 1b 6b 1d 20 20 53  | addr%=R%..k.  S|
00030b80  25 3d 21 28 6b 65 79 62  61 73 65 25 2b 61 64 64  |%=!(keybase%+add|
00030b90  72 25 2b 70 25 29 0d 1b  6c 14 20 20 e7 20 53 25  |r%+p%)..l.  . S%|
00030ba0  3e 30 20 8c 20 52 25 3d  53 25 0d 1b 6d 0b fd 20  |>0 . R%=S%..m.. |
00030bb0  53 25 3c 3d 30 0d 1b 6e  07 3d 52 25 0d 1b 6f 05  |S%<=0..n.=R%..o.|
00030bc0  3a 0d 1b 70 1e dd 20 a4  72 65 63 5f 6e 6f 28 f8  |:..p.. .rec_no(.|
00030bd0  20 6b 24 2c 6b 65 79 25  2c 61 64 64 72 25 29 0d  | k$,key%,addr%).|
00030be0  1b 71 23 6b 24 3d 24 28  21 6b 65 79 61 6e 63 68  |.q#k$=$(!keyanch|
00030bf0  6f 72 25 28 6b 65 79 25  29 2b 61 64 64 72 25 2b  |or%(key%)+addr%+|
00030c00  38 29 0d 1b 72 2d 3d 21  28 21 6b 65 79 61 6e 63  |8)..r-=!(!keyanc|
00030c10  68 6f 72 25 28 6b 65 79  25 29 2b 61 64 64 72 25  |hor%(key%)+addr%|
00030c20  2b 38 2b 4b 4c 25 28 6b  65 79 25 29 2b 31 29 0d  |+8+KL%(key%)+1).|
00030c30  1b 73 05 3a 0d 1b 74 21  dd 20 f2 73 63 61 6e 5f  |.s.:..t!. .scan_|
00030c40  66 69 6c 65 28 63 24 2c  6b 65 79 25 2c 61 63 74  |file(c$,key%,act|
00030c50  69 6f 6e 25 29 0d 1b 75  27 ea 20 52 45 43 25 2c  |ion%)..u'. REC%,|
00030c60  65 78 61 6d 69 6e 65 64  25 2c 73 75 62 74 6f 74  |examined%,subtot|
00030c70  61 6c 25 2c 58 25 2c 59  25 2c 6e 24 0d 1b 76 14  |al%,X%,Y%,n$..v.|
00030c80  6e 24 3d 22 30 31 32 33  34 35 36 37 38 39 2e 22  |n$="0123456789."|
00030c90  0d 1b 77 25 73 75 62 74  6f 74 61 6c 25 3d a4 63  |..w%subtotal%=.c|
00030ca0  6f 75 6e 74 5f 72 65 63  73 28 6b 65 79 25 2c 7a  |ount_recs(key%,z|
00030cb0  65 72 6f 25 29 0d 1b 78  0e c8 95 20 a0 28 63 24  |ero%)..x... .(c$|
00030cc0  29 3d b9 0d 1b 79 18 20  20 c8 99 20 22 4f 53 5f  |)=...y.  .. "OS_|
00030cd0  42 79 74 65 22 2c 32 32  39 2c 30 0d 1b 7a 1e 20  |Byte",229,0..z. |
00030ce0  20 52 45 43 25 3d a4 72  65 63 5f 6e 6f 28 6b 24  | REC%=.rec_no(k$|
00030cf0  2c 6b 65 79 25 2c 50 25  29 0d 1b 7b 25 20 20 f2  |,key%,P%)..{%  .|
00030d00  72 65 61 64 73 6d 61 72  72 61 79 28 64 62 61 73  |readsmarray(dbas|
00030d10  65 68 61 6e 64 6c 65 25  2c 52 45 43 25 29 0d 1b  |ehandle%,REC%)..|
00030d20  7c 12 20 20 65 78 61 6d  69 6e 65 64 25 2b 3d 31  ||.  examined%+=1|
00030d30  0d 1b 7d 16 20 20 e7 20  a0 28 53 65 61 72 63 68  |..}.  . .(Search|
00030d40  24 29 3d b9 20 8c 0d 1b  7e 14 20 20 20 20 c8 8e  |$)=. ...~.    ..|
00030d50  20 61 63 74 69 6f 6e 25  20 ca 0d 1b 7f 1a 20 20  | action% .....  |
00030d60  20 20 20 20 c9 20 30 3a  f2 67 65 74 5f 6c 65 6e  |    . 0:.get_len|
00030d70  67 74 68 73 0d 1b 80 21  20 20 20 20 20 20 c9 20  |gths...!      . |
00030d80  31 3a f2 70 72 69 6e 74  5f 72 65 63 6f 72 64 28  |1:.print_record(|
00030d90  52 45 43 25 29 0d 1b 81  2d 20 20 20 20 20 20 c9  |REC%)...-      .|
00030da0  20 32 3a 70 74 72 25 3f  52 45 43 25 3d 32 35 35  | 2:ptr%?REC%=255|
00030db0  3a f4 20 23 23 23 20 65  61 72 6d 61 72 6b 20 23  |:. ### earmark #|
00030dc0  23 23 0d 1b 82 22 20 20  20 20 20 20 c9 20 33 3a  |##..."      . 3:|
00030dd0  f2 77 72 69 74 65 5f 63  73 76 5f 72 65 63 28 52  |.write_csv_rec(R|
00030de0  45 43 25 29 0d 1b 83 3b  20 20 20 20 20 20 c9 20  |EC%)...;      . |
00030df0  34 3a 4b 45 59 24 3d a4  6b 65 79 32 28 6e 65 77  |4:KEY$=.key2(new|
00030e00  6b 65 79 25 2c 31 29 3a  f2 69 6e 73 65 72 74 28  |key%,1):.insert(|
00030e10  a3 2c 4b 45 59 24 2c 6e  65 77 6b 65 79 25 29 0d  |.,KEY$,newkey%).|
00030e20  1b 84 20 20 20 20 20 20  20 f4 20 23 23 23 20 63  |..       . ### c|
00030e30  72 65 61 74 65 20 69 6e  64 65 78 20 23 23 23 0d  |reate index ###.|
00030e40  1b 85 0e 20 20 20 20 20  20 c9 20 35 3a 0d 1b 86  |...      . 5:...|
00030e50  1d 20 20 20 20 20 20 53  24 3d 46 24 28 46 69 65  |.      S$=F$(Fie|
00030e60  6c 64 6e 75 6d 62 65 72  25 29 0d 1b 87 16 20 20  |ldnumber%)....  |
00030e70  20 20 20 20 e7 20 6e 75  6d 65 72 69 63 25 20 8c  |    . numeric% .|
00030e80  0d 1b 88 15 20 20 20 20  20 20 20 20 58 25 3d 30  |....        X%=0|
00030e90  3a 59 25 3d 30 0d 1b 89  13 20 20 20 20 20 20 20  |:Y%=0....       |
00030ea0  20 f5 20 58 25 2b 3d 31  0d 1b 8a 29 20 20 20 20  | . X%+=1...)    |
00030eb0  20 20 20 20 fd 20 58 25  3e a9 28 53 24 29 20 84  |    . X%>.(S$) .|
00030ec0  20 a7 6e 24 2c c1 53 24  2c 58 25 2c 31 29 29 3e  | .n$,.S$,X%,1))>|
00030ed0  30 0d 1b 8b 19 20 20 20  20 20 20 20 20 e7 20 58  |0....        . X|
00030ee0  25 3c 3d a9 28 53 24 29  20 8c 0d 1b 8c 13 20 20  |%<=.(S$) .....  |
00030ef0  20 20 20 20 20 20 20 20  59 25 3d 58 25 0d 1b 8d  |        Y%=X%...|
00030f00  15 20 20 20 20 20 20 20  20 20 20 f5 20 59 25 2b  |.          . Y%+|
00030f10  3d 31 0d 1b 8e 2b 20 20  20 20 20 20 20 20 20 20  |=1...+          |
00030f20  fd 20 59 25 3e a9 28 53  24 29 20 84 20 a7 6e 24  |. Y%>.(S$) . .n$|
00030f30  2c c1 53 24 2c 59 25 2c  31 29 29 3d 30 0d 1b 8f  |,.S$,Y%,1))=0...|
00030f40  0d 20 20 20 20 20 20 20  20 cd 0d 1b 90 3b 20 20  |.        ....;  |
00030f50  20 20 20 20 20 20 53 24  3d c0 53 24 2c 58 25 2d  |      S$=.S$,X%-|
00030f60  31 29 2b c3 28 a0 28 c1  53 24 2c 58 25 2c 59 25  |1)+.(.(.S$,X%,Y%|
00030f70  2d 58 25 29 2b 4e 65 77  24 29 29 2b c1 53 24 2c  |-X%)+New$))+.S$,|
00030f80  59 25 29 20 20 0d 1b 91  15 20 20 20 20 20 20 20  |Y%)  ....       |
00030f90  20 cc 20 53 24 3d 4e 65  77 24 0d 1b 92 0b 20 20  | . S$=New$....  |
00030fa0  20 20 20 20 cd 0d 1b 93  1f 20 20 20 20 20 20 e7  |    .....      .|
00030fb0  20 a9 28 53 24 29 3e 54  65 78 74 4c 65 6e 67 74  | .(S$)>TextLengt|
00030fc0  68 25 20 8c 0d 1b 94 1d  20 20 20 20 20 20 20 20  |h% .....        |
00030fd0  f2 73 6f 66 74 65 72 72  6f 72 28 22 22 2c 31 30  |.softerror("",10|
00030fe0  29 0d 1b 95 0d 20 20 20  20 20 20 20 20 cc 0d 1b  |)....        ...|
00030ff0  96 1f 20 20 20 20 20 20  20 20 46 24 28 46 69 65  |..        F$(Fie|
00031000  6c 64 6e 75 6d 62 65 72  25 29 3d 53 24 0d 1b 97  |ldnumber%)=S$...|
00031010  2c 20 20 20 20 20 20 20  20 f2 77 72 69 74 65 73  |,        .writes|
00031020  6d 61 72 72 61 79 28 64  62 61 73 65 68 61 6e 64  |marray(dbasehand|
00031030  6c 65 25 2c 52 45 43 25  29 0d 1b 98 0b 20 20 20  |le%,REC%)....   |
00031040  20 20 20 cd 0d 1b 99 21  20 20 20 20 20 20 f4 20  |   ....!      . |
00031050  23 23 23 20 67 6c 6f 62  61 6c 20 63 68 61 6e 67  |### global chang|
00031060  65 20 23 23 23 0d 1b 9a  09 20 20 20 20 cb 0d 1b  |e ###....    ...|
00031070  9b 07 20 20 cd 0d 1b 9c  1e 20 20 50 25 3d a4 6e  |..  .....  P%=.n|
00031080  65 69 67 68 62 6f 75 72  28 6b 65 79 25 2c 50 25  |eighbour(key%,P%|
00031090  2c 31 29 0d 1b 9d 3b 20  20 c8 99 20 22 48 6f 75  |,1)...;  .. "Hou|
000310a0  72 67 6c 61 73 73 5f 50  65 72 63 65 6e 74 61 67  |rglass_Percentag|
000310b0  65 22 2c 28 65 78 61 6d  69 6e 65 64 25 2a 31 30  |e",(examined%*10|
000310c0  30 29 20 81 20 73 75 62  74 6f 74 61 6c 25 0d 1b  |0) . subtotal%..|
000310d0  9e 05 ce 0d 1b 9f 05 e1  0d 1b a0 05 3a 0d 1b a1  |............:...|
000310e0  19 dd 20 a4 73 65 61 72  63 68 28 53 24 2c 6b 65  |.. .search(S$,ke|
000310f0  79 25 2c 4d 25 29 0d 1b  a2 1e ea 20 50 25 2c 66  |y%,M%)..... P%,f|
00031100  6f 75 6e 64 25 2c 69 6e  66 6f 24 2c 6b 65 79 62  |ound%,info$,keyb|
00031110  61 73 65 25 0d 1b a3 1e  6b 65 79 62 61 73 65 25  |ase%....keybase%|
00031120  3d 21 6b 65 79 61 6e 63  68 6f 72 25 28 6b 65 79  |=!keyanchor%(key|
00031130  25 29 0d 1b a4 18 5a 25  3d 30 3a 50 25 3d 74 6f  |%)....Z%=0:P%=to|
00031140  70 3a 69 64 65 6e 74 25  3d a3 0d 1b a5 05 f5 0d  |p:ident%=.......|
00031150  1b a6 0b 20 20 4c 25 3d  50 25 0d 1b a7 1a 20 20  |...  L%=P%....  |
00031160  50 25 3d 21 28 6b 65 79  62 61 73 65 25 2b 4c 25  |P%=!(keybase%+L%|
00031170  2b 5a 25 29 0d 1b a8 1f  20 20 e7 20 50 25 3c 3d  |+Z%)....  . P%<=|
00031180  30 20 8c 20 50 25 3d 2d  4c 25 3a 66 6f 75 6e 64  |0 . P%=-L%:found|
00031190  25 3d b9 0d 1b a9 1c 20  20 69 6e 66 6f 24 3d 24  |%=.....  info$=$|
000311a0  28 6b 65 79 62 61 73 65  25 2b 50 25 2b 38 29 0d  |(keybase%+P%+8).|
000311b0  1b aa 1e 20 20 72 65 63  25 3d a4 72 65 63 5f 6e  |...  rec%=.rec_n|
000311c0  6f 28 6b 24 2c 6b 65 79  25 2c 50 25 29 0d 1b ab  |o(k$,key%,P%)...|
000311d0  31 20 20 e7 20 a0 28 76  61 6c 24 2b 22 28 53 24  |1  . .(val$+"(S$|
000311e0  29 3d 22 2b 76 61 6c 24  2b 22 4c 45 46 54 24 28  |)="+val$+"LEFT$(|
000311f0  69 6e 66 6f 24 2c 6b 6c  25 29 22 29 20 8c 0d 1b  |info$,kl%)") ...|
00031200  ac 0f 20 20 20 20 c8 8e  20 4d 25 20 ca 0d 1b ad  |..    .. M% ....|
00031210  1d 20 20 20 20 20 20 c9  20 30 3a 69 64 65 6e 74  |.      . 0:ident|
00031220  25 3d 28 6b 65 79 25 3d  30 29 0d 1b ae 16 20 20  |%=(key%=0)....  |
00031230  20 20 20 20 c9 20 31 3a  66 6f 75 6e 64 25 3d b9  |    . 1:found%=.|
00031240  0d 1b af 24 20 20 20 20  20 20 c9 20 32 3a e7 20  |...$      . 2:. |
00031250  72 65 63 25 3d 52 45 43  25 20 8c 20 66 6f 75 6e  |rec%=REC% . foun|
00031260  64 25 3d b9 0d 1b b0 09  20 20 20 20 cb 0d 1b b1  |d%=.....    ....|
00031270  07 20 20 cd 0d 1b b2 38  20 20 e7 20 ac 20 66 6f  |.  ....8  . . fo|
00031280  75 6e 64 25 20 8c 20 5a  25 3d 2d a0 28 76 61 6c  |und% . Z%=-.(val|
00031290  24 2b 22 28 53 24 29 3e  3d 22 2b 76 61 6c 24 2b  |$+"(S$)>="+val$+|
000312a0  22 28 69 6e 66 6f 24 29  22 29 2a 34 0d 1b b3 0c  |"(info$)")*4....|
000312b0  fd 20 66 6f 75 6e 64 25  0d 1b b4 07 3d 50 25 0d  |. found%....=P%.|
000312c0  1b b5 05 3a 0d 1b b6 3a  f4 20 23 23 23 20 4d 25  |...:...:. ### M%|
000312d0  3d 30 20 2d 20 46 69 6e  64 20 6c 65 61 66 20 70  |=0 - Find leaf p|
000312e0  6f 73 69 74 69 6f 6e 20  61 74 20 77 68 69 63 68  |osition at which|
000312f0  20 74 6f 20 69 6e 73 65  72 74 20 23 23 23 0d 1b  | to insert ###..|
00031300  b7 3f f4 20 23 23 23 20  4d 25 3d 31 20 2d 20 46  |.?. ### M%=1 - F|
00031310  69 6e 64 20 66 69 72 73  74 20 6d 61 74 63 68 20  |ind first match |
00031320  69 6e 20 74 72 65 65 20  28 69 66 20 74 68 65 72  |in tree (if ther|
00031330  65 20 69 73 20 6f 6e 65  29 20 23 23 23 0d 1b b8  |e is one) ###...|
00031340  48 f4 20 23 23 23 20 4d  25 3d 32 20 2d 20 46 69  |H. ### M%=2 - Fi|
00031350  6e 64 20 65 78 61 63 74  20 6d 61 74 63 68 69 6e  |nd exact matchin|
00031360  67 20 72 65 63 6f 72 64  2c 20 63 68 65 63 6b 69  |g record, checki|
00031370  6e 67 20 66 6f 72 20 72  65 63 6f 72 64 20 6e 6f  |ng for record no|
00031380  2e 20 23 23 23 0d 1b b9  05 3a 0d 1b ba 1b dd 20  |. ###....:..... |
00031390  f2 69 6e 73 65 72 74 28  52 25 2c f8 20 53 24 2c  |.insert(R%,. S$,|
000313a0  6b 65 79 25 29 0d 1b bb  1f ea 20 50 25 2c 41 25  |key%)..... P%,A%|
000313b0  2c 6b 6c 25 2c 6b 65 79  62 61 73 65 25 2c 61 62  |,kl%,keybase%,ab|
000313c0  6f 72 74 25 0d 1b bc 1e  6b 65 79 62 61 73 65 25  |ort%....keybase%|
000313d0  3d 21 6b 65 79 61 6e 63  68 6f 72 25 28 6b 65 79  |=!keyanchor%(key|
000313e0  25 29 0d 1b bd 11 6b 6c  25 3d 4b 4c 25 28 6b 65  |%)....kl%=KL%(ke|
000313f0  79 25 29 0d 1b be 16 41  25 3d 21 6b 65 79 62 61  |y%)....A%=!keyba|
00031400  73 65 25 3a 46 25 3d 41  25 0d 1b bf 1a 50 25 3d  |se%:F%=A%....P%=|
00031410  2d a4 73 65 61 72 63 68  28 53 24 2c 6b 65 79 25  |-.search(S$,key%|
00031420  2c 30 29 0d 1b c0 0e e7  20 69 64 65 6e 74 25 20  |,0)..... ident% |
00031430  8c 0d 1b c1 0c 20 20 c8  8e 20 b9 20 ca 0d 1b c2  |.....  .. . ....|
00031440  21 20 20 20 20 c9 20 ac  20 a4 73 65 6c 65 63 74  |!    . . .select|
00031450  65 64 28 70 61 73 73 57  25 2c 31 35 29 3a 0d 1b  |ed(passW%,15):..|
00031460  c3 2b 20 20 20 20 f2 73  6f 66 74 65 72 72 6f 72  |.+    .softerror|
00031470  28 22 20 28 22 2b 53 24  2b 22 29 22 2c 33 37 29  |(" ("+S$+")",37)|
00031480  3a 61 62 6f 72 74 25 3d  b9 0d 1b c4 0a 20 20 20  |:abort%=.....   |
00031490  20 7f 3a 0d 1b c5 3e 20  20 20 20 e7 20 64 75 70  | .:...>    . dup|
000314a0  25 20 8c 20 e7 20 ac 20  a4 63 6f 6e 66 69 72 6d  |% . . . .confirm|
000314b0  28 a4 6d 73 67 28 34 35  29 2b 22 20 28 22 2b 53  |(.msg(45)+" ("+S|
000314c0  24 2b 22 29 22 29 20 8c  20 61 62 6f 72 74 25 3d  |$+")") . abort%=|
000314d0  b9 0d 1b c6 07 20 20 cb  0d 1b c7 05 cd 0d 1b c8  |.....  .........|
000314e0  1e e7 20 61 62 6f 72 74  25 20 8c 20 53 24 3d 22  |.. abort% . S$="|
000314f0  2a 46 61 69 6c 65 64 2a  22 3a e1 0d 1b c9 18 e7  |*Failed*":......|
00031500  20 21 28 6b 65 79 62 61  73 65 25 2b 46 25 29 3e  | !(keybase%+F%)>|
00031510  30 20 8c 0d 1b ca 17 20  20 41 25 3d 21 28 6b 65  |0 .....  A%=!(ke|
00031520  79 62 61 73 65 25 2b 46  25 29 0d 1b cb 07 20 20  |ybase%+F%)....  |
00031530  cc 0d 1b cc 1a 20 20 69  6e 63 72 25 3d bb 28 24  |.....  incr%=.($|
00031540  49 6e 63 72 65 6d 65 6e  74 25 29 0d 1b cd 11 20  |Increment%).... |
00031550  20 e7 20 69 6e 63 72 25  3e 30 20 8c 0d 1b ce 23  | . incr%>0 ....#|
00031560  20 20 20 20 f2 63 68 61  6e 67 65 5f 6c 65 6e 67  |    .change_leng|
00031570  74 68 28 52 41 25 2b 69  6e 63 72 25 2c a3 29 0d  |th(RA%+incr%,.).|
00031580  1b cf 22 20 20 20 20 6b  65 79 62 61 73 65 25 3d  |.."    keybase%=|
00031590  21 6b 65 79 61 6e 63 68  6f 72 25 28 6b 65 79 25  |!keyanchor%(key%|
000315a0  29 0d 1b d0 1a 20 20 20  20 41 25 3d 21 6b 65 79  |)....    A%=!key|
000315b0  62 61 73 65 25 3a 46 25  3d 41 25 0d 1b d1 17 20  |base%:F%=A%.... |
000315c0  20 20 20 cc 20 53 24 3d  22 2a 46 61 69 6c 65 64  |   . S$="*Failed|
000315d0  2a 22 0d 1b d2 07 20 20  cd 0d 1b d3 05 cd 0d 1b  |*"....  ........|
000315e0  d4 28 e7 20 53 24 3d 22  2a 46 61 69 6c 65 64 2a  |.(. S$="*Failed*|
000315f0  22 20 8c 20 f2 73 6f 66  74 65 72 72 6f 72 28 22  |" . .softerror("|
00031600  22 2c 32 29 3a e1 0d 1b  d5 26 e7 20 52 25 20 8c  |",2):....&. R% .|
00031610  20 52 45 43 25 3d 21 28  6b 65 79 62 61 73 65 25  | REC%=!(keybase%|
00031620  2b 46 25 2b 38 2b 6b 6c  25 2b 31 29 0d 1b d6 27  |+F%+8+kl%+1)...'|
00031630  21 28 6b 65 79 62 61 73  65 25 2b 46 25 2b 5a 25  |!(keybase%+F%+Z%|
00031640  29 3d 21 28 6b 65 79 62  61 73 65 25 2b 50 25 2b  |)=!(keybase%+P%+|
00031650  5a 25 29 0d 1b d7 1d 21  28 6b 65 79 62 61 73 65  |Z%)....!(keybase|
00031660  25 2b 46 25 2b 28 34 2d  5a 25 29 29 3d 2d 50 25  |%+F%+(4-Z%))=-P%|
00031670  0d 1b d8 17 24 28 6b 65  79 62 61 73 65 25 2b 46  |....$(keybase%+F|
00031680  25 2b 38 29 3d 53 24 0d  1b d9 25 21 28 6b 65 79  |%+8)=S$...%!(key|
00031690  62 61 73 65 25 2b 46 25  2b 38 2b 4b 4c 25 28 6b  |base%+F%+8+KL%(k|
000316a0  65 79 25 29 2b 31 29 3d  52 45 43 25 0d 1b da 18  |ey%)+1)=REC%....|
000316b0  21 28 6b 65 79 62 61 73  65 25 2b 50 25 2b 5a 25  |!(keybase%+P%+Z%|
000316c0  29 3d 46 25 0d 1b db 10  21 6b 65 79 62 61 73 65  |)=F%....!keybase|
000316d0  25 3d 41 25 0d 1b dc 15  e7 20 6b 65 79 25 3d 30  |%=A%..... key%=0|
000316e0  20 8c 20 52 55 25 2b 3d  31 0d 1b dd 05 e1 0d 1b  | . RU%+=1.......|
000316f0  de 05 3a 0d 1b df 18 dd  20 f2 64 65 6c 65 74 65  |..:..... .delete|
00031700  28 f8 20 53 24 2c 6b 65  79 25 29 0d 1b e0 18 ea  |(. S$,key%).....|
00031710  20 50 25 2c 41 25 2c 6b  6c 25 2c 6b 65 79 62 61  | P%,A%,kl%,keyba|
00031720  73 65 25 0d 1b e1 1e 6b  65 79 62 61 73 65 25 3d  |se%....keybase%=|
00031730  21 6b 65 79 61 6e 63 68  6f 72 25 28 6b 65 79 25  |!keyanchor%(key%|
00031740  29 0d 1b e2 10 41 25 3d  21 6b 65 79 62 61 73 65  |)....A%=!keybase|
00031750  25 0d 1b e3 11 6b 6c 25  3d 4b 4c 25 28 6b 65 79  |%....kl%=KL%(key|
00031760  25 29 0d 1b e4 19 50 25  3d a4 73 65 61 72 63 68  |%)....P%=.search|
00031770  28 53 24 2c 6b 65 79 25  2c 32 29 0d 1b e5 4e e7  |(S$,key%,2)...N.|
00031780  20 50 25 3c 30 20 8c 20  f2 73 6f 66 74 65 72 72  | P%<0 . .softerr|
00031790  6f 72 28 22 20 28 22 2b  53 24 2b 22 3a 20 22 2b  |or(" ("+S$+": "+|
000317a0  49 6e 64 65 78 24 28 6b  65 79 25 29 2b 22 20 69  |Index$(key%)+" i|
000317b0  6e 64 65 78 29 22 2c 31  29 3a 53 24 3d 22 2a 46  |ndex)",1):S$="*F|
000317c0  61 69 6c 65 64 2a 22 3a  e1 0d 1b e6 1d 50 52 25  |ailed*":.....PR%|
000317d0  3d a4 6e 65 69 67 68 62  6f 75 72 28 6b 65 79 25  |=.neighbour(key%|
000317e0  2c 50 25 2c 30 29 0d 1b  e7 1d 53 55 25 3d a4 6e  |,P%,0)....SU%=.n|
000317f0  65 69 67 68 62 6f 75 72  28 6b 65 79 25 2c 50 25  |eighbour(key%,P%|
00031800  2c 31 29 0d 1b e8 27 21  28 6b 65 79 62 61 73 65  |,1)...'!(keybase|
00031810  25 2b 4c 25 2b 5a 25 29  3d 21 28 6b 65 79 62 61  |%+L%+Z%)=!(keyba|
00031820  73 65 25 2b 50 25 2b 5a  25 29 0d 1b e9 09 51 25  |se%+P%+Z%)....Q%|
00031830  3d 50 25 0d 1b ea 0c 5a  4c 25 3d 34 2d 5a 25 0d  |=P%....ZL%=4-Z%.|
00031840  1b eb 1a 50 31 25 3d 21  28 6b 65 79 62 61 73 65  |...P1%=!(keybase|
00031850  25 2b 50 25 2b 5a 4c 25  29 0d 1b ec 0d e7 20 50  |%+P%+ZL%)..... P|
00031860  31 25 3e 30 20 8c 0d 1b  ed 1d 20 20 69 6e 66 6f  |1%>0 .....  info|
00031870  24 3d 24 28 6b 65 79 62  61 73 65 25 2b 50 31 25  |$=$(keybase%+P1%|
00031880  2b 38 29 0d 1b ee 1f 20  20 50 25 3d 2d a4 73 65  |+8)....  P%=-.se|
00031890  61 72 63 68 28 69 6e 66  6f 24 2c 6b 65 79 25 2c  |arch(info$,key%,|
000318a0  30 29 0d 1b ef 1b 20 20  21 28 6b 65 79 62 61 73  |0)....  !(keybas|
000318b0  65 25 2b 50 25 2b 5a 25  29 3d 50 31 25 0d 1b f0  |e%+P%+Z%)=P1%...|
000318c0  05 cd 0d 1b f1 33 e7 20  21 28 6b 65 79 62 61 73  |.....3. !(keybas|
000318d0  65 25 2b 50 52 25 2b 34  29 3c 3d 30 20 8c 20 21  |e%+PR%+4)<=0 . !|
000318e0  28 6b 65 79 62 61 73 65  25 2b 50 52 25 2b 34 29  |(keybase%+PR%+4)|
000318f0  3d 2d 53 55 25 0d 1b f2  33 e7 20 21 28 6b 65 79  |=-SU%...3. !(key|
00031900  62 61 73 65 25 2b 53 55  25 2b 30 29 3c 3d 30 20  |base%+SU%+0)<=0 |
00031910  8c 20 21 28 6b 65 79 62  61 73 65 25 2b 53 55 25  |. !(keybase%+SU%|
00031920  2b 30 29 3d 2d 50 52 25  0d 1b f3 15 21 28 6b 65  |+0)=-PR%....!(ke|
00031930  79 62 61 73 65 25 2b 51  25 29 3d 41 25 0d 1b f4  |ybase%+Q%)=A%...|
00031940  10 21 6b 65 79 62 61 73  65 25 3d 51 25 0d 1b f5  |.!keybase%=Q%...|
00031950  15 e7 20 6b 65 79 25 3d  30 20 8c 20 52 55 25 2d  |.. key%=0 . RU%-|
00031960  3d 31 0d 1b f6 05 e1 0d  1b f7 05 3a 0d 1b f8 10  |=1.........:....|
00031970  dd 20 f2 73 61 76 65 5f  6b 65 79 73 0d 1b f9 0b  |. .save_keys....|
00031980  ea 20 6b 65 79 4e 25 0d  1b fa 15 e7 20 70 72 65  |. keyN%..... pre|
00031990  73 65 6e 74 25 3c 3e 37  20 8c 20 e1 0d 1b fb 15  |sent%<>7 . .....|
000319a0  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 4f 6e  |.. "Hourglass_On|
000319b0  22 0d 1b fc 35 6b 65 79  62 61 73 65 25 3d 21 6b  |"...5keybase%=!k|
000319c0  65 79 61 6e 63 68 6f 72  25 28 30 29 3a 6b 65 79  |eyanchor%(0):key|
000319d0  62 61 73 65 25 21 34 3d  bb 28 24 49 6e 63 72 65  |base%!4=.($Incre|
000319e0  6d 65 6e 74 25 29 0d 1b  fd 1b c8 95 20 21 6b 65  |ment%)...... !ke|
000319f0  79 61 6e 63 68 6f 72 25  28 6b 65 79 4e 25 29 3e  |yanchor%(keyN%)>|
00031a00  30 0d 1b fe 21 20 20 6b  65 79 62 61 73 65 25 3d  |0...!  keybase%=|
00031a10  21 6b 65 79 61 6e 63 68  6f 72 25 28 6b 65 79 4e  |!keyanchor%(keyN|
00031a20  25 29 0d 1b ff 21 20 20  6b 65 79 62 61 73 65 25  |%)...!  keybase%|
00031a30  3f 37 32 3d 30 3a 6b 65  79 62 61 73 65 25 3f 37  |?72=0:keybase%?7|
00031a40  33 3d 30 0d 1c 00 57 20  20 c8 99 20 22 53 6c 69  |3=0...W  .. "Sli|
00031a50  64 69 6e 67 48 65 61 70  5f 44 65 73 63 72 69 62  |dingHeap_Describ|
00031a60  65 42 6c 6f 63 6b 22 2c  73 6c 69 64 69 6e 67 68  |eBlock",slidingh|
00031a70  65 61 70 62 61 73 65 25  2c 6b 65 79 61 6e 63 68  |eapbase%,keyanch|
00031a80  6f 72 25 28 6b 65 79 4e  25 29 20 b8 20 2c 2c 66  |or%(keyN%) . ,,f|
00031a90  69 6c 65 6c 65 6e 67 74  68 25 0d 1c 01 2d 20 20  |ilelength%...-  |
00031aa0  e7 20 6b 65 79 4e 25 20  8c 20 69 6e 64 65 78 24  |. keyN% . index$|
00031ab0  3d 22 49 6e 64 69 63 65  73 2e 22 20 8b 20 69 6e  |="Indices." . in|
00031ac0  64 65 78 24 3d 22 22 0d  1c 02 5d 20 20 c8 99 20  |dex$=""...]  .. |
00031ad0  22 4f 53 5f 46 69 6c 65  22 2c 31 30 2c 24 64 61  |"OS_File",10,$da|
00031ae0  74 61 62 61 73 65 25 2b  22 2e 22 2b 69 6e 64 65  |tabase%+"."+inde|
00031af0  78 24 2b 49 6e 64 65 78  24 28 6b 65 79 4e 25 29  |x$+Index$(keyN%)|
00031b00  2c 26 37 46 30 2c 2c 6b  65 79 62 61 73 65 25 2c  |,&7F0,,keybase%,|
00031b10  6b 65 79 62 61 73 65 25  2b 66 69 6c 65 6c 65 6e  |keybase%+filelen|
00031b20  67 74 68 25 0d 1c 03 0e  20 20 6b 65 79 4e 25 2b  |gth%....  keyN%+|
00031b30  3d 31 0d 1c 04 35 20 20  c8 99 20 22 48 6f 75 72  |=1...5  .. "Hour|
00031b40  67 6c 61 73 73 5f 50 65  72 63 65 6e 74 61 67 65  |glass_Percentage|
00031b50  22 2c 6b 65 79 4e 25 2a  31 30 30 20 81 20 28 4b  |",keyN%*100 . (K|
00031b60  65 79 73 25 2b 31 29 0d  1c 05 05 ce 0d 1c 06 16  |eys%+1).........|
00031b70  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 4f 66  |.. "Hourglass_Of|
00031b80  66 22 0d 1c 07 05 e1 0d  1c 08 05 3a 0d 1c 09 24  |f".........:...$|
00031b90  dd 20 f2 72 65 61 64 73  6d 61 72 72 61 79 28 66  |. .readsmarray(f|
00031ba0  69 6c 65 68 61 6e 64 6c  65 25 2c 52 45 43 25 29  |ilehandle%,REC%)|
00031bb0  0d 1c 0a 0b ea 20 6c 6f  6f 70 25 0d 1c 0b 1e cf  |..... loop%.....|
00031bc0  23 66 69 6c 65 68 61 6e  64 6c 65 25 3d 52 45 43  |#filehandle%=REC|
00031bd0  25 2a 4c 65 6e 67 74 68  25 0d 1c 0c 17 e3 20 6c  |%*Length%..... l|
00031be0  6f 6f 70 25 3d 31 20 b8  20 66 69 65 6c 64 73 25  |oop%=1 . fields%|
00031bf0  0d 1c 0d 1d 20 20 46 24  28 6c 6f 6f 70 25 29 3d  |....  F$(loop%)=|
00031c00  be 23 66 69 6c 65 68 61  6e 64 6c 65 25 0d 1c 0e  |.#filehandle%...|
00031c10  0b ed 20 6c 6f 6f 70 25  0d 1c 0f 05 e1 0d 1c 10  |.. loop%........|
00031c20  05 3a 0d 1c 11 1b dd 20  f2 77 72 69 74 65 73 6d  |.:..... .writesm|
00031c30  61 72 72 61 79 28 46 2c  f8 20 52 25 29 0d 1c 12  |array(F,. R%)...|
00031c40  0b ea 20 6c 6f 6f 70 25  0d 1c 13 12 cf 23 46 3d  |.. loop%.....#F=|
00031c50  52 25 2a 4c 65 6e 67 74  68 25 0d 1c 14 17 e3 20  |R%*Length%..... |
00031c60  6c 6f 6f 70 25 3d 31 20  b8 20 66 69 65 6c 64 73  |loop%=1 . fields|
00031c70  25 0d 1c 15 13 20 20 d5  23 46 2c 46 24 28 6c 6f  |%....  .#F,F$(lo|
00031c80  6f 70 25 29 0d 1c 16 0b  ed 20 6c 6f 6f 70 25 0d  |op%)..... loop%.|
00031c90  1c 17 09 52 25 2b 3d 31  0d 1c 18 05 e1 0d 1c 19  |...R%+=1........|
00031ca0  05 3a 0d 1c 1a 15 dd 20  f2 63 68 65 63 6b 5f 73  |.:..... .check_s|
00031cb0  61 76 65 28 54 25 29 0d  1c 1b 0b ea 20 74 69 6d  |ave(T%)..... tim|
00031cc0  65 25 0d 1c 1c 25 c8 99  20 22 4f 53 5f 52 65 61  |e%...%.. "OS_Rea|
00031cd0  64 4d 6f 6e 6f 74 6f 6e  69 63 54 69 6d 65 22 20  |dMonotonicTime" |
00031ce0  b8 20 74 69 6d 65 25 0d  1c 1d 17 e7 20 28 74 69  |. time%..... (ti|
00031cf0  6d 65 25 20 83 20 54 25  29 3c 31 30 20 8c 0d 1c  |me% . T%)<10 ...|
00031d00  1e 50 e7 20 62 75 74 74  6f 6e 66 69 65 6c 64 25  |.P. buttonfield%|
00031d10  28 31 39 29 3e 30 20 8c  20 77 69 25 3d 6d 61 69  |(19)>0 . wi%=mai|
00031d20  6e 57 25 3a 69 63 25 3d  62 75 74 74 6f 6e 66 69  |nW%:ic%=buttonfi|
00031d30  65 6c 64 25 28 31 39 29  20 8b 20 77 69 25 3d 6b  |eld%(19) . wi%=k|
00031d40  65 79 70 61 64 57 25 3a  69 63 25 3d 31 39 0d 1c  |eypadW%:ic%=19..|
00031d50  1f 14 20 20 c8 8e 20 61  75 74 6f 73 61 76 65 25  |..  .. autosave%|
00031d60  20 ca 0d 1c 20 0c 20 20  20 20 c9 20 31 3a 0d 1c  | ... .    . 1:..|
00031d70  21 10 20 20 20 20 64 65  6c 61 79 25 3d 91 0d 1c  |!.    delay%=...|
00031d80  22 15 20 20 20 20 e3 20  6c 6f 6f 70 25 3d 30 20  |".    . loop%=0 |
00031d90  b8 20 32 0d 1c 23 14 20  20 20 20 20 20 64 65 6c  |. 2..#.      del|
00031da0  61 79 25 2b 3d 35 30 0d  1c 24 30 20 20 20 20 20  |ay%+=50..$0     |
00031db0  20 62 6c 6f 63 6b 25 21  38 3d 31 3a 62 6c 6f 63  | block%!8=1:bloc|
00031dc0  6b 25 21 31 32 3d 77 69  25 3a 62 6c 6f 63 6b 25  |k%!12=wi%:block%|
00031dd0  21 31 36 3d 69 63 25 0d  1c 25 2b 20 20 20 20 20  |!16=ic%..%+     |
00031de0  20 c8 99 20 22 49 6e 74  65 72 66 61 63 65 5f 53  | .. "Interface_S|
00031df0  6c 61 62 42 75 74 74 6f  6e 22 2c 2c 62 6c 6f 63  |labButton",,bloc|
00031e00  6b 25 0d 1c 26 16 20 20  20 20 20 20 f5 20 fd 20  |k%..&.      . . |
00031e10  91 3e 64 65 6c 61 79 25  0d 1c 27 17 20 20 20 20  |.>delay%..'.    |
00031e20  20 20 d4 20 31 2c 2d 31  35 2c 31 38 30 2c 35 0d  |  . 1,-15,180,5.|
00031e30  1c 28 14 20 20 20 20 20  20 62 6c 6f 63 6b 25 21  |.(.      block%!|
00031e40  38 3d 30 0d 1c 29 2b 20  20 20 20 20 20 c8 99 20  |8=0..)+      .. |
00031e50  22 49 6e 74 65 72 66 61  63 65 5f 53 6c 61 62 42  |"Interface_SlabB|
00031e60  75 74 74 6f 6e 22 2c 2c  62 6c 6f 63 6b 25 0d 1c  |utton",,block%..|
00031e70  2a 14 20 20 20 20 20 20  64 65 6c 61 79 25 2b 3d  |*.      delay%+=|
00031e80  35 30 0d 1c 2b 16 20 20  20 20 20 20 f5 20 fd 20  |50..+.      . . |
00031e90  91 3e 64 65 6c 61 79 25  0d 1c 2c 0f 20 20 20 20  |.>delay%..,.    |
00031ea0  ed 20 6c 6f 6f 70 25 0d  1c 2d 21 20 20 20 20 c9  |. loop%..-!    .|
00031eb0  20 32 3a f2 6d 6f 75 73  65 28 30 2c 30 2c 34 2c  | 2:.mouse(0,0,4,|
00031ec0  77 69 25 2c 69 63 25 29  0d 1c 2e 07 20 20 cb 0d  |wi%,ic%)....  ..|
00031ed0  1c 2f 05 cd 0d 1c 30 05  e1 0d 1c 31 05 3a 0d 1c  |./....0....1.:..|
00031ee0  32 16 dd 20 f2 73 65 74  5f 61 75 74 6f 28 6d 6f  |2.. .set_auto(mo|
00031ef0  64 65 25 29 0d 1c 33 24  f2 74 69 63 6b 5f 6f 6e  |de%)..3$.tick_on|
00031f00  65 28 6d 65 6e 75 25 28  31 32 29 2c 30 2c 32 2c  |e(menu%(12),0,2,|
00031f10  32 2d 6d 6f 64 65 25 29  0d 1c 34 13 61 75 74 6f  |2-mode%)..4.auto|
00031f20  73 61 76 65 25 3d 6d 6f  64 65 25 0d 1c 35 38 73  |save%=mode%..58s|
00031f30  61 76 65 69 6e 74 25 3d  bb 28 24 49 6e 74 65 72  |aveint%=.($Inter|
00031f40  76 61 6c 25 29 3a 24 49  6e 74 65 72 76 61 6c 25  |val%):$Interval%|
00031f50  3d c3 28 73 61 76 65 69  6e 74 25 29 2b 22 20 6d  |=.(saveint%)+" m|
00031f60  69 6e 22 0d 1c 36 05 e1  0d 1c 37 05 3a 0d 1c 38  |in"..6....7.:..8|
00031f70  1f dd 20 f2 73 65 74 5f  61 75 74 6f 62 61 6c 61  |.. .set_autobala|
00031f80  6e 63 65 28 73 74 61 74  75 73 25 29 0d 1c 39 1e  |nce(status%)..9.|
00031f90  f2 74 69 63 6b 28 6d 65  6e 75 25 28 32 31 29 2c  |.tick(menu%(21),|
00031fa0  30 2c 73 74 61 74 75 73  25 29 0d 1c 3a 18 61 75  |0,status%)..:.au|
00031fb0  74 6f 62 61 6c 61 6e 63  65 25 3d 73 74 61 74 75  |tobalance%=statu|
00031fc0  73 25 0d 1c 3b 28 e7 20  ac 20 61 75 74 6f 62 61  |s%..;(. . autoba|
00031fd0  6c 61 6e 63 65 25 20 8c  20 24 45 76 65 72 79 25  |lance% . $Every%|
00031fe0  3d 22 32 35 20 72 65 63  73 22 0d 1c 3c 3a 62 61  |="25 recs"..<:ba|
00031ff0  6c 69 6e 74 25 3d bb 28  24 45 76 65 72 79 25 29  |lint%=.($Every%)|
00032000  3a 24 45 76 65 72 79 25  3d c3 28 62 61 6c 69 6e  |:$Every%=.(balin|
00032010  74 25 29 2b 22 20 72 65  63 73 22 3a 61 64 64 65  |t%)+" recs":adde|
00032020  64 25 3d 30 0d 1c 3d 05  e1 0d 1c 3e 05 3a 0d 1c  |d%=0..=....>.:..|
00032030  3f 4c f4 20 43 61 6c 63  75 6c 61 74 69 6f 6e 73  |?L. Calculations|
00032040  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00032050  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00032070  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 1c 40 05 3a 0d  |----------..@.:.|
00032080  1c 41 1a dd 20 f2 63 61  6c 63 5f 6c 69 6e 6b 28  |.A.. .calc_link(|
00032090  54 24 2c 74 79 70 65 25  29 0d 1c 42 3d f4 20 23  |T$,type%)..B=. #|
000320a0  23 23 20 53 65 74 73 20  75 70 20 63 61 6c 63 75  |## Sets up calcu|
000320b0  6c 61 74 69 6f 6e 20 66  6f 72 6d 75 6c 61 20 77  |lation formula w|
000320c0  69 6e 64 6f 77 20 26 20  6d 65 6e 75 20 65 6e 74  |indow & menu ent|
000320d0  72 79 20 23 23 23 0d 1c  43 11 24 43 61 6c 63 46  |ry ###..C.$CalcF|
000320e0  75 6e 63 25 3d 54 24 0d  1c 44 29 24 43 61 6c 63  |unc%=T$..D)$Calc|
000320f0  54 69 74 6c 65 25 3d 54  24 3a 63 61 6c 63 6c 69  |Title%=T$:calcli|
00032100  6e 6b 25 3d 46 69 65 6c  64 6e 75 6d 62 65 72 25  |nk%=Fieldnumber%|
00032110  0d 1c 45 29 f2 73 70 6c  69 74 5f 6c 69 6e 6b 28  |..E).split_link(|
00032120  63 61 6c 63 6c 69 6e 6b  25 2c 72 65 61 6c 24 2c  |calclink%,real$,|
00032130  76 69 73 69 62 6c 65 24  29 0d 1c 46 0e c8 8e 20  |visible$)..F... |
00032140  74 79 70 65 25 20 ca 0d  1c 47 33 20 20 c9 20 36  |type% ...G3  . 6|
00032150  2c 37 3a 24 43 61 6c 63  46 6f 72 6d 25 3d 54 61  |,7:$CalcForm%=Ta|
00032160  67 24 28 63 61 6c 63 6c  69 6e 6b 25 29 2b 22 3d  |g$(calclink%)+"=|
00032170  22 2b 76 69 73 69 62 6c  65 24 0d 1c 48 0b 20 20  |"+visible$..H.  |
00032180  c9 20 34 37 3a 0d 1c 49  19 20 20 24 43 61 6c 63  |. 47:..I.  $Calc|
00032190  46 6f 72 6d 25 3d 76 69  73 69 62 6c 65 24 0d 1c  |Form%=visible$..|
000321a0  4a 21 20 20 f2 69 63 6f  6e 5f 62 69 74 28 32 32  |J!  .icon_bit(22|
000321b0  2c 63 61 6c 63 57 25 2c  32 2c 6f 66 66 25 29 0d  |,calcW%,2,off%).|
000321c0  1c 4b 19 20 20 f2 64 65  73 65 6c 65 63 74 28 63  |.K.  .deselect(c|
000321d0  61 6c 63 57 25 2c 32 29  0d 1c 4c 05 cb 0d 1c 4d  |alcW%,2)..L....M|
000321e0  05 e1 0d 1c 4e 05 3a 0d  1c 4f 17 dd 20 f2 63 61  |....N.:..O.. .ca|
000321f0  6c 63 5f 66 6f 72 6d 75  6c 61 28 53 24 29 0d 1c  |lc_formula(S$)..|
00032200  50 40 f4 20 23 23 23 20  50 61 72 73 65 73 20 63  |P@. ### Parses c|
00032210  61 6c 63 75 6c 61 74 69  6f 6e 20 66 6f 72 6d 75  |alculation formu|
00032220  6c 61 20 28 53 24 29 20  26 20 62 75 69 6c 64 73  |la (S$) & builds|
00032230  20 63 61 6c 63 24 28 49  25 29 20 23 23 23 0d 1c  | calc$(I%) ###..|
00032240  51 1a ea 20 49 25 2c 50  25 2c 74 24 2c 73 24 2c  |Q.. I%,P%,t$,s$,|
00032250  43 24 2c 74 69 6d 65 25  0d 1c 52 2f 43 24 3d c3  |C$,time%..R/C$=.|
00032260  7e 28 63 61 6c 63 6c 69  6e 6b 25 29 3a e7 20 63  |~(calclink%):. c|
00032270  61 6c 63 6c 69 6e 6b 25  3c 31 36 20 8c 20 43 24  |alclink%<16 . C$|
00032280  3d 22 30 22 2b 43 24 0d  1c 53 23 e7 20 24 43 61  |="0"+C$..S#. $Ca|
00032290  6c 63 46 75 6e 63 25 3d  22 53 65 74 20 62 61 73  |lcFunc%="Set bas|
000322a0  65 20 76 61 6c 75 65 22  20 8c 0d 1c 54 16 20 20  |e value" ...T.  |
000322b0  e7 20 53 24 3d 22 22 20  8c 20 53 24 3d 22 30 22  |. S$="" . S$="0"|
000322c0  0d 1c 55 20 20 20 63 61  6c 63 24 28 63 61 6c 63  |..U   calc$(calc|
000322d0  6c 69 6e 6b 25 29 3d 53  24 2b 22 7c 22 2b 53 24  |link%)=S$+"|"+S$|
000322e0  0d 1c 56 17 20 20 63 61  6c 63 24 28 30 29 3d 22  |..V.  calc$(0)="|
000322f0  4c 4f 41 44 45 44 22 0d  1c 57 07 20 20 cc 0d 1c  |LOADED"..W.  ...|
00032300  58 2a 20 20 50 25 3d a7  53 24 2c 22 3d 22 29 3a  |X*  P%=.S$,"="):|
00032310  53 24 3d c1 53 24 2c 50  25 2b 31 29 3a 76 69 73  |S$=.S$,P%+1):vis|
00032320  69 62 6c 65 24 3d 53 24  0d 1c 59 16 20 20 e3 20  |ible$=S$..Y.  . |
00032330  49 25 3d 31 20 b8 20 66  69 65 6c 64 73 25 0d 1c  |I%=1 . fields%..|
00032340  5a 13 20 20 20 20 74 24  3d 54 61 67 24 28 49 25  |Z.    t$=Tag$(I%|
00032350  29 0d 1c 5b 12 20 20 20  20 e7 20 74 24 3c 3e 22  |)..[.    . t$<>"|
00032360  22 20 8c 0d 1c 5c 0e 20  20 20 20 20 20 50 25 3d  |" ...\.      P%=|
00032370  30 0d 1c 5d 0b 20 20 20  20 20 20 f5 0d 1c 5e 1b  |0..].      ...^.|
00032380  20 20 20 20 20 20 20 20  50 25 3d a7 53 24 2c 74  |        P%=.S$,t|
00032390  24 2c 50 25 2b 31 29 0d  1c 5f 14 20 20 20 20 20  |$,P%+1).._.     |
000323a0  20 20 20 e7 20 50 25 3e  30 20 8c 0d 1c 60 20 20  |   . P%>0 ...`  |
000323b0  20 20 20 20 20 20 20 20  20 c8 8e 20 63 68 61 72  |         .. char|
000323c0  74 79 70 65 25 28 49 25  29 20 ca 0d 1c 61 3e 20  |type%(I%) ...a> |
000323d0  20 20 20 20 20 20 20 20  20 20 20 c9 20 33 2c 36  |           . 3,6|
000323e0  2c 34 36 2c 34 37 2c 35  34 2c 35 36 2c 35 37 3a  |,46,47,54,56,57:|
000323f0  73 24 3d 22 56 41 4c 28  24 52 66 25 28 22 2b c3  |s$="VAL($Rf%("+.|
00032400  28 49 25 29 2b 22 29 29  22 0d 1c 62 3d 20 20 20  |(I%)+"))"..b=   |
00032410  20 20 20 20 20 20 20 20  20 c9 20 38 3a 73 24 3d  |         . 8:s$=|
00032420  22 46 4e 73 65 63 6f 6e  64 73 28 24 52 66 25 28  |"FNseconds($Rf%(|
00032430  22 2b c3 28 49 25 29 2b  22 29 2c 31 29 22 3a 74  |"+.(I%)+"),1)":t|
00032440  69 6d 65 25 3d b9 0d 1c  63 12 20 20 20 20 20 20  |ime%=...c.      |
00032450  20 20 20 20 20 20 7f 3a  0d 1c 64 29 20 20 20 20  |      .:..d)    |
00032460  20 20 20 20 20 20 20 20  c8 8e 20 63 68 61 72 74  |        .. chart|
00032470  79 70 65 25 28 63 61 6c  63 6c 69 6e 6b 25 29 20  |ype%(calclink%) |
00032480  ca 0d 1c 65 29 20 20 20  20 20 20 20 20 20 20 20  |...e)           |
00032490  20 20 20 c9 20 36 3a 73  24 3d 22 46 4e 6e 28 22  |   . 6:s$="FNn("|
000324a0  2b c3 28 49 25 29 2b 22  29 22 0d 1c 66 2a 20 20  |+.(I%)+")"..f*  |
000324b0  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 37 3a  |            . 7:|
000324c0  73 24 3d 22 24 52 66 25  28 22 2b c3 28 49 25 29  |s$="$Rf%("+.(I%)|
000324d0  2b 22 29 22 0d 1c 67 11  20 20 20 20 20 20 20 20  |+")"..g.        |
000324e0  20 20 20 20 cb 0d 1c 68  0f 20 20 20 20 20 20 20  |    ...h.       |
000324f0  20 20 20 cb 0d 1c 69 2b  20 20 20 20 20 20 20 20  |   ...i+        |
00032500  20 20 53 24 3d c0 53 24  2c 50 25 2d 31 29 2b 73  |  S$=.S$,P%-1)+s|
00032510  24 2b c1 53 24 2c 50 25  2b a9 28 74 24 29 29 0d  |$+.S$,P%+.(t$)).|
00032520  1c 6a 1d 20 20 20 20 20  20 20 20 20 20 75 70 64  |.j.          upd|
00032530  61 74 65 24 28 49 25 29  2b 3d 43 24 0d 1c 6b 0d  |ate$(I%)+=C$..k.|
00032540  20 20 20 20 20 20 20 20  cd 0d 1c 6c 10 20 20 20  |        ...l.   |
00032550  20 20 20 fd 20 50 25 3d  30 0d 1c 6d 09 20 20 20  |   . P%=0..m.   |
00032560  20 cd 0d 1c 6e 0a 20 20  ed 20 49 25 0d 1c 6f 2d  | ...n.  . I%..o-|
00032570  20 20 e7 20 a7 76 69 73  69 62 6c 65 24 2c 22 54  |  . .visible$,"T|
00032580  49 4d 45 24 22 29 3e 30  20 8c 20 75 70 64 61 74  |IME$")>0 . updat|
00032590  65 24 28 30 29 2b 3d 43  24 0d 1c 70 3e 20 20 e7  |e$(0)+=C$..p>  .|
000325a0  20 74 69 6d 65 25 3d b9  20 80 20 63 68 61 72 74  | time%=. . chart|
000325b0  79 70 65 25 28 63 61 6c  63 6c 69 6e 6b 25 29 3d  |ype%(calclink%)=|
000325c0  37 20 8c 20 53 24 3d 22  46 4e 74 69 6d 65 28 22  |7 . S$="FNtime("|
000325d0  2b 53 24 2b 22 29 22 0d  1c 71 21 20 20 e7 20 a9  |+S$+")"..q!  . .|
000325e0  28 53 24 29 2b a9 28 76  69 73 69 62 6c 65 24 29  |(S$)+.(visible$)|
000325f0  2b 32 3c 32 35 36 20 8c  0d 1c 72 2c 20 20 20 20  |+2<256 ...r,    |
00032600  63 61 6c 63 24 28 63 61  6c 63 6c 69 6e 6b 25 29  |calc$(calclink%)|
00032610  3d 22 23 22 2b 53 24 2b  22 23 22 2b 76 69 73 69  |="#"+S$+"#"+visi|
00032620  62 6c 65 24 0d 1c 73 19  20 20 20 20 63 61 6c 63  |ble$..s.    calc|
00032630  24 28 30 29 3d 22 4c 4f  41 44 45 44 22 0d 1c 74  |$(0)="LOADED"..t|
00032640  37 20 20 20 20 e7 20 a4  73 65 6c 65 63 74 65 64  |7    . .selected|
00032650  28 63 61 6c 63 57 25 2c  32 29 20 8c 20 f2 72 65  |(calcW%,2) . .re|
00032660  63 61 6c 63 75 6c 61 74  65 28 63 61 6c 63 6c 69  |calculate(calcli|
00032670  6e 6b 25 29 0d 1c 75 1b  20 20 20 20 cc 20 f2 73  |nk%)..u.    . .s|
00032680  6f 66 74 65 72 72 6f 72  28 22 22 2c 34 34 29 0d  |ofterror("",44).|
00032690  1c 76 07 20 20 cd 0d 1c  77 05 cd 0d 1c 78 0f 63  |.v.  ...w....x.c|
000326a0  61 6c 63 6c 69 6e 6b 25  3d 30 0d 1c 79 2e e7 20  |alclink%=0..y.. |
000326b0  28 62 25 20 80 20 25 31  31 31 29 3d 34 20 8c 20  |(b% . %111)=4 . |
000326c0  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 4d  |.. "Wimp_CreateM|
000326d0  65 6e 75 22 2c 2c 2d 31  0d 1c 7a 05 e1 0d 1c 7b  |enu",,-1..z....{|
000326e0  05 3a 0d 1c 7c 16 dd 20  f2 72 65 63 61 6c 63 75  |.:..|.. .recalcu|
000326f0  6c 61 74 65 28 46 25 29  0d 1c 7d 3c ea 20 46 2c  |late(F%)..}<. F,|
00032700  49 25 2c 52 25 2c 6b 24  2c 50 25 2c 72 65 61 6c  |I%,R%,k$,P%,real|
00032710  24 2c 76 69 73 69 62 6c  65 24 2c 73 75 62 74 6f  |$,visible$,subto|
00032720  74 61 6c 25 2c 7a 65 72  6f 25 2c 65 78 61 6d 69  |tal%,zero%,exami|
00032730  6e 65 64 25 0d 1c 7e 22  f2 73 70 6c 69 74 5f 6c  |ned%..~".split_l|
00032740  69 6e 6b 28 46 25 2c 72  65 61 6c 24 2c 76 69 73  |ink(F%,real$,vis|
00032750  69 62 6c 65 24 29 0d 1c  7f 53 e7 20 a4 63 6f 6e  |ible$)...S. .con|
00032760  66 69 72 6d 28 22 52 65  63 61 6c 63 75 6c 61 74  |firm("Recalculat|
00032770  65 20 22 2b 54 61 67 24  28 46 25 29 2b 22 3d 22  |e "+Tag$(F%)+"="|
00032780  2b 76 69 73 69 62 6c 65  24 2b 22 20 66 6f 72 20  |+visible$+" for |
00032790  65 78 69 73 74 69 6e 67  20 72 65 63 6f 72 64 73  |existing records|
000327a0  3f 22 29 3d a3 20 8c 20  e1 0d 1c 80 25 73 75 62  |?")=. . ....%sub|
000327b0  74 6f 74 61 6c 25 3d a4  63 6f 75 6e 74 5f 72 65  |total%=.count_re|
000327c0  63 73 28 6b 65 79 25 2c  7a 65 72 6f 25 29 0d 1c  |cs(key%,zero%)..|
000327d0  81 15 c8 99 20 22 48 6f  75 72 67 6c 61 73 73 5f  |.... "Hourglass_|
000327e0  4f 6e 22 0d 1c 82 2a 64  62 61 73 65 68 61 6e 64  |On"...*dbasehand|
000327f0  6c 65 25 3d ad 28 24 64  61 74 61 62 61 73 65 25  |le%=.($database%|
00032800  2b 22 2e 44 61 74 61 62  61 73 65 22 29 0d 1c 83  |+".Database")...|
00032810  1d 50 25 3d a4 6e 65 69  67 68 62 6f 75 72 28 6b  |.P%=.neighbour(k|
00032820  65 79 25 2c 74 6f 70 2c  31 29 0d 1c 84 0e c8 95  |ey%,top,1)......|
00032830  20 50 25 3c 3e 74 6f 70  0d 1c 85 1c 20 20 52 25  | P%<>top....  R%|
00032840  3d a4 72 65 63 5f 6e 6f  28 6b 24 2c 6b 65 79 25  |=.rec_no(k$,key%|
00032850  2c 50 25 29 0d 1c 86 23  20 20 f2 72 65 61 64 73  |,P%)...#  .reads|
00032860  6d 61 72 72 61 79 28 64  62 61 73 65 68 61 6e 64  |marray(dbasehand|
00032870  6c 65 25 2c 52 25 29 0d  1c 87 16 20 20 e3 20 49  |le%,R%)....  . I|
00032880  25 3d 31 20 b8 20 66 69  65 6c 64 73 25 0d 1c 88  |%=1 . fields%...|
00032890  17 20 20 20 20 24 52 66  25 28 49 25 29 3d 46 24  |.    $Rf%(I%)=F$|
000328a0  28 49 25 29 0d 1c 89 0a  20 20 ed 20 49 25 0d 1c  |(I%)....  . I%..|
000328b0  8a 18 20 20 c8 8e 20 63  68 61 72 74 79 70 65 25  |..  .. chartype%|
000328c0  28 46 25 29 20 ca 0d 1c  8b 0c 20 20 20 20 c9 20  |(F%) .....    . |
000328d0  36 3a 0d 1c 8c 1a 20 20  20 20 46 3d a0 28 72 65  |6:....    F=.(re|
000328e0  61 6c 24 29 3a 46 24 3d  c3 28 46 29 0d 1c 8d 2b  |al$):F$=.(F)...+|
000328f0  20 20 20 20 e7 20 66 69  78 25 28 46 25 29 3e 30  |    . fix%(F%)>0|
00032900  20 8c 20 46 24 3d a4 66  69 78 5f 70 6f 69 6e 74  | . F$=.fix_point|
00032910  28 46 24 2c 46 25 29 0d  1c 8e 0c 20 20 20 20 c9  |(F$,F%)....    .|
00032920  20 37 3a 0d 1c 8f 0b 20  20 20 20 ea 20 85 0d 1c  | 7:....    . ...|
00032930  90 28 20 20 20 20 ee 20  85 20 ea 3a f7 20 85 3a  |.(    . . .:. .:|
00032940  f2 73 6f 66 74 65 72 72  6f 72 28 72 65 61 6c 24  |.softerror(real$|
00032950  2c 37 33 29 3a e1 0d 1c  91 13 20 20 20 20 46 24  |,73):.....    F$|
00032960  3d a0 28 72 65 61 6c 24  29 0d 1c 92 0b 20 20 20  |=.(real$)....   |
00032970  20 f7 20 85 0d 1c 93 07  20 20 cb 0d 1c 94 23 20  | . .....  ....# |
00032980  20 e7 20 a9 28 46 24 29  3c 3d 6c 65 6e 25 28 46  | . .(F$)<=len%(F|
00032990  25 29 20 8c 20 46 24 28  46 25 29 3d 46 24 0d 1c  |%) . F$(F%)=F$..|
000329a0  95 24 20 20 f2 77 72 69  74 65 73 6d 61 72 72 61  |.$  .writesmarra|
000329b0  79 28 64 62 61 73 65 68  61 6e 64 6c 65 25 2c 52  |y(dbasehandle%,R|
000329c0  25 29 0d 1c 96 1e 20 20  50 25 3d a4 6e 65 69 67  |%)....  P%=.neig|
000329d0  68 62 6f 75 72 28 6b 65  79 25 2c 50 25 2c 31 29  |hbour(key%,P%,1)|
000329e0  0d 1c 97 12 20 20 65 78  61 6d 69 6e 65 64 25 2b  |....  examined%+|
000329f0  3d 31 0d 1c 98 39 20 20  c8 99 20 22 48 6f 75 72  |=1...9  .. "Hour|
00032a00  67 6c 61 73 73 5f 50 65  72 63 65 6e 74 61 67 65  |glass_Percentage|
00032a10  22 2c 65 78 61 6d 69 6e  65 64 25 2a 31 30 30 20  |",examined%*100 |
00032a20  81 20 73 75 62 74 6f 74  61 6c 25 0d 1c 99 05 ce  |. subtotal%.....|
00032a30  0d 1c 9a 16 c8 99 20 22  48 6f 75 72 67 6c 61 73  |...... "Hourglas|
00032a40  73 5f 4f 66 66 22 0d 1c  9b 1d f2 63 6c 6f 73 65  |s_Off".....close|
00032a50  5f 66 69 6c 65 28 64 62  61 73 65 68 61 6e 64 6c  |_file(dbasehandl|
00032a60  65 25 29 0d 1c 9c 14 e3  20 49 25 3d 31 20 b8 20  |e%)..... I%=1 . |
00032a70  66 69 65 6c 64 73 25 0d  1c 9d 19 20 20 24 52 66  |fields%....  $Rf|
00032a80  25 28 49 25 29 3d 66 69  65 6c 64 24 28 49 25 29  |%(I%)=field$(I%)|
00032a90  0d 1c 9e 08 ed 20 49 25  0d 1c 9f 17 f2 64 69 73  |..... I%.....dis|
00032aa0  70 6c 61 79 28 6b 65 79  25 2c 61 64 64 72 29 0d  |play(key%,addr).|
00032ab0  1c a0 05 e1 0d 1c a1 05  3a 0d 1c a2 1a dd 20 f2  |........:..... .|
00032ac0  73 75 6d 73 28 f8 20 46  24 2c 52 25 2c 74 79 70  |sums(. F$,R%,typ|
00032ad0  65 25 29 0d 1c a3 07 ea  20 56 0d 1c a4 0e e7 20  |e%)..... V..... |
00032ae0  46 24 3c 3e 22 22 20 8c  0d 1c a5 10 20 20 c8 8e  |F$<>"" .....  ..|
00032af0  20 74 79 70 65 25 20 ca  0d 1c a6 1c 20 20 20 20  | type% .....    |
00032b00  c9 20 38 3a 56 3d a4 73  65 63 6f 6e 64 73 28 46  |. 8:V=.seconds(F|
00032b10  24 2c 31 29 0d 1c a7 11  20 20 20 20 7f 3a 56 3d  |$,1)....    .:V=|
00032b20  bb 28 46 24 29 0d 1c a8  07 20 20 cb 0d 1c a9 12  |.(F$)....  .....|
00032b30  20 20 53 75 6d 28 52 25  2c 30 29 2b 3d 31 0d 1c  |  Sum(R%,0)+=1..|
00032b40  aa 12 20 20 53 75 6d 28  52 25 2c 31 29 2b 3d 56  |..  Sum(R%,1)+=V|
00032b50  0d 1c ab 14 20 20 53 75  6d 28 52 25 2c 33 29 2b  |....  Sum(R%,3)+|
00032b60  3d 56 2a 56 0d 1c ac 05  cd 0d 1c ad 05 e1 0d 1c  |=V*V............|
00032b70  ae 05 3a 0d 1c af 15 dd  20 f2 63 74 6f 74 61 6c  |..:..... .ctotal|
00032b80  73 28 66 6c 61 67 25 29  0d 1c b0 25 ea 20 46 25  |s(flag%)...%. F%|
00032b90  2c 49 25 2c 4a 25 2c 4e  25 2c 52 25 2c 53 25 2c  |,I%,J%,N%,R%,S%,|
00032ba0  62 61 73 65 25 2c 70 6f  73 25 2c 46 24 0d 1c b1  |base%,pos%,F$...|
00032bb0  0f ea 20 53 24 28 29 2c  66 25 28 29 0d 1c b2 11  |.. S$(),f%()....|
00032bc0  de 20 53 24 28 33 29 2c  66 25 28 33 29 0d 1c b3  |. S$(3),f%(3)...|
00032bd0  16 62 61 73 65 25 3d 21  6c 69 6e 65 61 6e 63 68  |.base%=!lineanch|
00032be0  6f 72 25 0d 1c b4 27 53  24 28 29 3d 22 49 74 65  |or%...'S$()="Ite|
00032bf0  6d 73 22 2c 22 53 75 6d  22 2c 22 4d 65 61 6e 22  |ms","Sum","Mean"|
00032c00  2c 22 53 74 2e 44 65 76  2e 22 0d 1c b5 1b e3 20  |,"St.Dev."..... |
00032c10  49 25 3d 31 20 b8 20 a9  28 46 6f 72 6d 24 29 2d  |I%=1 . .(Form$)-|
00032c20  31 20 88 20 32 0d 1c b6  1c 20 20 46 25 3d a4 66  |1 . 2....  F%=.f|
00032c30  6e 75 6d 28 c1 46 6f 72  6d 24 2c 49 25 2c 32 29  |num(.Form$,I%,2)|
00032c40  29 0d 1c b7 14 20 20 52  25 3d 63 61 6c 63 72 6f  |)....  R%=calcro|
00032c50  77 25 3f 46 25 0d 1c b8  18 20 20 c8 8e 20 63 68  |w%?F%....  .. ch|
00032c60  61 72 74 79 70 65 25 28  46 25 29 20 ca 0d 1c b9  |artype%(F%) ....|
00032c70  1f 20 20 20 20 c9 20 33  2c 36 2c 38 2c 34 36 2c  |.    . 3,6,8,46,|
00032c80  34 37 2c 35 34 2c 35 36  2c 35 37 3a 0d 1c ba 17  |47,54,56,57:....|
00032c90  20 20 20 20 e7 20 53 75  6d 28 52 25 2c 30 29 3e  |    . Sum(R%,0)>|
00032ca0  30 20 8c 0d 1c bb 27 20  20 20 20 20 20 53 75 6d  |0 ....'      Sum|
00032cb0  28 52 25 2c 32 29 3d 53  75 6d 28 52 25 2c 31 29  |(R%,2)=Sum(R%,1)|
00032cc0  2f 53 75 6d 28 52 25 2c  30 29 0d 1c bc 36 20 20  |/Sum(R%,0)...6  |
00032cd0  20 20 20 20 53 75 6d 28  52 25 2c 33 29 3d b6 28  |    Sum(R%,3)=.(|
00032ce0  53 75 6d 28 52 25 2c 33  29 2f 53 75 6d 28 52 25  |Sum(R%,3)/Sum(R%|
00032cf0  2c 30 29 2d 53 75 6d 28  52 25 2c 32 29 5e 32 29  |,0)-Sum(R%,2)^2)|
00032d00  0d 1c bd 09 20 20 20 20  cd 0d 1c be 07 20 20 cb  |....    .....  .|
00032d10  0d 1c bf 08 ed 20 49 25  0d 1c c0 0e e3 20 4a 25  |..... I%..... J%|
00032d20  3d 30 20 b8 20 33 0d 1c  c1 10 20 20 70 6f 73 25  |=0 . 3....  pos%|
00032d30  3d 62 61 73 65 25 0d 1c  c2 11 20 20 e7 20 66 6c  |=base%....  . fl|
00032d40  61 67 25 3e 30 20 8c 0d  1c c3 3e 20 20 20 20 4e  |ag%>0 ....>    N|
00032d50  25 3d 30 3a 73 74 61 72  74 25 3d 31 3a 46 24 3d  |%=0:start%=1:F$=|
00032d60  c4 4c 6d 61 72 67 69 6e  25 2d a9 28 53 24 28 4a  |.Lmargin%-.(S$(J|
00032d70  25 29 29 2d 31 2c 22 20  22 29 2b 53 24 28 4a 25  |%))-1," ")+S$(J%|
00032d80  29 2b 22 20 22 0d 1c c4  17 20 20 20 20 cc 20 4e  |)+" "....    . N|
00032d90  25 3d 31 3a 73 74 61 72  74 25 3d 33 0d 1c c5 26  |%=1:start%=3...&|
00032da0  20 20 20 20 4c 25 3d 54  61 62 25 28 31 29 2d 4c  |    L%=Tab%(1)-L|
00032db0  6d 61 72 67 69 6e 25 2d  a9 28 73 70 61 63 65 72  |margin%-.(spacer|
00032dc0  24 29 0d 1c c6 4e 20 20  20 20 e7 20 4c 25 3e 3d  |$)...N    . L%>=|
00032dd0  37 20 8c 20 46 24 3d 6d  61 72 67 69 6e 24 2b a4  |7 . F$=margin$+.|
00032de0  74 61 62 28 53 24 28 4a  25 29 2c 4e 25 29 20 8b  |tab(S$(J%),N%) .|
00032df0  20 46 24 3d 6d 61 72 67  69 6e 24 2b a4 74 61 62  | F$=margin$+.tab|
00032e00  28 c0 53 24 28 4a 25 29  2c 4c 25 29 2c 4e 25 29  |(.S$(J%),L%),N%)|
00032e10  0d 1c c7 07 20 20 cd 0d  1c c8 33 20 20 f2 68 65  |....  ....3  .he|
00032e20  61 70 5f 73 74 6f 72 65  28 6c 69 6e 65 61 6e 63  |ap_store(lineanc|
00032e30  68 6f 72 25 2c 4c 65 6e  4c 69 6e 65 25 2c 30 2c  |hor%,LenLine%,0,|
00032e40  70 6f 73 25 2c 30 2c 46  24 29 0d 1c c9 1f 20 20  |pos%,0,F$)....  |
00032e50  e7 20 a9 28 46 6f 72 6d  24 29 3e 32 20 84 20 73  |. .(Form$)>2 . s|
00032e60  74 61 72 74 25 3d 31 20  8c 0d 1c ca 24 20 20 20  |tart%=1 ....$   |
00032e70  20 e3 20 49 25 3d 73 74  61 72 74 25 20 b8 20 a9  | . I%=start% . .|
00032e80  28 46 6f 72 6d 24 29 2d  31 20 88 20 32 0d 1c cb  |(Form$)-1 . 2...|
00032e90  26 20 20 20 20 20 20 46  25 3d a4 66 6e 75 6d 28  |&      F%=.fnum(|
00032ea0  c1 46 6f 72 6d 24 2c 49  25 2c 32 29 29 3a 46 24  |.Form$,I%,2)):F$|
00032eb0  3d 22 22 0d 1c cc 0f 20  20 20 20 20 20 4e 25 2b  |=""....      N%+|
00032ec0  3d 31 0d 1c cd 1c 20 20  20 20 20 20 c8 8e 20 63  |=1....      .. c|
00032ed0  68 61 72 74 79 70 65 25  28 46 25 29 20 ca 0d 1c  |hartype%(F%) ...|
00032ee0  ce 23 20 20 20 20 20 20  20 20 c9 20 33 2c 36 2c  |.#        . 3,6,|
00032ef0  38 2c 34 36 2c 34 37 2c  35 34 2c 35 36 2c 35 37  |8,46,47,54,56,57|
00032f00  3a 0d 1c cf 1a 20 20 20  20 20 20 20 20 52 25 3d  |:....        R%=|
00032f10  63 61 6c 63 72 6f 77 25  3f 46 25 0d 1c d0 51 20  |calcrow%?F%...Q |
00032f20  20 20 20 20 20 20 20 e7  20 63 68 61 72 74 79 70  |       . chartyp|
00032f30  65 25 28 46 25 29 3d 38  20 8c 20 72 65 73 75 6c  |e%(F%)=8 . resul|
00032f40  74 24 3d a4 74 69 6d 65  28 53 75 6d 28 52 25 2c  |t$=.time(Sum(R%,|
00032f50  4a 25 29 29 20 8b 20 72  65 73 75 6c 74 24 3d c3  |J%)) . result$=.|
00032f60  28 53 75 6d 28 52 25 2c  4a 25 29 29 0d 1c d1 54  |(Sum(R%,J%))...T|
00032f70  20 20 20 20 20 20 20 20  e7 20 a4 73 65 6c 65 63  |        . .selec|
00032f80  74 65 64 28 70 73 65 6c  65 63 74 57 25 2c 52 25  |ted(pselectW%,R%|
00032f90  2a 35 2d 33 2b 4a 25 29  20 8c 3a 46 24 3d a4 6a  |*5-3+J%) .:F$=.j|
00032fa0  75 73 74 69 66 79 28 72  65 73 75 6c 74 24 2c 4e  |ustify(result$,N|
00032fb0  25 2c 4e 25 2d 31 29 3a  66 25 28 4a 25 29 3d 31  |%,N%-1):f%(J%)=1|
00032fc0  0d 1c d2 0b 20 20 20 20  20 20 cb 0d 1c d3 40 20  |....      ....@ |
00032fd0  20 20 20 20 20 f2 68 65  61 70 5f 73 74 6f 72 65  |     .heap_store|
00032fe0  28 6c 69 6e 65 61 6e 63  68 6f 72 25 2c 4c 65 6e  |(lineanchor%,Len|
00032ff0  4c 69 6e 65 25 2c 30 2c  70 6f 73 25 2c 30 2c a4  |Line%,0,pos%,0,.|
00033000  74 61 62 28 46 24 2c 4e  25 29 29 0d 1c d4 0c 20  |tab(F$,N%)).... |
00033010  20 20 20 ed 20 49 25 0d  1c d5 3d 20 20 20 20 e7  |   . I%...=    .|
00033020  20 66 25 28 4a 25 29 3d  31 20 8c 20 f2 6c 69 73  | f%(J%)=1 . .lis|
00033030  74 5f 6c 69 6e 65 28 2d  31 2c 6c 69 6e 65 61 6e  |t_line(-1,linean|
00033040  63 68 6f 72 25 2c 70 6f  73 25 2d 62 61 73 65 25  |chor%,pos%-base%|
00033050  2c 33 32 29 0d 1c d6 07  20 20 cd 0d 1c d7 08 ed  |,32)....  ......|
00033060  20 4a 25 0d 1c d8 20 e7  20 c6 8e 28 66 25 28 29  | J%... . ..(f%()|
00033070  29 3e 30 20 8c 20 f2 72  75 6c 65 5f 6f 66 66 28  |)>0 . .rule_off(|
00033080  34 35 29 0d 1c d9 05 e1  0d 1c da 05 3a 0d 1c db  |45).........:...|
00033090  12 dd 20 a4 6d 61 72 67  69 6e 5f 77 61 72 6e 0d  |.. .margin_warn.|
000330a0  1c dc 11 ea 20 66 25 2c  46 25 2c 52 25 2c 4a 25  |.... f%,F%,R%,J%|
000330b0  0d 1c dd 17 46 25 3d a4  66 6e 75 6d 28 c0 46 6f  |....F%=.fnum(.Fo|
000330c0  72 6d 24 2c 32 29 29 0d  1c de 16 c8 8e 20 63 68  |rm$,2))...... ch|
000330d0  61 72 74 79 70 65 25 28  46 25 29 20 ca 0d 1c df  |artype%(F%) ....|
000330e0  1b 20 20 c9 20 33 2c 36  2c 34 36 2c 34 37 2c 35  |.  . 3,6,46,47,5|
000330f0  34 2c 35 36 2c 35 37 3a  0d 1c e0 14 20 20 52 25  |4,56,57:....  R%|
00033100  3d 63 61 6c 63 72 6f 77  25 3f 46 25 0d 1c e1 10  |=calcrow%?F%....|
00033110  20 20 e3 20 4a 25 3d 30  20 b8 20 33 0d 1c e2 2e  |  . J%=0 . 3....|
00033120  20 20 20 20 e7 20 a4 73  65 6c 65 63 74 65 64 28  |    . .selected(|
00033130  70 73 65 6c 65 63 74 57  25 2c 52 25 2a 35 2d 4a  |pselectW%,R%*5-J|
00033140  25 29 20 8c 20 66 25 3d  46 25 0d 1c e3 0a 20 20  |%) . f%=F%....  |
00033150  ed 20 4a 25 0d 1c e4 05  cb 0d 1c e5 3f e7 20 66  |. J%........?. f|
00033160  25 3e 30 20 80 20 4c 6d  61 72 67 69 6e 25 3c 39  |%>0 . Lmargin%<9|
00033170  20 8c 20 f2 73 6f 66 74  65 72 72 6f 72 28 22 20  | . .softerror(" |
00033180  28 22 2b 54 61 67 24 28  66 25 29 2b 22 29 2e 22  |("+Tag$(f%)+")."|
00033190  2c 39 32 29 3a 3d 2d 31  0d 1c e6 07 3d 66 25 0d  |,92):=-1....=f%.|
000331a0  1c e7 05 3a 0d 1c e8 11  dd 20 a4 74 61 62 28 46  |...:..... .tab(F|
000331b0  24 2c 4e 25 29 0d 1c e9  08 ea 20 4c 25 0d 1c ea  |$,N%)..... L%...|
000331c0  17 4c 25 3d a9 28 46 24  29 2b a9 28 73 70 61 63  |.L%=.(F$)+.(spac|
000331d0  65 72 24 29 0d 1c eb 2c  e7 20 54 61 62 25 28 4e  |er$)...,. Tab%(N|
000331e0  25 29 2d 54 61 62 25 28  4e 25 2d 31 29 2d 4c 25  |%)-Tab%(N%-1)-L%|
000331f0  3c 3d 30 20 8c 3d 46 24  2b 73 70 61 63 65 72 24  |<=0 .=F$+spacer$|
00033200  0d 1c ec 2c 3d 46 24 2b  c4 54 61 62 25 28 4e 25  |...,=F$+.Tab%(N%|
00033210  29 2d 54 61 62 25 28 4e  25 2d 31 29 2d 4c 25 2c  |)-Tab%(N%-1)-L%,|
00033220  22 20 22 29 2b 73 70 61  63 65 72 24 0d 1c ed 05  |" ")+spacer$....|
00033230  3a 0d 1c ee 19 dd 20 a4  6a 75 73 74 69 66 79 28  |:..... .justify(|
00033240  66 24 2c 78 25 2c 78 31  25 29 0d 1c ef 08 ea 20  |f$,x%,x1%)..... |
00033250  4c 25 0d 1c f0 24 4c 25  3d 54 61 62 25 28 78 25  |L%...$L%=Tab%(x%|
00033260  29 2d 54 61 62 25 28 78  31 25 29 2d a9 28 73 70  |)-Tab%(x1%)-.(sp|
00033270  61 63 65 72 24 29 0d 1c  f1 2c e7 20 a9 28 66 24  |acer$)...,. .(f$|
00033280  29 3e 4c 25 20 8c 3d c0  66 24 2c 4c 25 29 20 8b  |)>L% .=.f$,L%) .|
00033290  3d c4 4c 25 2d a9 28 66  24 29 2c 22 20 22 29 2b  |=.L%-.(f$)," ")+|
000332a0  66 24 0d 1c f2 05 3a 0d  1c f3 17 dd 20 f2 65 78  |f$....:..... .ex|
000332b0  65 63 75 74 65 5f 66 69  6c 65 28 66 24 29 0d 1c  |ecute_file(f$)..|
000332c0  f4 36 ea 20 46 2c 50 25  2c 6e 61 6d 65 24 2c 63  |.6. F,P%,name$,c|
000332d0  6f 6d 6d 61 6e 64 24 2c  66 69 6e 69 73 68 65 64  |ommand$,finished|
000332e0  25 2c 66 69 72 73 74 71  75 65 72 79 25 2c 73 74  |%,firstquery%,st|
000332f0  61 74 65 25 0d 1c f5 1e  e7 20 ac 20 a4 63 6f 6e  |ate%..... . .con|
00033300  66 69 72 6d 28 a4 6d 73  67 28 36 38 29 29 20 8c  |firm(.msg(68)) .|
00033310  20 e1 0d 1c f6 07 ea 20  85 0d 1c f7 47 e7 20 a4  | ...... ....G. .|
00033320  73 65 6c 65 63 74 65 64  28 70 72 69 6e 74 57 25  |selected(printW%|
00033330  2c 33 39 29 20 8c 20 72  65 70 6f 72 74 64 65 73  |,39) . reportdes|
00033340  74 24 3d 22 46 69 6c 65  22 20 8b 20 72 65 70 6f  |t$="File" . repo|
00033350  72 74 64 65 73 74 24 3d  22 57 69 6e 64 6f 77 22  |rtdest$="Window"|
00033360  0d 1c f8 0b 46 3d 8e 28  66 24 29 0d 1c f9 1b f4  |....F=.(f$).....|
00033370  20 53 63 72 69 70 74 20  66 69 6c 65 20 73 69 67  | Script file sig|
00033380  6e 61 74 75 72 65 0d 1c  fa 0d 6a 75 6e 6b 24 3d  |nature....junk$=|
00033390  be 23 46 0d 1c fb 1d ee  20 85 20 ea 3a f7 20 85  |.#F..... . .:. .|
000333a0  3a f2 61 62 6f 72 74 5f  73 63 72 69 70 74 3a e1  |:.abort_script:.|
000333b0  0d 1c fc 19 c8 95 20 ac  28 c5 23 46 20 84 20 66  |...... .(.#F . f|
000333c0  69 6e 69 73 68 65 64 25  29 0d 1c fd 18 20 20 c8  |inished%)....  .|
000333d0  99 20 22 4f 53 5f 42 79  74 65 22 2c 32 32 39 2c  |. "OS_Byte",229,|
000333e0  30 0d 1c fe 0f 20 20 6c  69 6e 65 24 3d be 23 46  |0....  line$=.#F|
000333f0  0d 1c ff 18 20 20 73 70  61 63 65 25 3d a7 6c 69  |....  space%=.li|
00033400  6e 65 24 2c 22 20 22 29  0d 1d 00 77 20 20 e7 20  |ne$," ")...w  . |
00033410  73 70 61 63 65 25 3d 30  20 8c 20 63 6f 6d 6d 61  |space%=0 . comma|
00033420  6e 64 24 3d 6c 69 6e 65  24 3a 70 61 72 61 6d 73  |nd$=line$:params|
00033430  24 3d 22 22 20 8b 20 63  6f 6d 6d 61 6e 64 24 3d  |$="" . command$=|
00033440  c0 6c 69 6e 65 24 2c 73  70 61 63 65 25 2d 31 29  |.line$,space%-1)|
00033450  3a 70 61 72 61 6d 73 24  3d c1 6c 69 6e 65 24 2c  |:params$=.line$,|
00033460  73 70 61 63 65 25 2b 31  29 3a 73 74 61 74 65 25  |space%+1):state%|
00033470  3d 28 70 61 72 61 6d 73  24 3d 22 4f 4e 22 29 0d  |=(params$="ON").|
00033480  1d 01 13 20 20 c8 8e 20  63 6f 6d 6d 61 6e 64 24  |...  .. command$|
00033490  20 ca 0d 1d 02 15 20 20  20 20 c9 20 22 21 43 4f  | .....    . "!CO|
000334a0  4d 4d 45 4e 54 22 3a 0d  1d 03 14 20 20 20 20 c9  |MMENT":....    .|
000334b0  20 22 21 53 43 52 49 50  54 22 3a 0d 1d 04 12 20  | "!SCRIPT":.... |
000334c0  20 20 20 49 6d 70 43 6f  6d 24 3d 22 22 0d 1d 05  |   ImpCom$=""...|
000334d0  19 20 20 20 20 e7 20 70  61 72 61 6d 73 24 3d 22  |.    . params$="|
000334e0  45 4e 44 22 20 8c 0d 1d  06 15 20 20 20 20 20 20  |END" .....      |
000334f0  66 69 6e 69 73 68 65 64  25 3d b9 0d 1d 07 3a 20  |finished%=....: |
00033500  20 20 20 20 20 cc 20 f2  65 78 65 63 75 74 65 5f  |     . .execute_|
00033510  66 69 6c 65 28 24 64 61  74 61 62 61 73 65 25 2b  |file($database%+|
00033520  22 2e 50 72 69 6e 74 52  65 73 2e 22 2b 70 61 72  |".PrintRes."+par|
00033530  61 6d 73 24 29 0d 1d 08  09 20 20 20 20 cd 0d 1d  |ams$)....    ...|
00033540  09 14 20 20 20 20 c9 20  22 21 44 45 4c 45 54 45  |..    . "!DELETE|
00033550  22 3a 0d 1d 0a 16 20 20  20 20 e7 20 70 72 65 73  |":....    . pres|
00033560  65 6e 74 25 3d 37 20 8c  0d 1d 0b 11 20 20 20 20  |ent%=7 .....    |
00033570  20 20 52 65 63 46 25 3d  a3 0d 1d 0c 30 20 20 20  |  RecF%=....0   |
00033580  20 20 20 e7 20 70 61 72  61 6d 73 24 3d 22 22 20  |   . params$="" |
00033590  8c 20 6b 65 79 24 3d be  23 46 20 8b 20 6b 65 79  |. key$=.#F . key|
000335a0  24 3d 70 61 72 61 6d 73  24 0d 1d 0d 35 20 20 20  |$=params$...5   |
000335b0  20 20 20 f2 73 65 6c 65  63 74 28 6b 65 79 70 61  |   .select(keypa|
000335c0  64 57 25 2c 32 35 29 3a  f2 64 65 73 65 6c 65 63  |dW%,25):.deselec|
000335d0  74 28 6b 65 79 70 61 64  57 25 2c 32 34 29 0d 1d  |t(keypadW%,24)..|
000335e0  0e 20 20 20 20 20 20 20  61 64 64 72 3d a4 66 69  |.       addr=.fi|
000335f0  6e 64 28 6b 65 79 24 2c  30 2c 30 2c b9 29 0d 1d  |nd(key$,0,0,.)..|
00033600  0f 15 20 20 20 20 20 20  e7 20 52 65 63 46 25 3d  |..      . RecF%=|
00033610  b9 20 8c 0d 1d 10 1e 20  20 20 20 20 20 20 20 61  |. .....        a|
00033620  64 64 72 3d a4 73 68 69  66 74 28 30 2c 30 2c 30  |ddr=.shift(0,0,0|
00033630  29 0d 1d 11 24 20 20 20  20 20 20 20 20 61 64 64  |)...$        add|
00033640  72 3d a4 6d 6f 76 65 74  6f 28 6b 65 79 25 2c 74  |r=.moveto(key%,t|
00033650  6f 70 2c 31 29 0d 1d 12  0b 20 20 20 20 20 20 cd  |op,1)....      .|
00033660  0d 1d 13 09 20 20 20 20  cd 0d 1d 14 14 20 20 20  |....    .....   |
00033670  20 c9 20 22 21 49 4e 53  45 52 54 22 3a 0d 1d 15  | . "!INSERT":...|
00033680  16 20 20 20 20 e7 20 70  72 65 73 65 6e 74 25 3d  |.    . present%=|
00033690  37 20 8c 0d 1d 16 1d 20  20 20 20 20 20 73 75 62  |7 .....      sub|
000336a0  66 69 6c 65 25 3d bb 28  70 61 72 61 6d 73 24 29  |file%=.(params$)|
000336b0  0d 1d 17 29 20 20 20 20  20 20 f2 72 65 61 64 28  |...)      .read(|
000336c0  66 69 65 6c 64 73 25 2c  a3 2c 52 41 25 2c 24 64  |fields%,.,RA%,$d|
000336d0  61 74 61 62 61 73 65 25  29 0d 1d 18 1d 20 20 20  |atabase%)....   |
000336e0  20 20 20 e3 20 6c 6f 6f  70 25 3d 31 20 b8 20 66  |   . loop%=1 . f|
000336f0  69 65 6c 64 73 25 0d 1d  19 29 20 20 20 20 20 20  |ields%...)      |
00033700  20 20 24 52 66 25 28 6c  6f 6f 70 25 29 3d c0 be  |  $Rf%(loop%)=..|
00033710  23 46 2c 6c 65 6e 25 28  6c 6f 6f 70 25 29 29 0d  |#F,len%(loop%)).|
00033720  1d 1a 0b 20 20 20 20 20  20 ed 0d 1d 1b 1e 20 20  |...      .....  |
00033730  20 20 20 20 f2 77 72 69  74 65 28 66 69 65 6c 64  |    .write(field|
00033740  73 25 2c 6b 65 79 25 29  0d 1d 1c 09 20 20 20 20  |s%,key%)....    |
00033750  cd 0d 1d 1d 13 20 20 20  20 c9 20 22 21 51 55 45  |.....    . "!QUE|
00033760  52 59 22 3a 0d 1d 1e 17  20 20 20 20 e7 20 70 61  |RY":....    . pa|
00033770  72 61 6d 73 24 3c 3e 22  22 20 8c 0d 1d 1f 1a 20  |rams$<>"" ..... |
00033780  20 20 20 20 20 50 25 3d  a7 70 61 72 61 6d 73 24  |     P%=.params$|
00033790  2c 22 2c 22 29 0d 1d 20  21 20 20 20 20 20 20 66  |,",").. !      f|
000337a0  6f 72 6d 75 6c 61 24 3d  c1 70 61 72 61 6d 73 24  |ormula$=.params$|
000337b0  2c 50 25 2b 31 29 0d 1d  21 1e 20 20 20 20 20 20  |,P%+1)..!.      |
000337c0  6e 61 6d 65 24 3d c0 70  61 72 61 6d 73 24 2c 50  |name$=.params$,P|
000337d0  25 2d 31 29 0d 1d 22 1a  20 20 20 20 20 20 6e 61  |%-1)..".      na|
000337e0  6d 65 24 3d c0 6e 61 6d  65 24 2c 31 30 29 0d 1d  |me$=.name$,10)..|
000337f0  23 24 20 20 20 20 20 20  53 65 61 72 63 68 24 3d  |#$      Search$=|
00033800  a4 70 61 72 73 65 28 66  6f 72 6d 75 6c 61 24 2c  |.parse(formula$,|
00033810  b9 29 0d 1d 24 24 20 20  20 20 20 20 24 a4 74 65  |.)..$$      $.te|
00033820  78 74 28 6d 61 74 63 68  57 25 2c 30 29 3d 66 6f  |xt(matchW%,0)=fo|
00033830  72 6d 75 6c 61 24 0d 1d  25 21 20 20 20 20 20 20  |rmula$..%!      |
00033840  f2 72 65 64 72 61 77 5f  69 63 6f 6e 28 6d 61 74  |.redraw_icon(mat|
00033850  63 68 57 25 2c 30 29 0d  1d 26 1b 20 20 20 20 20  |chW%,0)..&.     |
00033860  20 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 4f  | .. "Hourglass_O|
00033870  6e 22 0d 1d 27 15 20 20  20 20 20 20 73 63 72 69  |n"..'.      scri|
00033880  70 74 6f 6e 25 3d b9 0d  1d 28 1b 20 20 20 20 20  |pton%=...(.     |
00033890  20 f2 64 6f 5f 69 74 28  53 65 61 72 63 68 24 2c  | .do_it(Search$,|
000338a0  a3 29 0d 1d 29 23 20 20  20 20 20 20 e7 20 a4 73  |.)..)#      . .s|
000338b0  65 6c 65 63 74 65 64 28  70 72 69 6e 74 57 25 2c  |elected(printW%,|
000338c0  33 38 29 20 8c 0d 1d 2a  3f 20 20 20 20 20 20 20  |38) ...*?       |
000338d0  20 66 69 6c 65 6e 61 6d  65 24 3d 24 64 61 74 61  | filename$=$data|
000338e0  62 61 73 65 25 2b 22 2e  50 72 69 6e 74 4a 6f 62  |base%+".PrintJob|
000338f0  73 2e 22 2b 6e 61 6d 65  24 3a 54 79 70 65 25 3d  |s."+name$:Type%=|
00033900  26 46 46 46 0d 1d 2b 3b  20 20 20 20 20 20 20 20  |&FFF..+;        |
00033910  53 74 61 72 74 25 3d 21  74 65 78 74 61 6e 63 68  |Start%=!textanch|
00033920  6f 72 25 3a 45 6e 64 25  3d 53 74 61 72 74 25 2b  |or%:End%=Start%+|
00033930  43 6f 75 6e 74 25 2a 4c  65 6e 4c 69 6e 65 25 0d  |Count%*LenLine%.|
00033940  1d 2c 12 20 20 20 20 20  20 20 20 c8 8e 20 b9 20  |.,.        .. . |
00033950  ca 0d 1d 2d 29 20 20 20  20 20 20 20 20 20 20 c9  |...-)          .|
00033960  20 49 6d 70 43 6f 6d 24  3d 22 22 3a 24 53 74 61  | ImpCom$="":$Sta|
00033970  72 74 25 3d 70 69 74 63  68 24 0d 1d 2e 39 20 20  |rt%=pitch$...9  |
00033980  20 20 20 20 20 20 20 20  c9 20 49 6d 70 43 6f 6d  |        . ImpCom|
00033990  24 3c 3e 22 22 20 80 20  66 69 72 73 74 71 75 65  |$<>"" . firstque|
000339a0  72 79 25 3d b9 3a 66 69  72 73 74 71 75 65 72 79  |ry%=.:firstquery|
000339b0  25 3d a3 0d 1d 2f 1f 20  20 20 20 20 20 20 20 20  |%=.../.         |
000339c0  20 7f 3a 24 53 74 61 72  74 25 3d 49 6d 70 43 6f  | .:$Start%=ImpCo|
000339d0  6d 24 0d 1d 30 0d 20 20  20 20 20 20 20 20 cb 0d  |m$..0.        ..|
000339e0  1d 31 2e 20 20 20 20 20  20 20 20 f2 73 61 76 65  |.1.        .save|
000339f0  28 66 69 6c 65 6e 61 6d  65 24 2c 54 79 70 65 25  |(filename$,Type%|
00033a00  2c 53 74 61 72 74 25 2c  45 6e 64 25 29 0d 1d 32  |,Start%,End%)..2|
00033a10  0b 20 20 20 20 20 20 cd  0d 1d 33 09 20 20 20 20  |.      ...3.    |
00033a20  cd 0d 1d 34 17 20 20 20  20 c9 20 22 21 53 45 4c  |...4.    . "!SEL|
00033a30  45 43 54 49 4f 4e 22 3a  0d 1d 35 17 20 20 20 20  |ECTION":..5.    |
00033a40  e7 20 70 61 72 61 6d 73  24 3c 3e 22 22 20 8c 0d  |. params$<>"" ..|
00033a50  1d 36 33 20 20 20 20 20  20 66 69 6c 65 6e 61 6d  |.63      filenam|
00033a60  65 24 3d 24 64 61 74 61  62 61 73 65 25 2b 22 2e  |e$=$database%+".|
00033a70  50 72 69 6e 74 52 65 73  2e 22 2b 70 61 72 61 6d  |PrintRes."+param|
00033a80  73 24 0d 1d 37 2d 20 20  20 20 20 20 c8 99 20 22  |s$..7-      .. "|
00033a90  4f 53 5f 46 69 6c 65 22  2c 35 2c 66 69 6c 65 6e  |OS_File",5,filen|
00033aa0  61 6d 65 24 20 b8 20 2c  2c 66 74 79 70 65 25 0d  |ame$ . ,,ftype%.|
00033ab0  1d 38 23 20 20 20 20 20  20 66 74 79 70 65 25 3d  |.8#      ftype%=|
00033ac0  28 66 74 79 70 65 25 3e  3e 38 29 20 80 20 26 46  |(ftype%>>8) . &F|
00033ad0  46 46 0d 1d 39 34 20 20  20 20 20 20 e7 20 66 74  |FF..94      . ft|
00033ae0  79 70 65 25 3d 26 37 46  33 20 8c 20 f2 64 72 61  |ype%=&7F3 . .dra|
00033af0  67 5f 73 65 6c 65 63 74  69 6f 6e 28 66 69 6c 65  |g_selection(file|
00033b00  6e 61 6d 65 24 29 0d 1d  3a 1c 20 20 20 20 20 20  |name$)..:.      |
00033b10  cc 20 f2 63 6c 65 61 72  5f 73 65 6c 65 63 74 69  |. .clear_selecti|
00033b20  6f 6e 0d 1d 3b 09 20 20  20 20 cd 0d 1d 3c 17 20  |on..;.    ...<. |
00033b30  20 20 20 c9 20 22 21 50  52 49 4e 54 4f 50 54 53  |   . "!PRINTOPTS|
00033b40  22 3a 0d 1d 3d 17 20 20  20 20 e7 20 70 61 72 61  |":..=.    . para|
00033b50  6d 73 24 3c 3e 22 22 20  8c 0d 1d 3e 33 20 20 20  |ms$<>"" ...>3   |
00033b60  20 20 20 66 69 6c 65 6e  61 6d 65 24 3d 24 64 61  |   filename$=$da|
00033b70  74 61 62 61 73 65 25 2b  22 2e 50 72 69 6e 74 52  |tabase%+".PrintR|
00033b80  65 73 2e 22 2b 70 61 72  61 6d 73 24 0d 1d 3f 2d  |es."+params$..?-|
00033b90  20 20 20 20 20 20 c8 99  20 22 4f 53 5f 46 69 6c  |      .. "OS_Fil|
00033ba0  65 22 2c 35 2c 66 69 6c  65 6e 61 6d 65 24 20 b8  |e",5,filename$ .|
00033bb0  20 2c 2c 66 74 79 70 65  25 0d 1d 40 23 20 20 20  | ,,ftype%..@#   |
00033bc0  20 20 20 66 74 79 70 65  25 3d 28 66 74 79 70 65  |   ftype%=(ftype|
00033bd0  25 3e 3e 38 29 20 80 20  26 46 46 46 0d 1d 41 32  |%>>8) . &FFF..A2|
00033be0  20 20 20 20 20 20 e7 20  66 74 79 70 65 25 3d 26  |      . ftype%=&|
00033bf0  37 46 35 20 8c 20 f2 64  72 61 67 5f 6f 70 74 69  |7F5 . .drag_opti|
00033c00  6f 6e 73 28 66 69 6c 65  6e 61 6d 65 24 29 0d 1d  |ons(filename$)..|
00033c10  42 3c 20 20 20 20 20 20  cc 20 f2 64 72 61 67 5f  |B<      . .drag_|
00033c20  6f 70 74 69 6f 6e 73 28  22 3c 50 62 61 73 65 24  |options("<Pbase$|
00033c30  44 69 72 3e 2e 52 65 73  6f 75 72 63 65 73 2e 50  |Dir>.Resources.P|
00033c40  72 69 6e 74 4f 70 74 73  22 29 0d 1d 43 09 20 20  |rintOpts")..C.  |
00033c50  20 20 cd 0d 1d 44 2e 20  20 20 20 c9 20 22 21 43  |  ...D.    . "!C|
00033c60  41 53 45 22 3a f2 73 65  74 5f 69 63 6f 6e 28 6d  |ASE":.set_icon(m|
00033c70  61 74 63 68 57 25 2c 31  36 2c 73 74 61 74 65 25  |atchW%,16,state%|
00033c80  29 0d 1d 45 2f 20 20 20  20 c9 20 22 21 49 4e 44  |)..E/    . "!IND|
00033c90  45 58 22 3a f2 73 65 74  5f 69 63 6f 6e 28 6d 61  |EX":.set_icon(ma|
00033ca0  74 63 68 57 25 2c 32 33  2c 73 74 61 74 65 25 29  |tchW%,23,state%)|
00033cb0  0d 1d 46 30 20 20 20 20  c9 20 22 21 45 58 50 41  |..F0    . "!EXPA|
00033cc0  4e 44 22 3a f2 73 65 74  5f 69 63 6f 6e 28 70 72  |ND":.set_icon(pr|
00033cd0  69 6e 74 57 25 2c 31 31  2c 73 74 61 74 65 25 29  |intW%,11,state%)|
00033ce0  0d 1d 47 2e 20 20 20 20  c9 20 22 21 44 41 54 45  |..G.    . "!DATE|
00033cf0  22 3a f2 73 65 74 5f 69  63 6f 6e 28 70 72 69 6e  |":.set_icon(prin|
00033d00  74 57 25 2c 31 39 2c 73  74 61 74 65 25 29 0d 1d  |tW%,19,state%)..|
00033d10  48 2f 20 20 20 20 c9 20  22 21 55 50 50 45 52 22  |H/    . "!UPPER"|
00033d20  3a f2 73 65 74 5f 69 63  6f 6e 28 70 72 69 6e 74  |:.set_icon(print|
00033d30  57 25 2c 31 32 2c 73 74  61 74 65 25 29 0d 1d 49  |W%,12,state%)..I|
00033d40  2f 20 20 20 20 c9 20 22  21 46 49 52 53 54 22 3a  |/    . "!FIRST":|
00033d50  f2 73 65 74 5f 69 63 6f  6e 28 70 72 69 6e 74 57  |.set_icon(printW|
00033d60  25 2c 31 30 2c 73 74 61  74 65 25 29 0d 1d 4a 33  |%,10,state%)..J3|
00033d70  20 20 20 20 c9 20 22 21  55 4e 44 45 52 4c 49 4e  |    . "!UNDERLIN|
00033d80  45 22 3a f2 73 65 74 5f  69 63 6f 6e 28 70 72 69  |E":.set_icon(pri|
00033d90  6e 74 57 25 2c 32 39 2c  73 74 61 74 65 25 29 0d  |ntW%,29,state%).|
00033da0  1d 4b 30 20 20 20 20 c9  20 22 21 53 48 52 49 4e  |.K0    . "!SHRIN|
00033db0  4b 22 3a f2 73 65 74 5f  69 63 6f 6e 28 70 72 69  |K":.set_icon(pri|
00033dc0  6e 74 57 25 2c 34 30 2c  73 74 61 74 65 25 29 0d  |ntW%,40,state%).|
00033dd0  1d 4c 2d 20 20 20 20 c9  20 22 21 54 49 54 4c 45  |.L-    . "!TITLE|
00033de0  22 3a 24 a4 74 65 78 74  28 70 72 69 6e 74 57 25  |":$.text(printW%|
00033df0  2c 31 38 29 3d 70 61 72  61 6d 73 24 0d 1d 4d 2c  |,18)=params$..M,|
00033e00  20 20 20 20 c9 20 22 21  50 41 47 45 22 3a 24 a4  |    . "!PAGE":$.|
00033e10  74 65 78 74 28 70 72 69  6e 74 57 25 2c 31 36 29  |text(printW%,16)|
00033e20  3d 70 61 72 61 6d 73 24  0d 1d 4e 31 20 20 20 20  |=params$..N1    |
00033e30  c9 20 22 21 4c 49 4e 45  53 50 41 43 45 22 3a 24  |. "!LINESPACE":$|
00033e40  a4 74 65 78 74 28 70 72  69 6e 74 57 25 2c 31 37  |.text(printW%,17|
00033e50  29 3d 70 61 72 61 6d 73  24 0d 1d 4f 2f 20 20 20  |)=params$..O/   |
00033e60  20 c9 20 22 21 4c 4d 41  52 47 49 4e 22 3a 24 a4  | . "!LMARGIN":$.|
00033e70  74 65 78 74 28 70 72 69  6e 74 57 25 2c 33 30 29  |text(printW%,30)|
00033e80  3d 70 61 72 61 6d 73 24  0d 1d 50 2f 20 20 20 20  |=params$..P/    |
00033e90  c9 20 22 21 54 4d 41 52  47 49 4e 22 3a 24 a4 74  |. "!TMARGIN":$.t|
00033ea0  65 78 74 28 70 72 69 6e  74 57 25 2c 33 32 29 3d  |ext(printW%,32)=|
00033eb0  70 61 72 61 6d 73 24 0d  1d 51 2e 20 20 20 20 c9  |params$..Q.    .|
00033ec0  20 22 21 53 50 41 43 45  52 22 3a 24 a4 74 65 78  | "!SPACER":$.tex|
00033ed0  74 28 70 72 69 6e 74 57  25 2c 34 33 29 3d 70 61  |t(printW%,43)=pa|
00033ee0  72 61 6d 73 24 0d 1d 52  30 20 20 20 20 c9 20 22  |rams$..R0    . "|
00033ef0  21 43 4f 4c 57 49 44 54  48 22 3a 24 a4 74 65 78  |!COLWIDTH":$.tex|
00033f00  74 28 70 72 69 6e 74 57  25 2c 34 35 29 3d 70 61  |t(printW%,45)=pa|
00033f10  72 61 6d 73 24 0d 1d 53  16 20 20 20 20 c9 20 22  |rams$..S.    . "|
00033f20  21 48 45 41 44 49 4e 47  53 22 3a 0d 1d 54 18 20  |!HEADINGS":..T. |
00033f30  20 20 20 c8 8e 20 a4 75  28 70 61 72 61 6d 73 24  |   .. .u(params$|
00033f40  29 20 ca 0d 1d 55 37 20  20 20 20 20 20 c9 20 22  |) ...U7      . "|
00033f50  44 22 3a f2 73 65 6c 65  63 74 28 70 72 69 6e 74  |D":.select(print|
00033f60  57 25 2c 32 29 3a f2 64  65 73 65 6c 65 63 74 28  |W%,2):.deselect(|
00033f70  70 72 69 6e 74 57 25 2c  31 29 0d 1d 56 33 20 20  |printW%,1)..V3  |
00033f80  20 20 20 20 7f 3a f2 73  65 6c 65 63 74 28 70 72  |    .:.select(pr|
00033f90  69 6e 74 57 25 2c 31 29  3a f2 64 65 73 65 6c 65  |intW%,1):.desele|
00033fa0  63 74 28 70 72 69 6e 74  57 25 2c 32 29 0d 1d 57  |ct(printW%,2)..W|
00033fb0  09 20 20 20 20 cb 0d 1d  58 13 20 20 20 20 c9 20  |.    ...X.    . |
00033fc0  22 21 50 49 54 43 48 22  3a 0d 1d 59 33 20 20 20  |"!PITCH":..Y3   |
00033fd0  20 f2 64 65 73 65 6c 65  63 74 28 70 72 69 6e 74  | .deselect(print|
00033fe0  57 25 2c a4 73 65 6c 65  63 74 65 64 5f 65 73 67  |W%,.selected_esg|
00033ff0  28 70 72 69 6e 74 57 25  2c 32 29 29 0d 1d 5a 17  |(printW%,2))..Z.|
00034000  20 20 20 20 c8 8e 20 bb  28 70 61 72 61 6d 73 24  |    .. .(params$|
00034010  29 20 ca 0d 1d 5b 20 20  20 20 20 20 20 c9 20 35  |) ...[       . 5|
00034020  3a f2 73 65 6c 65 63 74  28 70 72 69 6e 74 57 25  |:.select(printW%|
00034030  2c 34 29 0d 1d 5c 21 20  20 20 20 20 20 c9 20 31  |,4)..\!      . 1|
00034040  30 3a f2 73 65 6c 65 63  74 28 70 72 69 6e 74 57  |0:.select(printW|
00034050  25 2c 37 29 0d 1d 5d 21  20 20 20 20 20 20 c9 20  |%,7)..]!      . |
00034060  31 32 3a f2 73 65 6c 65  63 74 28 70 72 69 6e 74  |12:.select(print|
00034070  57 25 2c 38 29 0d 1d 5e  1e 20 20 20 20 20 20 7f  |W%,8)..^.      .|
00034080  3a f2 73 65 6c 65 63 74  28 70 72 69 6e 74 57 25  |:.select(printW%|
00034090  2c 36 29 0d 1d 5f 09 20  20 20 20 cb 0d 1d 60 14  |,6).._.    ...`.|
000340a0  20 20 20 20 c9 20 22 21  46 4f 52 4d 41 54 22 3a  |    . "!FORMAT":|
000340b0  0d 1d 61 33 20 20 20 20  f2 64 65 73 65 6c 65 63  |..a3    .deselec|
000340c0  74 28 70 72 69 6e 74 57  25 2c a4 73 65 6c 65 63  |t(printW%,.selec|
000340d0  74 65 64 5f 65 73 67 28  70 72 69 6e 74 57 25 2c  |ted_esg(printW%,|
000340e0  33 29 29 0d 1d 62 22 20  20 20 20 f2 69 63 6f 6e  |3))..b"    .icon|
000340f0  5f 62 69 74 28 32 32 2c  70 72 69 6e 74 57 25 2c  |_bit(22,printW%,|
00034100  31 35 2c a3 29 0d 1d 63  4d 20 20 20 20 50 25 3d  |15,.)..cM    P%=|
00034110  a7 70 61 72 61 6d 73 24  2c 22 20 22 29 3a e7 20  |.params$," "):. |
00034120  50 25 3e 30 20 8c 20 63  6f 6c 73 24 3d c1 70 61  |P%>0 . cols$=.pa|
00034130  72 61 6d 73 24 2c 50 25  2b 31 29 3a 70 61 72 61  |rams$,P%+1):para|
00034140  6d 73 24 3d c0 70 61 72  61 6d 73 24 2c 50 25 2d  |ms$=.params$,P%-|
00034150  31 29 0d 1d 64 14 20 20  20 20 c8 8e 20 70 61 72  |1)..d.    .. par|
00034160  61 6d 73 24 20 ca 0d 1d  65 2a 20 20 20 20 20 20  |ams$ ...e*      |
00034170  c9 20 22 56 45 52 54 49  43 41 4c 22 3a f2 73 65  |. "VERTICAL":.se|
00034180  6c 65 63 74 28 70 72 69  6e 74 57 25 2c 32 34 29  |lect(printW%,24)|
00034190  0d 1d 66 27 20 20 20 20  20 20 c9 20 22 54 41 42  |..f'      . "TAB|
000341a0  4c 45 22 3a f2 73 65 6c  65 63 74 28 70 72 69 6e  |LE":.select(prin|
000341b0  74 57 25 2c 32 35 29 0d  1d 67 22 20 20 20 20 20  |tW%,25)..g"     |
000341c0  20 24 a4 74 65 78 74 28  70 72 69 6e 74 57 25 2c  | $.text(printW%,|
000341d0  31 35 29 3d 63 6f 6c 73  24 0d 1d 68 24 20 20 20  |15)=cols$..h$   |
000341e0  20 20 20 f2 69 63 6f 6e  5f 62 69 74 28 32 32 2c  |   .icon_bit(22,|
000341f0  70 72 69 6e 74 57 25 2c  31 35 2c b9 29 0d 1d 69  |printW%,15,.)..i|
00034200  27 20 20 20 20 20 20 c9  20 22 4c 41 42 45 4c 22  |'      . "LABEL"|
00034210  3a f2 73 65 6c 65 63 74  28 70 72 69 6e 74 57 25  |:.select(printW%|
00034220  2c 32 36 29 0d 1d 6a 1f  20 20 20 20 20 20 7f 3a  |,26)..j.      .:|
00034230  f2 73 65 6c 65 63 74 28  70 72 69 6e 74 57 25 2c  |.select(printW%,|
00034240  32 33 29 0d 1d 6b 09 20  20 20 20 cb 0d 1d 6c 19  |23)..k.    ...l.|
00034250  20 20 20 20 c9 20 22 21  44 45 53 54 49 4e 41 54  |    . "!DESTINAT|
00034260  49 4f 4e 22 3a 0d 1d 6d  33 20 20 20 20 f2 64 65  |ION":..m3    .de|
00034270  73 65 6c 65 63 74 28 70  72 69 6e 74 57 25 2c a4  |select(printW%,.|
00034280  73 65 6c 65 63 74 65 64  5f 65 73 67 28 70 72 69  |selected_esg(pri|
00034290  6e 74 57 25 2c 34 29 29  0d 1d 6e 14 20 20 20 20  |ntW%,4))..n.    |
000342a0  c8 8e 20 70 61 72 61 6d  73 24 20 ca 0d 1d 6f 39  |.. params$ ...o9|
000342b0  20 20 20 20 20 20 c9 20  22 46 49 4c 45 22 3a f2  |      . "FILE":.|
000342c0  73 65 6c 65 63 74 28 70  72 69 6e 74 57 25 2c 33  |select(printW%,3|
000342d0  39 29 3a 72 65 70 6f 72  74 64 65 73 74 24 3d 22  |9):reportdest$="|
000342e0  46 69 6c 65 22 0d 1d 70  3f 20 20 20 20 20 20 c9  |File"..p?      .|
000342f0  20 22 50 52 49 4e 54 45  52 22 3a f2 73 65 6c 65  | "PRINTER":.sele|
00034300  63 74 28 70 72 69 6e 74  57 25 2c 34 31 29 3a 72  |ct(printW%,41):r|
00034310  65 70 6f 72 74 64 65 73  74 24 3d 22 50 72 69 6e  |eportdest$="Prin|
00034320  74 65 72 22 0d 1d 71 34  20 20 20 20 20 20 7f 3a  |ter"..q4      .:|
00034330  f2 73 65 6c 65 63 74 28  70 72 69 6e 74 57 25 2c  |.select(printW%,|
00034340  33 38 29 3a 72 65 70 6f  72 74 64 65 73 74 24 3d  |38):reportdest$=|
00034350  22 57 69 6e 64 6f 77 22  0d 1d 72 09 20 20 20 20  |"Window"..r.    |
00034360  cb 0d 1d 73 13 20 20 20  20 c9 20 22 21 4c 41 42  |...s.    . "!LAB|
00034370  45 4c 22 3a 0d 1d 74 14  20 20 20 20 70 61 72 61  |EL":..t.    para|
00034380  6d 73 24 2b 3d 22 2c 22  0d 1d 75 12 20 20 20 20  |ms$+=","..u.    |
00034390  e3 20 49 25 3d 31 20 b8  20 37 0d 1d 76 1a 20 20  |. I%=1 . 7..v.  |
000343a0  20 20 20 20 50 25 3d a7  70 61 72 61 6d 73 24 2c  |    P%=.params$,|
000343b0  22 2c 22 29 0d 1d 77 34  20 20 20 20 20 20 70 61  |",")..w4      pa|
000343c0  72 24 3d c0 70 61 72 61  6d 73 24 2c 50 25 2d 31  |r$=.params$,P%-1|
000343d0  29 3a 70 61 72 61 6d 73  24 3d c1 70 61 72 61 6d  |):params$=.param|
000343e0  73 24 2c 50 25 2b 31 29  0d 1d 78 11 20 20 20 20  |s$,P%+1)..x.    |
000343f0  20 20 c8 8e 20 49 25 20  ca 0d 1d 79 10 20 20 20  |  .. I% ...y.   |
00034400  20 20 20 20 20 c9 20 31  3a 0d 1d 7a 37 20 20 20  |     . 1:..z7   |
00034410  20 20 20 20 20 f2 64 65  73 65 6c 65 63 74 28 6c  |     .deselect(l|
00034420  61 62 65 6c 57 25 2c a4  73 65 6c 65 63 74 65 64  |abelW%,.selected|
00034430  5f 65 73 67 28 6c 61 62  65 6c 57 25 2c 31 29 29  |_esg(labelW%,1))|
00034440  0d 1d 7b 15 20 20 20 20  20 20 20 20 c8 8e 20 70  |..{.        .. p|
00034450  61 72 24 20 ca 0d 1d 7c  26 20 20 20 20 20 20 20  |ar$ ...|&       |
00034460  20 20 20 c9 20 22 31 22  3a f2 73 65 6c 65 63 74  |   . "1":.select|
00034470  28 6c 61 62 65 6c 57 25  2c 30 29 0d 1d 7d 26 20  |(labelW%,0)..}& |
00034480  20 20 20 20 20 20 20 20  20 c9 20 22 32 22 3a f2  |         . "2":.|
00034490  73 65 6c 65 63 74 28 6c  61 62 65 6c 57 25 2c 31  |select(labelW%,1|
000344a0  29 0d 1d 7e 22 20 20 20  20 20 20 20 20 20 20 7f  |)..~"          .|
000344b0  3a f2 73 65 6c 65 63 74  28 6c 61 62 65 6c 57 25  |:.select(labelW%|
000344c0  2c 32 29 0d 1d 7f 0d 20  20 20 20 20 20 20 20 cb  |,2)....        .|
000344d0  0d 1d 80 26 20 20 20 20  20 20 20 20 c9 20 32 3a  |...&        . 2:|
000344e0  24 a4 74 65 78 74 28 6c  61 62 65 6c 57 25 2c 34  |$.text(labelW%,4|
000344f0  29 3d 70 61 72 24 0d 1d  81 26 20 20 20 20 20 20  |)=par$...&      |
00034500  20 20 c9 20 33 3a 24 a4  74 65 78 74 28 6c 61 62  |  . 3:$.text(lab|
00034510  65 6c 57 25 2c 36 29 3d  70 61 72 24 0d 1d 82 27  |elW%,6)=par$...'|
00034520  20 20 20 20 20 20 20 20  c9 20 34 3a 24 a4 74 65  |        . 4:$.te|
00034530  78 74 28 6c 61 62 65 6c  57 25 2c 31 30 29 3d 70  |xt(labelW%,10)=p|
00034540  61 72 24 0d 1d 83 27 20  20 20 20 20 20 20 20 c9  |ar$...'        .|
00034550  20 35 3a 24 a4 74 65 78  74 28 6c 61 62 65 6c 57  | 5:$.text(labelW|
00034560  25 2c 31 32 29 3d 70 61  72 24 0d 1d 84 2c 20 20  |%,12)=par$...,  |
00034570  20 20 20 20 20 20 f2 73  65 74 5f 69 63 6f 6e 28  |      .set_icon(|
00034580  6c 61 62 65 6c 57 25 2c  31 31 2c 28 70 61 72 24  |labelW%,11,(par$|
00034590  3c 3e 22 22 29 29 0d 1d  85 3a 20 20 20 20 20 20  |<>""))...:      |
000345a0  20 20 f2 69 63 6f 6e 5f  62 69 74 28 32 32 2c 6c  |  .icon_bit(22,l|
000345b0  61 62 65 6c 57 25 2c 31  32 2c a4 73 65 6c 65 63  |abelW%,12,.selec|
000345c0  74 65 64 28 6c 61 62 65  6c 57 25 2c 31 31 29 29  |ted(labelW%,11))|
000345d0  0d 1d 86 35 20 20 20 20  20 20 20 20 c9 20 36 3a  |...5        . 6:|
000345e0  f2 73 65 74 5f 69 63 6f  6e 28 6c 61 62 65 6c 57  |.set_icon(labelW|
000345f0  25 2c 31 33 2c 28 a4 75  28 70 61 72 24 29 3d 22  |%,13,(.u(par$)="|
00034600  4f 4e 22 29 29 0d 1d 87  35 20 20 20 20 20 20 20  |ON"))...5       |
00034610  20 c9 20 37 3a f2 73 65  74 5f 69 63 6f 6e 28 6c  | . 7:.set_icon(l|
00034620  61 62 65 6c 57 25 2c 31  36 2c 28 a4 75 28 70 61  |abelW%,16,(.u(pa|
00034630  72 24 29 3d 22 4f 4e 22  29 29 0d 1d 88 0b 20 20  |r$)="ON"))....  |
00034640  20 20 20 20 cb 0d 1d 89  0c 20 20 20 20 ed 20 49  |    .....    . I|
00034650  25 0d 1d 8a 18 20 20 20  20 c9 20 22 21 49 4d 50  |%....    . "!IMP|
00034660  52 45 53 53 49 4f 4e 22  3a 0d 1d 8b 18 20 20 20  |RESSION":....   |
00034670  20 50 25 3d a7 70 61 72  61 6d 73 24 2c 22 20 22  | P%=.params$," "|
00034680  29 0d 1d 8c 10 20 20 20  20 e7 20 50 25 3e 30 20  |)....    . P%>0 |
00034690  8c 0d 1d 8d 39 20 20 20  20 20 20 49 6d 70 43 6f  |....9      ImpCo|
000346a0  6d 24 3d c0 70 61 72 61  6d 73 24 2c 50 25 2d 31  |m$=.params$,P%-1|
000346b0  29 3a 6d 6f 64 69 66 69  65 72 24 3d c1 70 61 72  |):modifier$=.par|
000346c0  61 6d 73 24 2c 50 25 2b  31 29 0d 1d 8e 1c 20 20  |ams$,P%+1)....  |
000346d0  20 20 20 20 c8 8e 20 a4  75 28 6d 6f 64 69 66 69  |    .. .u(modifi|
000346e0  65 72 24 29 20 ca 0d 1d  8f 27 20 20 20 20 20 20  |er$) ....'      |
000346f0  20 20 c9 20 22 4e 4f 54  20 46 49 52 53 54 22 3a  |  . "NOT FIRST":|
00034700  66 69 72 73 74 71 75 65  72 79 25 3d b9 0d 1d 90  |firstquery%=....|
00034710  0b 20 20 20 20 20 20 cb  0d 1d 91 1b 20 20 20 20  |.      .....    |
00034720  20 20 cc 20 49 6d 70 43  6f 6d 24 3d 70 61 72 61  |  . ImpCom$=para|
00034730  6d 73 24 0d 1d 92 09 20  20 20 20 cd 0d 1d 93 09  |ms$....    .....|
00034740  20 20 20 20 7f 0d 1d 94  19 20 20 20 20 f2 73 6f  |    .....    .so|
00034750  66 74 65 72 72 6f 72 28  22 22 2c 34 36 29 0d 1d  |fterror("",46)..|
00034760  95 13 20 20 20 20 66 69  6e 69 73 68 65 64 25 3d  |..    finished%=|
00034770  b9 0d 1d 96 07 20 20 cb  0d 1d 97 05 ce 0d 1d 98  |.....  .........|
00034780  18 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 53  |... "Hourglass_S|
00034790  6d 61 73 68 22 0d 1d 99  12 f2 63 6c 6f 73 65 5f  |mash".....close_|
000347a0  66 69 6c 65 28 46 29 0d  1d 9a 07 f7 20 85 0d 1d  |file(F)..... ...|
000347b0  9b 05 e1 0d 1d 9c 05 3a  0d 1d 9d 13 dd 20 f2 61  |.......:..... .a|
000347c0  62 6f 72 74 5f 73 63 72  69 70 74 0d 1d 9e 12 f2  |bort_script.....|
000347d0  63 6c 6f 73 65 5f 66 69  6c 65 28 46 29 0d 1d 9f  |close_file(F)...|
000347e0  0c e7 20 9f 3d 31 37 20  8c 0d 1d a0 17 20 20 f2  |.. .=17 .....  .|
000347f0  73 6f 66 74 65 72 72 6f  72 28 22 22 2c 35 37 29  |softerror("",57)|
00034800  0d 1d a1 1d 20 20 cc 20  f2 77 69 6d 70 5f 65 72  |....  . .wimp_er|
00034810  72 6f 72 28 b9 2c 9f 2c  9e 2c f6 24 29 0d 1d a2  |ror(.,.,.,.$)...|
00034820  05 cd 0d 1d a3 05 e1 0d  1d a4 05 3a 0d 1d a5 48  |...........:...H|
00034830  f4 20 22 49 6d 70 75 6c  73 65 22 20 68 61 6e 64  |. "Impulse" hand|
00034840  6c 69 6e 67 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |ling -----------|
00034850  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00034870  2d 2d 2d 2d 0d 1d a6 05  3a 0d 1d a7 2e dd 20 f2  |----....:..... .|
00034880  49 6d 70 75 6c 73 65 5f  63 6f 6d 6d 61 6e 64 28  |Impulse_command(|
00034890  74 6f 6b 65 6e 25 2c 70  61 72 61 6d 73 25 2c 6f  |token%,params%,o|
000348a0  62 6a 65 63 74 25 29 0d  1d a8 09 ea 20 53 46 24  |bject%)..... SF$|
000348b0  0d 1d a9 34 70 61 72 61  6d 24 3d a4 67 65 74 73  |...4param$=.gets|
000348c0  74 72 28 70 61 72 61 6d  73 25 29 3a 6f 62 6a 65  |tr(params%):obje|
000348d0  63 74 24 3d a4 67 65 74  73 74 72 28 6f 62 6a 65  |ct$=.getstr(obje|
000348e0  63 74 25 29 0d 1d aa 2c  e7 20 6f 62 6a 65 63 74  |ct%)...,. object|
000348f0  24 3d 22 22 20 8c 20 6f  62 6a 65 63 74 24 3d a4  |$="" . object$=.|
00034900  6c 65 61 66 28 24 64 61  74 61 62 61 73 65 25 29  |leaf($database%)|
00034910  0d 1d ab 0f c8 8e 20 74  6f 6b 65 6e 25 20 ca 0d  |...... token% ..|
00034920  1d ac 40 20 20 c9 20 31  3a f4 20 23 23 23 20 47  |..@  . 1:. ### G|
00034930  65 74 50 61 74 68 6e 61  6d 65 2e 20 52 65 74 75  |etPathname. Retu|
00034940  72 6e 73 20 66 75 6c 6c  20 70 61 74 68 6e 61 6d  |rns full pathnam|
00034950  65 20 6f 66 20 6f 62 6a  65 63 74 20 23 23 23 0d  |e of object ###.|
00034960  1d ad 1c 20 20 c8 8e 20  a4 6c 65 61 66 28 24 64  |...  .. .leaf($d|
00034970  61 74 61 62 61 73 65 25  29 20 ca 0d 1d ae 12 20  |atabase%) ..... |
00034980  20 20 20 c9 20 6f 62 6a  65 63 74 24 3a 0d 1d af  |   . object$:...|
00034990  3c 20 20 20 20 c8 99 20  22 49 6d 70 75 6c 73 65  |<    .. "Impulse|
000349a0  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 26 32  |_SendMessage",&2|
000349b0  30 32 2c 24 64 61 74 61  62 61 73 65 25 2c 2c 2c  |02,$database%,,,|
000349c0  2c 2c 6d 79 74 61 73 6b  25 0d 1d b0 14 20 20 20  |,,mytask%....   |
000349d0  20 c9 20 22 4e 6f 20 64  61 74 61 22 3a 0d 1d b1  | . "No data":...|
000349e0  44 20 20 20 20 c8 99 20  22 49 6d 70 75 6c 73 65  |D    .. "Impulse|
000349f0  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 26 32  |_SendMessage",&2|
00034a00  30 32 2c 22 4e 6f 20 64  61 74 61 62 61 73 65 20  |02,"No database |
00034a10  6f 70 65 6e 22 2c 2c 2c  2c 2c 6d 79 74 61 73 6b  |open",,,,,mytask|
00034a20  25 0d 1d b2 0a 20 20 20  20 7f 3a 0d 1d b3 54 20  |%....    .:...T |
00034a30  20 20 20 c8 99 20 22 49  6d 70 75 6c 73 65 5f 53  |   .. "Impulse_S|
00034a40  65 6e 64 4d 65 73 73 61  67 65 22 2c 26 32 30 32  |endMessage",&202|
00034a50  2c 22 43 75 72 72 65 6e  74 20 64 61 74 61 62 61  |,"Current databa|
00034a60  73 65 20 69 73 20 6e 6f  74 20 22 2b 6f 62 6a 65  |se is not "+obje|
00034a70  63 74 24 2c 2c 2c 2c 2c  6d 79 74 61 73 6b 25 0d  |ct$,,,,,mytask%.|
00034a80  1d b4 07 20 20 cb 0d 1d  b5 3a 20 20 c9 20 32 3a  |...  ....:  . 2:|
00034a90  f4 20 23 23 23 20 53 65  6c 65 63 74 69 6f 6e 2e  |. ### Selection.|
00034aa0  20 52 65 74 75 72 6e 73  20 6d 61 78 69 6d 75 6d  | Returns maximum|
00034ab0  20 64 61 74 61 20 6c 65  6e 67 74 68 20 23 23 23  | data length ###|
00034ac0  0d 1d b6 1b 20 20 43 6c  69 65 6e 74 53 65 70 24  |....  ClientSep$|
00034ad0  3d c2 70 61 72 61 6d 24  2c 31 29 0d 1d b7 3f 20  |=.param$,1)...? |
00034ae0  20 43 6c 69 65 6e 74 46  6f 72 6d 24 3d a4 66 69  | ClientForm$=.fi|
00034af0  6e 64 5f 66 69 65 6c 64  73 28 70 61 72 61 6d 24  |nd_fields(param$|
00034b00  2c 43 6c 69 65 6e 74 53  65 70 24 2c 43 6c 69 65  |,ClientSep$,Clie|
00034b10  6e 74 4c 65 6e 67 74 68  25 29 0d 1d b8 3f 20 20  |ntLength%)...?  |
00034b20  f2 65 78 74 65 6e 64 5f  6e 61 6d 65 64 5f 73 6c  |.extend_named_sl|
00034b30  69 64 69 6e 67 5f 62 6c  6f 63 6b 28 74 72 61 6e  |iding_block(tran|
00034b40  73 61 6e 63 68 6f 72 25  2c 43 6c 69 65 6e 74 4c  |sanchor%,ClientL|
00034b50  65 6e 67 74 68 25 2b 31  29 0d 1d b9 40 20 20 c8  |ength%+1)...@  .|
00034b60  99 20 22 49 6d 70 75 6c  73 65 5f 53 65 6e 64 4d  |. "Impulse_SendM|
00034b70  65 73 73 61 67 65 22 2c  26 32 30 32 2c c3 28 43  |essage",&202,.(C|
00034b80  6c 69 65 6e 74 4c 65 6e  67 74 68 25 29 2c 2c 2c  |lientLength%),,,|
00034b90  2c 2c 6d 79 74 61 73 6b  25 0d 1d ba 42 20 20 c9  |,,mytask%...B  .|
00034ba0  20 33 3a f4 20 23 23 23  20 50 61 72 73 65 51 75  | 3:. ### ParseQu|
00034bb0  65 72 79 2e 20 52 65 74  75 72 6e 73 20 74 69 74  |ery. Returns tit|
00034bc0  6c 65 20 67 65 6e 65 72  61 74 65 64 20 62 79 20  |le generated by |
00034bd0  46 4e 70 61 72 73 65 20  23 23 23 0d 1d bb 24 20  |FNparse ###...$ |
00034be0  20 43 6c 69 65 6e 74 53  65 61 72 63 68 24 3d a4  | ClientSearch$=.|
00034bf0  70 61 72 73 65 28 70 61  72 61 6d 24 2c b9 29 0d  |parse(param$,.).|
00034c00  1d bc 36 20 20 c8 99 20  22 49 6d 70 75 6c 73 65  |..6  .. "Impulse|
00034c10  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 26 32  |_SendMessage",&2|
00034c20  30 32 2c 54 69 74 6c 65  24 2c 2c 2c 2c 2c 6d 79  |02,Title$,,,,,my|
00034c30  74 61 73 6b 25 0d 1d bd  70 20 20 c9 20 34 3a f4  |task%...p  . 4:.|
00034c40  20 23 23 23 20 47 65 74  52 65 63 6f 72 64 2e 20  | ### GetRecord. |
00034c50  52 65 74 75 72 6e 73 20  64 61 74 61 20 73 70 65  |Returns data spe|
00034c60  63 69 66 69 65 64 20 69  6e 20 53 65 6c 65 63 74  |cified in Select|
00034c70  69 6f 6e 20 61 63 63 6f  72 64 69 6e 67 20 74 6f  |ion according to|
00034c80  20 63 72 69 74 65 72 69  61 20 73 70 65 63 69 66  | criteria specif|
00034c90  69 65 64 20 69 6e 20 50  61 72 73 65 51 75 65 72  |ied in ParseQuer|
00034ca0  79 20 23 23 23 0d 1d be  3c 20 20 64 61 74 61 6c  |y ###...<  datal|
00034cb0  65 6e 67 74 68 25 3d a4  70 72 65 70 61 72 65 5f  |ength%=.prepare_|
00034cc0  6e 65 78 74 5f 72 65 63  6f 72 64 28 70 61 72 61  |next_record(para|
00034cd0  6d 24 2c 21 74 72 61 6e  73 61 6e 63 68 6f 72 25  |m$,!transanchor%|
00034ce0  29 0d 1d bf 56 20 20 c8  99 20 22 49 6d 70 75 6c  |)...V  .. "Impul|
00034cf0  73 65 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 2c  |se_SendMessage",|
00034d00  26 32 30 32 2c 22 52 65  61 64 79 20 74 6f 20 72  |&202,"Ready to r|
00034d10  65 63 65 69 76 65 3f 22  2c 2d 31 2c 2c 2c 74 72  |eceive?",-1,,,tr|
00034d20  61 6e 73 74 61 67 25 2c  6d 79 74 61 73 6b 25 2c  |anstag%,mytask%,|
00034d30  4c 65 6e 67 74 68 25 0d  1d c0 1d 20 20 c9 20 35  |Length%....  . 5|
00034d40  3a f4 20 23 23 23 20 50  75 74 52 65 63 6f 72 64  |:. ### PutRecord|
00034d50  20 23 23 23 0d 1d c1 42  20 20 c8 99 20 22 49 6d  | ###...B  .. "Im|
00034d60  70 75 6c 73 65 5f 53 65  6e 64 4d 65 73 73 61 67  |pulse_SendMessag|
00034d70  65 22 2c 26 32 30 31 2c  22 47 65 74 52 65 63 6f  |e",&201,"GetReco|
00034d80  72 64 22 2c 2c 2c 2c 67  65 74 72 65 63 25 2c 6d  |rd",,,,getrec%,m|
00034d90  79 74 61 73 6b 25 0d 1d  c2 1e 20 20 c9 20 36 3a  |ytask%....  . 6:|
00034da0  f4 20 23 23 23 20 45 78  70 61 6e 64 43 6f 64 65  |. ### ExpandCode|
00034db0  20 23 23 23 0d 1d c3 15  20 20 50 25 3d a7 70 61  | ###....  P%=.pa|
00034dc0  72 61 6d 24 2c 22 20 22  29 0d 1d c4 2e 20 20 63  |ram$," ")....  c|
00034dd0  6f 64 65 24 3d c0 70 61  72 61 6d 24 2c 50 25 2d  |ode$=.param$,P%-|
00034de0  31 29 3a 74 61 62 6c 65  24 3d c1 70 61 72 61 6d  |1):table$=.param|
00034df0  24 2c 50 25 2b 31 29 0d  1d c5 4c 20 20 c8 99 20  |$,P%+1)...L  .. |
00034e00  22 49 6d 70 75 6c 73 65  5f 53 65 6e 64 4d 65 73  |"Impulse_SendMes|
00034e10  73 61 67 65 22 2c 26 32  30 32 2c a4 65 78 70 61  |sage",&202,.expa|
00034e20  6e 64 28 63 6f 64 65 24  2c 74 61 62 6c 65 24 2c  |nd(code$,table$,|
00034e30  4c 25 2c 53 46 24 29 2c  2c 2c 2c 2c 6d 79 74 61  |L%,SF$),,,,,myta|
00034e40  73 6b 25 0d 1d c6 2b 20  20 c9 20 37 2c 38 3a f4  |sk%...+  . 7,8:.|
00034e50  20 23 23 23 20 47 65 74  46 69 65 6c 64 2c 20 47  | ### GetField, G|
00034e60  65 74 45 78 70 61 6e 64  65 64 20 23 23 23 0d 1d  |etExpanded ###..|
00034e70  c7 15 20 20 e7 20 70 61  72 61 6d 73 25 3c 3e 2d  |..  . params%<>-|
00034e80  31 20 8c 0d 1d c8 44 20  20 20 20 64 61 74 61 6c  |1 ....D    datal|
00034e90  65 6e 67 74 68 25 3d a4  70 72 65 70 61 72 65 5f  |ength%=.prepare_|
00034ea0  6e 65 78 74 5f 66 69 65  6c 64 28 74 6f 6b 65 6e  |next_field(token|
00034eb0  25 2c 70 61 72 61 6d 24  2c 21 74 72 61 6e 73 61  |%,param$,!transa|
00034ec0  6e 63 68 6f 72 25 29 0d  1d c9 5c 20 20 20 20 c8  |nchor%)...\    .|
00034ed0  99 20 22 49 6d 70 75 6c  73 65 5f 53 65 6e 64 4d  |. "Impulse_SendM|
00034ee0  65 73 73 61 67 65 22 2c  26 32 30 32 2c 22 52 65  |essage",&202,"Re|
00034ef0  61 64 79 20 74 6f 20 72  65 63 65 69 76 65 3f 22  |ady to receive?"|
00034f00  2c 2d 31 2c 2c 2c 74 72  61 6e 73 74 61 67 25 2c  |,-1,,,transtag%,|
00034f10  6d 79 74 61 73 6b 25 2c  64 61 74 61 6c 65 6e 67  |mytask%,dataleng|
00034f20  74 68 25 0d 1d ca 32 20  20 20 20 f4 20 4d 61 78  |th%...2    . Max|
00034f30  2e 20 6c 65 6e 67 74 68  20 66 6f 72 20 61 20 50  |. length for a P|
00034f40  6f 77 65 72 62 61 73 65  20 66 69 65 6c 64 20 69  |owerbase field i|
00034f50  73 20 32 34 36 0d 1d cb  07 20 20 cd 0d 1d cc 05  |s 246....  .....|
00034f60  cb 0d 1d cd 05 e1 0d 1d  ce 05 3a 0d 1d cf 26 dd  |..........:...&.|
00034f70  20 f2 49 6d 70 75 6c 73  65 5f 72 65 70 6c 79 28  | .Impulse_reply(|
00034f80  72 65 70 6c 79 74 61 67  25 2c 72 65 70 6c 79 25  |replytag%,reply%|
00034f90  29 0d 1d d0 07 ea 20 85  0d 1d d1 1c ee 20 85 20  |)..... ...... . |
00034fa0  ea 3a f7 20 85 3a f2 61  62 6f 72 74 5f 6d 65 72  |.:. .:.abort_mer|
00034fb0  67 65 3a e1 0d 1d d2 1a  72 65 70 6c 79 24 3d a4  |ge:.....reply$=.|
00034fc0  67 65 74 73 74 72 28 72  65 70 6c 79 25 29 0d 1d  |getstr(reply%)..|
00034fd0  d3 12 c8 8e 20 72 65 70  6c 79 74 61 67 25 20 ca  |.... replytag% .|
00034fe0  0d 1d d4 10 20 20 c9 20  67 65 74 72 65 63 25 3a  |....  . getrec%:|
00034ff0  0d 1d d5 2b 20 20 f4 20  23 23 23 20 52 65 70 6c  |...+  . ### Repl|
00035000  79 20 74 6f 20 47 65 74  52 65 63 6f 72 64 20 63  |y to GetRecord c|
00035010  6f 6d 6d 61 6e 64 2e 20  23 23 23 0d 1d d6 3e 20  |ommand. ###...> |
00035020  20 c8 99 20 22 49 6d 70  75 6c 73 65 5f 46 65 74  | .. "Impulse_Fet|
00035030  63 68 44 61 74 61 22 2c  21 74 72 61 6e 73 61 6e  |chData",!transan|
00035040  63 68 6f 72 25 2c 4c 65  6e 67 74 68 25 2c 2c 2c  |chor%,Length%,,,|
00035050  2c 2c 6d 79 74 61 73 6b  25 0d 1d d7 12 20 20 c9  |,,mytask%....  .|
00035060  20 6d 65 72 67 65 74 61  67 25 3a 0d 1d d8 4c 20  | mergetag%:...L |
00035070  20 f4 20 23 23 23 20 4d  65 72 67 69 6e 67 20 61  | . ### Merging a|
00035080  70 70 6c 69 63 61 74 69  6f 6e 20 72 65 70 6c 69  |pplication repli|
00035090  65 73 20 77 68 65 6e 20  61 6c 6c 20 64 61 74 61  |es when all data|
000350a0  20 69 6e 20 64 6f 63 75  6d 65 6e 74 20 6d 65 72  | in document mer|
000350b0  67 65 64 20 23 23 23 0d  1d d9 77 20 20 e7 20 a4  |ged ###...w  . .|
000350c0  73 65 6c 65 63 74 65 64  28 6d 65 72 67 65 57 25  |selected(mergeW%|
000350d0  2c 36 29 20 8c 20 c8 99  20 22 49 6d 70 75 6c 73  |,6) . .. "Impuls|
000350e0  65 5f 53 65 6e 64 4d 65  73 73 61 67 65 22 2c 26  |e_SendMessage",&|
000350f0  32 30 31 2c 22 3a 22 2b  6d 65 72 67 65 77 69 74  |201,":"+mergewit|
00035100  68 24 2b 22 2e 22 2b 64  6f 63 75 6d 65 6e 74 24  |h$+"."+document$|
00035110  2b 22 20 50 72 69 6e 74  22 2c 2c 2c 2c 70 72 69  |+" Print",,,,pri|
00035120  6e 74 74 61 67 25 2c 6d  79 74 61 73 6b 25 0d 1d  |nttag%,mytask%..|
00035130  da 12 20 20 c9 20 70 72  69 6e 74 74 61 67 25 3a  |..  . printtag%:|
00035140  0d 1d db 44 20 20 f4 20  23 23 23 20 4d 65 72 67  |...D  . ### Merg|
00035150  69 6e 67 20 61 70 70 6c  69 63 61 74 69 6f 6e 20  |ing application |
00035160  68 61 73 20 70 72 69 6e  74 65 64 20 74 68 65 20  |has printed the |
00035170  63 75 72 72 65 6e 74 20  64 6f 63 75 6d 65 6e 74  |current document|
00035180  20 23 23 23 0d 1d dc 18  20 20 c8 99 20 22 4f 53  | ###....  .. "OS|
00035190  5f 42 79 74 65 22 2c 32  32 39 2c 30 0d 1d dd 32  |_Byte",229,0...2|
000351a0  20 20 6d 65 72 67 65 6e  75 6d 25 2b 3d 31 3a 24  |  mergenum%+=1:$|
000351b0  a4 74 65 78 74 28 6d 65  72 67 65 57 25 2c 31 34  |.text(mergeW%,14|
000351c0  29 3d c3 28 6d 65 72 67  65 6e 75 6d 25 29 0d 1d  |)=.(mergenum%)..|
000351d0  de 1e 20 20 f2 72 65 64  72 61 77 5f 69 63 6f 6e  |..  .redraw_icon|
000351e0  28 6d 65 72 67 65 57 25  2c 31 34 29 0d 1d df 30  |(mergeW%,14)...0|
000351f0  20 20 e7 20 a4 73 65 6c  65 63 74 65 64 28 6d 65  |  . .selected(me|
00035200  72 67 65 57 25 2c 36 29  20 80 20 43 6c 69 65 6e  |rgeW%,6) . Clien|
00035210  74 50 74 72 25 3c 3e 74  6f 70 20 8c 0d 1d e0 2c  |tPtr%<>top ....,|
00035220  20 20 20 20 43 6c 69 65  6e 74 50 74 72 25 3d a4  |    ClientPtr%=.|
00035230  6d 65 72 67 65 5f 6e 65  78 74 28 43 6c 69 65 6e  |merge_next(Clien|
00035240  74 50 74 72 25 2c 31 29  0d 1d e1 1e 20 20 20 20  |tPtr%,1)....    |
00035250  cc 20 f2 64 65 73 65 6c  65 63 74 28 6d 65 72 67  |. .deselect(merg|
00035260  65 57 25 2c 36 29 0d 1d  e2 07 20 20 cd 0d 1d e3  |eW%,6)....  ....|
00035270  0b 20 20 f2 70 6f 6c 6c  0d 1d e4 05 cb 0d 1d e5  |.  .poll........|
00035280  05 e1 0d 1d e6 05 3a 0d  1d e7 12 dd 20 f2 61 62  |......:..... .ab|
00035290  6f 72 74 5f 6d 65 72 67  65 0d 1d e8 1d f2 63 6c  |ort_merge.....cl|
000352a0  6f 73 65 5f 66 69 6c 65  28 64 62 61 73 65 68 61  |ose_file(dbaseha|
000352b0  6e 64 6c 65 25 29 0d 1d  e9 12 43 6c 69 65 6e 74  |ndle%)....Client|
000352c0  50 74 72 25 3d 74 6f 70  0d 1d ea 18 f2 64 65 73  |Ptr%=top.....des|
000352d0  65 6c 65 63 74 28 6d 65  72 67 65 57 25 2c 36 29  |elect(mergeW%,6)|
000352e0  0d 1d eb 1b f2 70 65 72  66 6f 72 6d 5f 63 6c 6f  |.....perform_clo|
000352f0  73 65 28 6d 65 72 67 65  57 25 29 0d 1d ec 0c e7  |se(mergeW%).....|
00035300  20 9f 3d 31 37 20 8c 0d  1d ed 17 20 20 f2 73 6f  | .=17 .....  .so|
00035310  66 74 65 72 72 6f 72 28  22 22 2c 32 37 29 0d 1d  |fterror("",27)..|
00035320  ee 1d 20 20 cc 20 f2 77  69 6d 70 5f 65 72 72 6f  |..  . .wimp_erro|
00035330  72 28 b9 2c 9f 2c 9e 2c  f6 24 29 0d 1d ef 05 cd  |r(.,.,.,.$).....|
00035340  0d 1d f0 05 e1 0d 1d f1  05 3a 0d 1d f2 22 dd 20  |.........:...". |
00035350  f2 49 6d 70 75 6c 73 65  5f 73 65 6e 64 28 74 61  |.Impulse_send(ta|
00035360  67 25 2c 6d 61 78 73 69  7a 65 25 29 0d 1d f3 43  |g%,maxsize%)...C|
00035370  c8 99 20 22 49 6d 70 75  6c 73 65 5f 54 72 61 6e  |.. "Impulse_Tran|
00035380  73 6d 69 74 44 61 74 61  22 2c 21 74 72 61 6e 73  |smitData",!trans|
00035390  61 6e 63 68 6f 72 25 2c  64 61 74 61 6c 65 6e 67  |anchor%,dataleng|
000353a0  74 68 25 2c 2c 2c 2c 2c  6d 79 74 61 73 6b 25 0d  |th%,,,,,mytask%.|
000353b0  1d f4 11 64 61 74 61 6c  65 6e 67 74 68 25 3d 30  |...datalength%=0|
000353c0  0d 1d f5 05 e1 0d 1d f6  05 3a 0d 1d f7 35 dd 20  |.........:...5. |
000353d0  f2 49 6d 70 75 6c 73 65  5f 72 65 63 65 69 76 65  |.Impulse_receive|
000353e0  28 72 65 70 6c 79 74 61  67 25 2c 65 78 70 65 63  |(replytag%,expec|
000353f0  74 65 64 25 2c 72 65 63  65 69 76 65 64 25 29 0d  |ted%,received%).|
00035400  1d f8 0e ea 20 49 25 2c  46 25 2c 50 25 0d 1d f9  |.... I%,F%,P%...|
00035410  1c 74 72 61 6e 73 62 75  66 66 25 3d 21 74 72 61  |.transbuff%=!tra|
00035420  6e 73 61 6e 63 68 6f 72  25 0d 1d fa 1b 74 72 61  |nsanchor%....tra|
00035430  6e 73 62 75 66 66 25 3f  72 65 63 65 69 76 65 64  |nsbuff%?received|
00035440  25 3d 31 33 0d 1d fb 15  64 61 74 61 24 3d 24 74  |%=13....data$=$t|
00035450  72 61 6e 73 62 75 66 66  25 0d 1d fc 47 f4 20 23  |ransbuff%...G. #|
00035460  23 23 20 41 63 6b 6e 6f  77 6c 65 64 67 65 20 64  |## Acknowledge d|
00035470  61 74 61 20 72 65 63 65  69 76 65 64 20 28 67 65  |ata received (ge|
00035480  74 20 72 65 61 73 6f 6e  20 63 6f 64 65 20 31 39  |t reason code 19|
00035490  20 6f 74 68 65 72 77 69  73 65 21 29 20 23 23 23  | otherwise!) ###|
000354a0  0d 1d fd 37 c8 99 20 22  49 6d 70 75 6c 73 65 5f  |...7.. "Impulse_|
000354b0  53 65 6e 64 4d 65 73 73  61 67 65 22 2c 26 32 30  |SendMessage",&20|
000354c0  32 2c 2c 2c 2c 2c 72 65  70 6c 79 74 61 67 25 2c  |2,,,,,replytag%,|
000354d0  6d 79 74 61 73 6b 25 0d  1d fe 11 e7 20 64 61 74  |mytask%..... dat|
000354e0  61 24 3c 3e 22 22 20 8c  0d 1d ff 14 20 20 50 25  |a$<>"" .....  P%|
000354f0  3d a7 64 61 74 61 24 2c  22 23 22 29 0d 1e 00 1a  |=.data$,"#")....|
00035500  20 20 52 45 43 25 3d bb  28 c0 64 61 74 61 24 2c  |  REC%=.(.data$,|
00035510  50 25 2d 31 29 29 0d 1e  01 18 20 20 64 61 74 61  |P%-1))....  data|
00035520  24 3d c1 64 61 74 61 24  2c 50 25 2b 31 29 0d 1e  |$=.data$,P%+1)..|
00035530  02 1a 20 20 e7 20 52 45  43 25 3d 2d 31 20 8c 20  |..  . REC%=-1 . |
00035540  52 45 43 25 3d 52 41 25  0d 1e 03 2e 20 20 f2 72  |REC%=RA%....  .r|
00035550  65 61 64 28 66 69 65 6c  64 73 25 2c 52 45 43 25  |ead(fields%,REC%|
00035560  3c 3e 52 41 25 2c 52 45  43 25 2c 24 64 61 74 61  |<>RA%,REC%,$data|
00035570  62 61 73 65 25 29 0d 1e  04 21 20 20 e3 20 49 25  |base%)...!  . I%|
00035580  3d 31 20 b8 20 a9 28 43  6c 69 65 6e 74 46 6f 72  |=1 . .(ClientFor|
00035590  6d 24 29 20 88 20 32 0d  1e 05 24 20 20 20 20 46  |m$) . 2...$    F|
000355a0  25 3d a4 66 6e 75 6d 28  c1 43 6c 69 65 6e 74 46  |%=.fnum(.ClientF|
000355b0  6f 72 6d 24 2c 49 25 2c  32 29 29 0d 1e 06 3c 20  |orm$,I%,2))...< |
000355c0  20 20 20 e7 20 64 61 74  61 24 3c 3e 22 22 20 8c  |   . data$<>"" .|
000355d0  20 24 52 66 25 28 46 25  29 3d a4 67 65 74 5f 73  | $Rf%(F%)=.get_s|
000355e0  74 72 69 6e 67 28 64 61  74 61 24 2c 43 6c 69 65  |tring(data$,Clie|
000355f0  6e 74 53 65 70 24 29 0d  1e 07 0a 20 20 ed 20 49  |ntSep$)....  . I|
00035600  25 0d 1e 08 1a 20 20 f2  77 72 69 74 65 28 66 69  |%....  .write(fi|
00035610  65 6c 64 73 25 2c 6b 65  79 25 29 0d 1e 09 52 20  |elds%,key%)...R |
00035620  20 e7 20 72 65 63 65 69  76 65 64 25 3d 30 20 8c  | . received%=0 .|
00035630  20 c8 99 20 22 49 6d 70  75 6c 73 65 5f 53 65 6e  | .. "Impulse_Sen|
00035640  64 4d 65 73 73 61 67 65  22 2c 26 32 30 31 2c 22  |dMessage",&201,"|
00035650  47 65 74 52 65 63 6f 72  64 22 2c 2c 2c 2c 67 65  |GetRecord",,,,ge|
00035660  74 72 65 63 25 2c 6d 79  74 61 73 6b 25 0d 1e 0a  |trec%,mytask%...|
00035670  05 cd 0d 1e 0b 05 e1 0d  1e 0c 05 3a 0d 1e 0d 1c  |...........:....|
00035680  dd 20 a4 67 65 74 5f 73  74 72 69 6e 67 28 f8 20  |. .get_string(. |
00035690  53 24 2c 73 65 70 24 29  0d 1e 0e 0b ea 20 50 25  |S$,sep$)..... P%|
000356a0  2c 46 24 0d 1e 0f 10 50  25 3d a7 53 24 2c 73 65  |,F$....P%=.S$,se|
000356b0  70 24 29 0d 1e 10 0c e7  20 50 25 3e 30 20 8c 0d  |p$)..... P%>0 ..|
000356c0  1e 11 12 20 20 46 24 3d  c0 53 24 2c 50 25 2d 31  |...  F$=.S$,P%-1|
000356d0  29 0d 1e 12 12 20 20 53  24 3d c1 53 24 2c 50 25  |)....  S$=.S$,P%|
000356e0  2b 31 29 0d 1e 13 05 cd  0d 1e 14 07 3d 46 24 0d  |+1).........=F$.|
000356f0  1e 15 05 3a 0d 1e 16 2b  dd 20 a4 70 72 65 70 61  |...:...+. .prepa|
00035700  72 65 5f 6e 65 78 74 5f  72 65 63 6f 72 64 28 6b  |re_next_record(k|
00035710  65 79 24 2c 74 72 61 6e  73 62 75 66 66 25 29 0d  |ey$,transbuff%).|
00035720  1e 17 12 ea 20 6f 6b 25  2c 49 25 2c 46 25 2c 50  |.... ok%,I%,F%,P|
00035730  25 0d 1e 18 16 e7 20 64  62 61 73 65 68 61 6e 64  |%..... dbasehand|
00035740  6c 65 25 3d 30 20 8c 0d  1e 19 2c 20 20 64 62 61  |le%=0 ....,  dba|
00035750  73 65 68 61 6e 64 6c 65  25 3d 8e 28 24 64 61 74  |sehandle%=.($dat|
00035760  61 62 61 73 65 25 2b 22  2e 44 61 74 61 62 61 73  |abase%+".Databas|
00035770  65 22 29 0d 1e 1a 27 20  20 43 6c 69 65 6e 74 50  |e")...'  ClientP|
00035780  74 72 25 3d a4 6e 65 69  67 68 62 6f 75 72 28 6b  |tr%=.neighbour(k|
00035790  65 79 25 2c 74 6f 70 2c  31 29 0d 1e 1b 05 cd 0d  |ey%,top,1)......|
000357a0  1e 1c 11 50 25 3d 74 72  61 6e 73 62 75 66 66 25  |...P%=transbuff%|
000357b0  0d 1e 1d 0d c8 8e 20 6b  65 79 24 20 ca 0d 1e 1e  |...... key$ ....|
000357c0  0e 20 20 c9 20 22 2a 2a  2a 22 3a 0d 1e 1f 1f 20  |.  . "***":.... |
000357d0  20 f2 63 6c 6f 73 65 5f  66 69 6c 65 28 64 62 61  | .close_file(dba|
000357e0  73 65 68 61 6e 64 6c 65  25 29 0d 1e 20 1b 20 20  |sehandle%).. .  |
000357f0  24 50 25 3d 6b 65 79 24  3a 50 25 2b 3d a9 28 24  |$P%=key$:P%+=.($|
00035800  50 25 29 2b 31 0d 1e 21  0b 20 20 c9 20 22 22 3a  |P%)+1..!.  . "":|
00035810  0d 1e 22 20 20 20 c8 95  20 6f 6b 25 3d a3 20 80  |.."   .. ok%=. .|
00035820  20 43 6c 69 65 6e 74 50  74 72 25 3c 3e 74 6f 70  | ClientPtr%<>top|
00035830  0d 1e 23 28 20 20 20 20  52 45 43 25 3d a4 72 65  |..#(    REC%=.re|
00035840  63 5f 6e 6f 28 6b 24 2c  6b 65 79 25 2c 43 6c 69  |c_no(k$,key%,Cli|
00035850  65 6e 74 50 74 72 25 29  0d 1e 24 27 20 20 20 20  |entPtr%)..$'    |
00035860  f2 72 65 61 64 73 6d 61  72 72 61 79 28 64 62 61  |.readsmarray(dba|
00035870  73 65 68 61 6e 64 6c 65  25 2c 52 45 43 25 29 0d  |sehandle%,REC%).|
00035880  1e 25 1e 20 20 20 20 e7  20 a0 28 43 6c 69 65 6e  |.%.    . .(Clien|
00035890  74 53 65 61 72 63 68 24  29 3d b9 20 8c 0d 1e 26  |tSearch$)=. ...&|
000358a0  24 20 20 20 20 20 20 24  50 25 3d c3 28 52 45 43  |$      $P%=.(REC|
000358b0  25 29 2b 22 23 22 3a 50  25 2b 3d a9 28 24 50 25  |%)+"#":P%+=.($P%|
000358c0  29 0d 1e 27 25 20 20 20  20 20 20 e3 20 49 25 3d  |)..'%      . I%=|
000358d0  31 20 b8 20 a9 28 43 6c  69 65 6e 74 46 6f 72 6d  |1 . .(ClientForm|
000358e0  24 29 20 88 20 32 0d 1e  28 28 20 20 20 20 20 20  |$) . 2..((      |
000358f0  20 20 46 25 3d a4 66 6e  75 6d 28 c1 43 6c 69 65  |  F%=.fnum(.Clie|
00035900  6e 74 46 6f 72 6d 24 2c  49 25 2c 32 29 29 0d 1e  |ntForm$,I%,2))..|
00035910  29 2c 20 20 20 20 20 20  20 20 24 50 25 3d 46 24  |),        $P%=F$|
00035920  28 46 25 29 2b 43 6c 69  65 6e 74 53 65 70 24 3a  |(F%)+ClientSep$:|
00035930  50 25 2b 3d a9 28 24 50  25 29 0d 1e 2a 0e 20 20  |P%+=.($P%)..*.  |
00035940  20 20 20 20 ed 20 49 25  0d 1e 2b 1f 20 20 20 20  |    . I%..+.    |
00035950  20 20 24 50 25 2b 3d 43  6c 69 65 6e 74 53 65 70  |  $P%+=ClientSep|
00035960  24 3a 50 25 2b 3d 31 0d  1e 2c 0f 20 20 20 20 20  |$:P%+=1..,.     |
00035970  20 6f 6b 25 3d b9 0d 1e  2d 09 20 20 20 20 cd 0d  | ok%=...-.    ..|
00035980  1e 2e 30 20 20 20 20 43  6c 69 65 6e 74 50 74 72  |..0    ClientPtr|
00035990  25 3d a4 6e 65 69 67 68  62 6f 75 72 28 6b 65 79  |%=.neighbour(key|
000359a0  25 2c 43 6c 69 65 6e 74  50 74 72 25 2c 31 29 0d  |%,ClientPtr%,1).|
000359b0  1e 2f 07 20 20 ce 0d 1e  30 31 20 20 e7 20 50 25  |./.  ...01  . P%|
000359c0  3d 74 72 61 6e 73 62 75  66 66 25 20 8c 20 f2 63  |=transbuff% . .c|
000359d0  6c 6f 73 65 5f 66 69 6c  65 28 64 62 61 73 65 68  |lose_file(dbaseh|
000359e0  61 6e 64 6c 65 25 29 0d  1e 31 08 20 20 7f 3a 0d  |andle%)..1.  .:.|
000359f0  1e 32 22 20 20 76 61 6c  24 3d a4 74 79 70 65 28  |.2"  val$=.type(|
00035a00  6b 65 79 25 29 3a 6b 6c  25 3d a9 28 6b 65 79 24  |key%):kl%=.(key$|
00035a10  29 0d 1e 33 25 20 20 43  6c 69 65 6e 74 50 74 72  |)..3%  ClientPtr|
00035a20  25 3d a4 73 65 61 72 63  68 28 6b 65 79 24 2c 6b  |%=.search(key$,k|
00035a30  65 79 25 2c 31 29 0d 1e  34 17 20 20 e7 20 43 6c  |ey%,1)..4.  . Cl|
00035a40  69 65 6e 74 50 74 72 25  3e 3d 30 20 8c 0d 1e 35  |ientPtr%>=0 ...5|
00035a50  28 20 20 20 20 52 45 43  25 3d a4 72 65 63 5f 6e  |(    REC%=.rec_n|
00035a60  6f 28 6b 24 2c 6b 65 79  25 2c 43 6c 69 65 6e 74  |o(k$,key%,Client|
00035a70  50 74 72 25 29 0d 1e 36  27 20 20 20 20 f2 72 65  |Ptr%)..6'    .re|
00035a80  61 64 73 6d 61 72 72 61  79 28 64 62 61 73 65 68  |adsmarray(dbaseh|
00035a90  61 6e 64 6c 65 25 2c 52  45 43 25 29 0d 1e 37 22  |andle%,REC%)..7"|
00035aa0  20 20 20 20 24 50 25 3d  c3 28 52 45 43 25 29 2b  |    $P%=.(REC%)+|
00035ab0  22 23 22 3a 50 25 2b 3d  a9 28 24 50 25 29 0d 1e  |"#":P%+=.($P%)..|
00035ac0  38 23 20 20 20 20 e3 20  49 25 3d 31 20 b8 20 a9  |8#    . I%=1 . .|
00035ad0  28 43 6c 69 65 6e 74 46  6f 72 6d 24 29 20 88 20  |(ClientForm$) . |
00035ae0  32 0d 1e 39 26 20 20 20  20 20 20 46 25 3d a4 66  |2..9&      F%=.f|
00035af0  6e 75 6d 28 c1 43 6c 69  65 6e 74 46 6f 72 6d 24  |num(.ClientForm$|
00035b00  2c 49 25 2c 32 29 29 0d  1e 3a 2a 20 20 20 20 20  |,I%,2))..:*     |
00035b10  20 24 50 25 3d 46 24 28  46 25 29 2b 43 6c 69 65  | $P%=F$(F%)+Clie|
00035b20  6e 74 53 65 70 24 3a 50  25 2b 3d a9 28 24 50 25  |ntSep$:P%+=.($P%|
00035b30  29 0d 1e 3b 0c 20 20 20  20 ed 20 49 25 0d 1e 3c  |)..;.    . I%..<|
00035b40  1d 20 20 20 20 24 50 25  2b 3d 43 6c 69 65 6e 74  |.    $P%+=Client|
00035b50  53 65 70 24 3a 50 25 2b  3d 31 0d 1e 3d 07 20 20  |Sep$:P%+=1..=.  |
00035b60  cd 0d 1e 3e 05 cb 0d 1e  3f 12 3d 50 25 2d 74 72  |...>....?.=P%-tr|
00035b70  61 6e 73 62 75 66 66 25  0d 1e 40 05 3a 0d 1e 41  |ansbuff%..@.:..A|
00035b80  30 dd 20 a4 70 72 65 70  61 72 65 5f 6e 65 78 74  |0. .prepare_next|
00035b90  5f 66 69 65 6c 64 28 6d  65 74 68 6f 64 25 2c 53  |_field(method%,S|
00035ba0  24 2c 74 72 61 6e 73 62  75 66 66 25 29 0d 1e 42  |$,transbuff%)..B|
00035bb0  29 ea 20 4c 25 2c 46 25  2c 50 25 2c 6c 65 6e 25  |). L%,F%,P%,len%|
00035bc0  2c 54 24 2c 46 24 2c 56  25 2c 52 25 2c 62 24 2c  |,T$,F$,V%,R%,b$,|
00035bd0  6b 24 2c 53 46 24 0d 1e  43 0f c8 8e 20 74 6f 6b  |k$,SF$..C... tok|
00035be0  65 6e 25 20 ca 0d 1e 44  0a 20 20 c9 20 37 3a 0d  |en% ...D.  . 7:.|
00035bf0  1e 45 26 20 20 46 25 3d  a4 66 69 65 6c 64 28 53  |.E&  F%=.field(S|
00035c00  24 2c a3 29 3a 56 25 3d  63 68 61 72 74 79 70 65  |$,.):V%=chartype|
00035c10  25 28 46 25 29 0d 1e 46  0d 20 20 c8 8e 20 56 25  |%(F%)..F.  .. V%|
00035c20  20 ca 0d 1e 47 43 20 20  20 20 c9 20 30 2c 31 2c  | ...GC    . 0,1,|
00035c30  32 2c 33 2c 34 2c 35 2c  36 2c 37 2c 38 2c 34 36  |2,3,4,5,6,7,8,46|
00035c40  2c 34 37 2c 34 38 2c 34  39 2c 35 30 2c 35 31 2c  |,47,48,49,50,51,|
00035c50  35 32 2c 35 33 2c 35 34  2c 35 35 2c 35 36 2c 35  |52,53,54,55,56,5|
00035c60  37 2c 35 38 3a 0d 1e 48  14 20 20 20 20 4c 25 3d  |7,58:..H.    L%=|
00035c70  a9 28 46 24 28 46 25 29  29 0d 1e 49 44 20 20 20  |.(F$(F%))..ID   |
00035c80  20 f2 65 78 74 65 6e 64  5f 6e 61 6d 65 64 5f 73  | .extend_named_s|
00035c90  6c 69 64 69 6e 67 5f 62  6c 6f 63 6b 28 74 72 61  |liding_block(tra|
00035ca0  6e 73 61 6e 63 68 6f 72  25 2c 28 4c 25 2b 34 29  |nsanchor%,(L%+4)|
00035cb0  20 80 20 26 46 46 46 46  46 46 46 43 29 0d 1e 4a  | . &FFFFFFFC)..J|
00035cc0  20 20 20 20 20 74 72 61  6e 73 62 75 66 66 25 3d  |     transbuff%=|
00035cd0  21 74 72 61 6e 73 61 6e  63 68 6f 72 25 0d 1e 4b  |!transanchor%..K|
00035ce0  2a 20 20 20 20 24 74 72  61 6e 73 62 75 66 66 25  |*    $transbuff%|
00035cf0  3d 46 24 28 46 25 29 3a  74 72 61 6e 73 62 75 66  |=F$(F%):transbuf|
00035d00  66 25 3f 4c 25 3d 30 0d  1e 4c 10 20 20 20 20 c9  |f%?L%=0..L.    .|
00035d10  20 33 36 2c 33 39 3a 0d  1e 4d 26 20 20 20 20 52  | 36,39:..M&    R|
00035d20  25 3d a4 72 65 63 5f 6e  6f 28 6b 24 2c 6b 65 79  |%=.rec_no(k$,key|
00035d30  25 2c 43 6c 69 65 6e 74  50 74 72 25 29 0d 1e 4e  |%,ClientPtr%)..N|
00035d40  2f 20 20 20 20 4c 25 3d  a4 62 6c 6f 62 5f 70 61  |/    L%=.blob_pa|
00035d50  74 68 28 a3 2c 24 64 61  74 61 62 61 73 65 25 2c  |th(.,$database%,|
00035d60  52 25 2c 46 25 2c 56 25  2c 62 24 29 0d 1e 4f 10  |R%,F%,V%,b$)..O.|
00035d70  20 20 20 20 e7 20 4c 25  3e 30 20 8c 0d 1e 50 46  |    . L%>0 ...PF|
00035d80  20 20 20 20 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |      .extend_na|
00035d90  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
00035da0  6b 28 74 72 61 6e 73 61  6e 63 68 6f 72 25 2c 28  |k(transanchor%,(|
00035db0  4c 25 2b 34 29 20 80 20  26 46 46 46 46 46 46 46  |L%+4) . &FFFFFFF|
00035dc0  43 29 0d 1e 51 22 20 20  20 20 20 20 74 72 61 6e  |C)..Q"      tran|
00035dd0  73 62 75 66 66 25 3d 21  74 72 61 6e 73 61 6e 63  |sbuff%=!transanc|
00035de0  68 6f 72 25 0d 1e 52 28  20 20 20 20 20 20 c8 99  |hor%..R(      ..|
00035df0  20 22 4f 53 5f 46 69 6c  65 22 2c 32 35 35 2c 62  | "OS_File",255,b|
00035e00  24 2c 74 72 61 6e 73 62  75 66 66 25 0d 1e 53 10  |$,transbuff%..S.|
00035e10  20 20 20 20 20 20 cc 20  4c 25 3d 31 0d 1e 54 37  |      . L%=1..T7|
00035e20  20 20 20 20 20 20 f2 65  78 74 65 6e 64 5f 6e 61  |      .extend_na|
00035e30  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
00035e40  6b 28 74 72 61 6e 73 61  6e 63 68 6f 72 25 2c 32  |k(transanchor%,2|
00035e50  35 36 29 0d 1e 55 22 20  20 20 20 20 20 74 72 61  |56)..U"      tra|
00035e60  6e 73 62 75 66 66 25 3d  21 74 72 61 6e 73 61 6e  |nsbuff%=!transan|
00035e70  63 68 6f 72 25 0d 1e 56  17 20 20 20 20 20 20 3f  |chor%..V.      ?|
00035e80  74 72 61 6e 73 62 75 66  66 25 3d 30 0d 1e 57 09  |transbuff%=0..W.|
00035e90  20 20 20 20 cd 0d 1e 58  17 20 20 20 20 74 72 61  |    ...X.    tra|
00035ea0  6e 73 62 75 66 66 25 3f  4c 25 3d 30 0d 1e 59 07  |nsbuff%?L%=0..Y.|
00035eb0  20 20 cb 0d 1e 5a 0a 20  20 c9 20 38 3a 0d 1e 5b  |  ...Z.  . 8:..[|
00035ec0  2b 20 20 50 25 3d a7 53  24 2c 22 20 22 29 3a 54  |+  P%=.S$," "):T|
00035ed0  24 3d c1 53 24 2c 50 25  2b 31 29 3a 53 24 3d c0  |$=.S$,P%+1):S$=.|
00035ee0  53 24 2c 50 25 2d 31 29  0d 1e 5c 32 20 20 46 25  |S$,P%-1)..\2  F%|
00035ef0  3d a4 66 69 65 6c 64 28  53 24 2c a3 29 3a 46 24  |=.field(S$,.):F$|
00035f00  3d a4 65 78 70 61 6e 64  28 46 24 28 46 25 29 2c  |=.expand(F$(F%),|
00035f10  54 24 2c 4c 25 2c 53 46  24 29 0d 1e 5d 34 20 20  |T$,L%,SF$)..]4  |
00035f20  f2 65 78 74 65 6e 64 5f  6e 61 6d 65 64 5f 73 6c  |.extend_named_sl|
00035f30  69 64 69 6e 67 5f 62 6c  6f 63 6b 28 74 72 61 6e  |iding_block(tran|
00035f40  73 61 6e 63 68 6f 72 25  2c 4c 25 2b 31 29 0d 1e  |sanchor%,L%+1)..|
00035f50  5e 1e 20 20 74 72 61 6e  73 62 75 66 66 25 3d 21  |^.  transbuff%=!|
00035f60  74 72 61 6e 73 61 6e 63  68 6f 72 25 0d 1e 5f 36  |transanchor%.._6|
00035f70  20 20 24 74 72 61 6e 73  62 75 66 66 25 3d 46 24  |  $transbuff%=F$|
00035f80  3a 4c 25 3d a9 28 24 74  72 61 6e 73 62 75 66 66  |:L%=.($transbuff|
00035f90  25 29 3a 74 72 61 6e 73  62 75 66 66 25 3f 4c 25  |%):transbuff%?L%|
00035fa0  3d 30 0d 1e 60 05 cb 0d  1e 61 1b 6c 65 6e 25 3d  |=0..`....a.len%=|
00035fb0  28 4c 25 2b 34 29 20 80  20 26 46 46 46 46 46 46  |(L%+4) . &FFFFFF|
00035fc0  46 43 0d 1e 62 09 3d 6c  65 6e 25 0d 1e 63 05 3a  |FC..b.=len%..c.:|
00035fd0  0d 1e 64 15 dd 20 f2 72  65 61 64 79 5f 74 6f 5f  |..d.. .ready_to_|
00035fe0  6d 65 72 67 65 0d 1e 65  1a 49 6d 70 5f 77 61 69  |merge..e.Imp_wai|
00035ff0  74 25 3d a3 3a 6d 65 72  67 69 6e 67 25 3d b9 0d  |t%=.:merging%=..|
00036000  1e 66 1f 24 a4 74 65 78  74 28 6d 65 72 67 65 57  |.f.$.text(mergeW|
00036010  25 2c 31 29 3d 64 6f 63  75 6d 65 6e 74 24 0d 1e  |%,1)=document$..|
00036020  67 26 e7 20 ac 20 63 6f  6d 6d 6f 6e 25 20 8c 20  |g&. . common% . |
00036030  24 a4 74 65 78 74 28 6d  65 72 67 65 57 25 2c 33  |$.text(mergeW%,3|
00036040  29 3d 22 22 0d 1e 68 19  f2 6f 70 65 6e 5f 77 69  |)=""..h..open_wi|
00036050  6e 64 6f 77 28 6d 65 72  67 65 57 25 29 0d 1e 69  |ndow(mergeW%)..i|
00036060  19 f2 73 65 74 5f 63 61  72 65 74 28 6d 65 72 67  |..set_caret(merg|
00036070  65 57 25 2c 33 29 0d 1e  6a 58 c8 99 20 22 49 6d  |eW%,3)..jX.. "Im|
00036080  70 75 6c 73 65 5f 53 65  6e 64 4d 65 73 73 61 67  |pulse_SendMessag|
00036090  65 22 2c 26 32 30 30 2c  22 3a 22 2b 6d 65 72 67  |e",&200,":"+merg|
000360a0  65 77 69 74 68 24 2b 22  2e 22 2b 64 6f 63 75 6d  |ewith$+"."+docum|
000360b0  65 6e 74 24 2b 22 20 45  64 69 74 20 4f 66 66 22  |ent$+" Edit Off"|
000360c0  2c 2c 2c 2c 2d 31 2c 6d  79 74 61 73 6b 25 0d 1e  |,,,,-1,mytask%..|
000360d0  6b 05 e1 0d 1e 6c 05 3a  0d 1e 6d 18 dd 20 a4 6d  |k....l.:..m.. .m|
000360e0  65 72 67 65 5f 6e 65 78  74 28 50 25 2c 44 25 29  |erge_next(P%,D%)|
000360f0  0d 1e 6e 11 44 25 3d 28  44 25 2b 31 29 20 81 20  |..n.D%=(D%+1) . |
00036100  32 0d 1e 6f 27 50 25 3d  a4 6e 65 78 74 5f 6d 61  |2..o'P%=.next_ma|
00036110  74 63 68 28 50 25 2c 44  25 2c 43 6c 69 65 6e 74  |tch(P%,D%,Client|
00036120  53 65 61 72 63 68 24 29  0d 1e 70 0f e7 20 50 25  |Search$)..p.. P%|
00036130  3c 3e 74 6f 70 20 8c 0d  1e 71 2c 20 20 53 24 3d  |<>top ...q,  S$=|
00036140  46 24 28 4b 46 25 28 6b  65 79 25 2c 30 29 29 2b  |F$(KF%(key%,0))+|
00036150  22 20 22 2b 46 24 28 4b  46 25 28 6b 65 79 25 2c  |" "+F$(KF%(key%,|
00036160  31 29 29 0d 1e 72 20 20  20 24 a4 74 65 78 74 28  |1))..r   $.text(|
00036170  6d 65 72 67 65 57 25 2c  31 33 29 3d c0 53 24 2c  |mergeW%,13)=.S$,|
00036180  38 30 29 0d 1e 73 1e 20  20 f2 72 65 64 72 61 77  |80)..s.  .redraw|
00036190  5f 69 63 6f 6e 28 6d 65  72 67 65 57 25 2c 31 33  |_icon(mergeW%,13|
000361a0  29 0d 1e 74 5e 20 20 c8  99 20 22 49 6d 70 75 6c  |)..t^  .. "Impul|
000361b0  73 65 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 2c  |se_SendMessage",|
000361c0  26 32 30 31 2c 22 3a 22  2b 6d 65 72 67 65 77 69  |&201,":"+mergewi|
000361d0  74 68 24 2b 22 2e 22 2b  64 6f 63 75 6d 65 6e 74  |th$+"."+document|
000361e0  24 2b 22 20 4d 65 72 67  65 22 2c 2c 2c 2c 6d 65  |$+" Merge",,,,me|
000361f0  72 67 65 74 61 67 25 2c  6d 79 74 61 73 6b 25 0d  |rgetag%,mytask%.|
00036200  1e 75 05 cd 0d 1e 76 07  3d 50 25 0d 1e 77 05 3a  |.u....v.=P%..w.:|
00036210  0d 1e 78 4b f4 20 45 6e  64 20 6f 66 20 22 49 6d  |..xK. End of "Im|
00036220  70 75 6c 73 65 22 20 68  61 6e 64 6c 69 6e 67 20  |pulse" handling |
00036230  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00036250  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 1e 79 05 3a  |-----------..y.:|
00036260  0d 1e 7a 4b f4 20 49 6d  70 6f 72 74 2f 45 78 70  |..zK. Import/Exp|
00036270  6f 72 74 20 43 53 56 20  66 69 6c 65 73 20 2d 2d  |ort CSV files --|
00036280  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000362a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 1e 7b 05 3a  |-----------..{.:|
000362b0  0d 1e 7c 1e dd 20 f2 73  74 61 72 74 5f 69 6d 70  |..|.. .start_imp|
000362c0  6f 72 74 28 74 79 70 65  24 2c 77 69 25 29 0d 1e  |ort(type$,wi%)..|
000362d0  7d 09 ea 20 4f 4b 25 0d  1e 7e 11 c8 8e 20 70 72  |}.. OK%..~... pr|
000362e0  65 73 65 6e 74 25 20 ca  0d 1e 7f 0a 20 20 c9 20  |esent% .....  . |
000362f0  30 3a 0d 1e 80 2d 20 20  e7 20 66 69 65 6c 64 73  |0:...-  . fields|
00036300  25 3d 30 20 8c 20 4f 4b  25 3d b9 20 8b 20 f2 73  |%=0 . OK%=. . .s|
00036310  6f 66 74 65 72 72 6f 72  28 22 22 2c 36 39 29 0d  |ofterror("",69).|
00036320  1e 81 2f 20 20 c9 20 37  3a e7 20 4d 6f 64 69 66  |../  . 7:. Modif|
00036330  79 25 20 8c 20 4f 4b 25  3d b9 20 8b 20 f2 73 6f  |y% . OK%=. . .so|
00036340  66 74 65 72 72 6f 72 28  22 22 2c 31 34 29 0d 1e  |fterror("",14)..|
00036350  82 19 20 20 7f 3a f2 73  6f 66 74 65 72 72 6f 72  |..  .:.softerror|
00036360  28 22 22 2c 36 39 29 0d  1e 83 05 cb 0d 1e 84 0b  |("",69).........|
00036370  e7 20 4f 4b 25 20 8c 0d  1e 85 20 20 20 24 a4 74  |. OK% ....   $.t|
00036380  65 78 74 28 63 73 76 57  25 2c 31 33 29 3d 66 69  |ext(csvW%,13)=fi|
00036390  6c 65 6e 61 6d 65 24 0d  1e 86 1d 20 20 f2 69 63  |lename$....  .ic|
000363a0  6f 6e 5f 62 69 74 28 32  32 2c 63 73 76 57 25 2c  |on_bit(22,csvW%,|
000363b0  30 2c a3 29 0d 1e 87 34  20 20 21 62 6c 6f 63 6b  |0,.)...4  !block|
000363c0  25 3d 63 73 76 57 25 3a  c8 99 20 22 57 69 6d 70  |%=csvW%:.. "Wimp|
000363d0  5f 47 65 74 57 69 6e 64  6f 77 53 74 61 74 65 22  |_GetWindowState"|
000363e0  2c 2c 62 6c 6f 63 6b 25  0d 1e 88 29 20 20 62 6c  |,,block%...)  bl|
000363f0  6f 63 6b 25 21 34 3d 38  30 30 3a 62 6c 6f 63 6b  |ock%!4=800:block|
00036400  25 21 31 32 3d 62 6c 6f  63 6b 25 21 34 2b 33 39  |%!12=block%!4+39|
00036410  30 0d 1e 89 29 20 20 62  6c 6f 63 6b 25 21 38 3d  |0...)  block%!8=|
00036420  31 35 30 3a 62 6c 6f 63  6b 25 21 31 36 3d 62 6c  |150:block%!16=bl|
00036430  6f 63 6b 25 21 38 2b 37  31 36 0d 1e 8a 28 20 20  |ock%!8+716...(  |
00036440  24 43 53 56 54 69 74 6c  65 25 3d 22 49 6d 70 6f  |$CSVTitle%="Impo|
00036450  72 74 20 22 2b 74 79 70  65 24 2b 22 20 66 69 6c  |rt "+type$+" fil|
00036460  65 22 0d 1e 8b 22 20 20  c8 99 20 22 57 69 6d 70  |e"..."  .. "Wimp|
00036470  5f 4f 70 65 6e 57 69 6e  64 6f 77 22 2c 2c 62 6c  |_OpenWindow",,bl|
00036480  6f 63 6b 25 0d 1e 8c 1a  20 20 f2 73 65 74 5f 63  |ock%....  .set_c|
00036490  61 72 65 74 28 63 73 76  57 25 2c 31 33 29 0d 1e  |aret(csvW%,13)..|
000364a0  8d 05 cd 0d 1e 8e 05 e1  0d 1e 8f 05 3a 0d 1e 90  |............:...|
000364b0  1b dd 20 f2 77 72 69 74  65 5f 63 73 76 28 46 69  |.. .write_csv(Fi|
000364c0  6c 65 6e 61 6d 65 24 29  0d 1e 91 15 e7 20 77 72  |lename$)..... wr|
000364d0  69 74 69 6e 67 63 73 76  25 20 8c 20 e1 0d 1e 92  |itingcsv% . ....|
000364e0  3f e7 20 70 72 69 6e 74  6f 72 64 65 72 24 3c 3e  |?. printorder$<>|
000364f0  22 22 20 8c 20 46 6f 72  6d 24 3d 70 72 69 6e 74  |"" . Form$=print|
00036500  6f 72 64 65 72 24 20 8b  20 f2 73 6f 66 74 65 72  |order$ . .softer|
00036510  72 6f 72 28 22 22 2c 33  34 29 3a e1 0d 1e 93 21  |ror("",34):....!|
00036520  ea 20 50 25 2c 72 65 63  25 2c 65 78 61 6d 69 6e  |. P%,rec%,examin|
00036530  65 64 25 2c 73 75 62 74  6f 74 61 6c 25 0d 1e 94  |ed%,subtotal%...|
00036540  07 ea 20 85 0d 1e 95 18  ee 20 85 20 ea 3a f7 20  |.. ...... . .:. |
00036550  85 3a f2 65 6e 64 5f 63  73 76 3a e1 0d 1e 96 1b  |.:.end_csv:.....|
00036560  63 73 76 68 61 6e 64 6c  65 25 3d ae 28 46 69 6c  |csvhandle%=.(Fil|
00036570  65 6e 61 6d 65 24 29 0d  1e 97 24 e7 20 a4 73 65  |ename$)...$. .se|
00036580  6c 65 63 74 65 64 28 63  73 76 57 25 2c 31 29 20  |lected(csvW%,1) |
00036590  8c 20 f2 63 73 76 5f 68  65 61 64 0d 1e 98 2a 64  |. .csv_head...*d|
000365a0  62 61 73 65 68 61 6e 64  6c 65 25 3d 8e 28 24 64  |basehandle%=.($d|
000365b0  61 74 61 62 61 73 65 25  2b 22 2e 44 61 74 61 62  |atabase%+".Datab|
000365c0  61 73 65 22 29 0d 1e 99  3e 53 65 61 72 63 68 24  |ase")...>Search$|
000365d0  3d a4 70 61 72 73 65 28  24 a4 74 65 78 74 28 73  |=.parse($.text(s|
000365e0  61 76 65 73 75 62 57 25  2c 30 29 2c a4 73 65 6c  |avesubW%,0),.sel|
000365f0  65 63 74 65 64 28 73 61  76 65 73 75 62 57 25 2c  |ected(savesubW%,|
00036600  35 29 29 0d 1e 9a 15 c8  99 20 22 48 6f 75 72 67  |5))...... "Hourg|
00036610  6c 61 73 73 5f 4f 6e 22  0d 1e 9b 1d 50 25 3d a4  |lass_On"....P%=.|
00036620  6e 65 69 67 68 62 6f 75  72 28 6b 65 79 25 2c 74  |neighbour(key%,t|
00036630  6f 70 2c 31 29 0d 1e 9c  20 f2 73 63 61 6e 5f 66  |op,1)... .scan_f|
00036640  69 6c 65 28 22 50 25 3c  3e 74 6f 70 22 2c 6b 65  |ile("P%<>top",ke|
00036650  79 25 2c 33 29 0d 1e 9d  16 c8 99 20 22 48 6f 75  |y%,3)...... "Hou|
00036660  72 67 6c 61 73 73 5f 4f  66 66 22 0d 1e 9e 1b f2  |rglass_Off".....|
00036670  63 6c 6f 73 65 5f 66 69  6c 65 28 63 73 76 68 61  |close_file(csvha|
00036680  6e 64 6c 65 25 29 0d 1e  9f 1d f2 63 6c 6f 73 65  |ndle%).....close|
00036690  5f 66 69 6c 65 28 64 62  61 73 65 68 61 6e 64 6c  |_file(dbasehandl|
000366a0  65 25 29 0d 1e a0 28 e7  20 73 65 70 24 3d 22 2c  |e%)...(. sep$=",|
000366b0  22 20 8c 20 74 79 70 65  25 3d 26 64 66 65 20 8b  |" . type%=&dfe .|
000366c0  20 74 79 70 65 25 3d 26  66 66 66 0d 1e a1 23 c8  | type%=&fff...#.|
000366d0  99 20 22 4f 53 5f 46 69  6c 65 22 2c 31 38 2c 46  |. "OS_File",18,F|
000366e0  69 6c 65 6e 61 6d 65 24  2c 74 79 70 65 25 0d 1e  |ilename$,type%..|
000366f0  a2 11 77 72 69 74 69 6e  67 63 73 76 25 3d a3 0d  |..writingcsv%=..|
00036700  1e a3 05 e1 0d 1e a4 05  3a 0d 1e a5 0e dd 20 f2  |........:..... .|
00036710  65 6e 64 5f 63 73 76 0d  1e a6 18 c8 99 20 22 48  |end_csv...... "H|
00036720  6f 75 72 67 6c 61 73 73  5f 53 6d 61 73 68 22 0d  |ourglass_Smash".|
00036730  1e a7 1b f2 63 6c 6f 73  65 5f 66 69 6c 65 28 63  |....close_file(c|
00036740  73 76 68 61 6e 64 6c 65  25 29 0d 1e a8 1d f2 63  |svhandle%).....c|
00036750  6c 6f 73 65 5f 66 69 6c  65 28 64 62 61 73 65 68  |lose_file(dbaseh|
00036760  61 6e 64 6c 65 25 29 0d  1e a9 12 f2 63 6c 6f 73  |andle%).....clos|
00036770  65 5f 66 69 6c 65 28 46  29 0d 1e aa 22 c8 99 20  |e_file(F)...".. |
00036780  22 4f 53 5f 46 69 6c 65  22 2c 31 38 2c 46 69 6c  |"OS_File",18,Fil|
00036790  65 6e 61 6d 65 24 2c 26  64 66 65 0d 1e ab 11 77  |ename$,&dfe....w|
000367a0  72 69 74 69 6e 67 63 73  76 25 3d a3 0d 1e ac 0c  |ritingcsv%=.....|
000367b0  e7 20 9f 3d 31 37 20 8c  0d 1e ad 17 20 20 f2 73  |. .=17 .....  .s|
000367c0  6f 66 74 65 72 72 6f 72  28 22 22 2c 34 31 29 0d  |ofterror("",41).|
000367d0  1e ae 1d 20 20 cc 20 f2  77 69 6d 70 5f 65 72 72  |...  . .wimp_err|
000367e0  6f 72 28 b9 2c 9f 2c 9e  2c f6 24 29 0d 1e af 05  |or(.,.,.,.$)....|
000367f0  cd 0d 1e b0 05 e1 0d 1e  b1 05 3a 0d 1e b2 0f dd  |..........:.....|
00036800  20 f2 63 73 76 5f 68 65  61 64 0d 1e b3 1a ea 20  | .csv_head..... |
00036810  49 25 2c 46 25 2c 66 24  2c 48 24 2c 48 65 61 64  |I%,F%,f$,H$,Head|
00036820  24 2c 4e 25 0d 1e b4 09  49 25 3d 2d 31 0d 1e b5  |$,N%....I%=-1...|
00036830  14 c8 95 20 49 25 3c a9  28 46 6f 72 6d 24 29 2d  |... I%<.(Form$)-|
00036840  31 0d 1e b6 28 20 20 49  25 2b 3d 32 3a 46 25 3d  |1...(  I%+=2:F%=|
00036850  a4 66 6e 75 6d 28 c1 46  6f 72 6d 24 2c 49 25 2c  |.fnum(.Form$,I%,|
00036860  32 29 29 3a 4e 25 2b 3d  31 0d 1e b7 50 20 20 e7  |2)):N%+=1...P  .|
00036870  20 a4 73 65 6c 65 63 74  65 64 28 70 72 69 6e 74  | .selected(print|
00036880  57 25 2c 32 29 20 8c 20  48 65 61 64 24 3d 24 a4  |W%,2) . Head$=$.|
00036890  74 65 78 74 28 6d 61 69  6e 57 25 2c 28 64 65 73  |text(mainW%,(des|
000368a0  63 25 28 46 25 29 29 29  20 8b 20 48 65 61 64 24  |c%(F%))) . Head$|
000368b0  3d 54 61 67 24 28 46 25  29 0d 1e b8 4d 20 20 e7  |=Tag$(F%)...M  .|
000368c0  20 a4 73 65 6c 65 63 74  65 64 28 63 73 76 57 25  | .selected(csvW%|
000368d0  2c 34 29 20 8c 20 48 65  61 64 24 3d c3 28 6c 65  |,4) . Head$=.(le|
000368e0  6e 25 28 46 25 29 29 2b  22 a4 22 2b 48 65 61 64  |n%(F%))+"."+Head|
000368f0  24 2b 22 a4 22 2b c3 28  63 68 61 72 74 79 70 65  |$+"."+.(chartype|
00036900  25 28 46 25 29 29 0d 1e  b9 58 20 20 e7 20 63 68  |%(F%))...X  . ch|
00036910  61 72 74 79 70 65 25 28  46 25 29 3c 3e 33 20 80  |artype%(F%)<>3 .|
00036920  20 63 68 61 72 74 79 70  65 25 28 46 25 29 3c 3e  | chartype%(F%)<>|
00036930  36 20 80 20 a4 73 65 6c  65 63 74 65 64 28 63 73  |6 . .selected(cs|
00036940  76 57 25 2c 30 29 20 8c  20 48 65 61 64 24 3d 22  |vW%,0) . Head$="|
00036950  22 22 22 2b 48 65 61 64  24 2b 22 22 22 22 0d 1e  |"""+Head$+""""..|
00036960  ba 1f 20 20 e7 20 4e 25  3e 31 20 8c 20 48 65 61  |..  . N%>1 . Hea|
00036970  64 24 3d 73 65 70 24 2b  48 65 61 64 24 0d 1e bb  |d$=sep$+Head$...|
00036980  19 20 20 d5 23 63 73 76  68 61 6e 64 6c 65 25 2c  |.  .#csvhandle%,|
00036990  48 65 61 64 24 3b 0d 1e  bc 05 ce 0d 1e bd 17 d5  |Head$;..........|
000369a0  23 63 73 76 68 61 6e 64  6c 65 25 2c 74 65 72 6d  |#csvhandle%,term|
000369b0  24 3b 0d 1e be 05 e1 0d  1e bf 05 3a 0d 1e c0 18  |$;.........:....|
000369c0  dd 20 f2 77 72 69 74 65  5f 63 73 76 5f 72 65 63  |. .write_csv_rec|
000369d0  28 52 25 29 0d 1e c1 30  ea 20 49 25 2c 46 25 2c  |(R%)...0. I%,F%,|
000369e0  66 24 2c 46 24 2c 4c 25  2c 4e 25 2c 66 69 6c 65  |f$,F$,L%,N%,file|
000369f0  6e 61 6d 65 24 2c 6c 65  6e 25 2c 62 61 73 65 25  |name$,len%,base%|
00036a00  2c 53 46 24 0d 1e c2 1a  e7 20 a4 73 65 6c 65 63  |,SF$..... .selec|
00036a10  74 65 64 28 63 73 76 57  25 2c 33 29 20 8c 0d 1e  |ted(csvW%,3) ...|
00036a20  c3 13 20 20 46 24 3d a4  6b 65 79 32 28 30 2c 31  |..  F$=.key2(0,1|
00036a30  29 0d 1e c4 2c 20 20 e7  20 a4 73 65 6c 65 63 74  |)...,  . .select|
00036a40  65 64 28 63 73 76 57 25  2c 30 29 20 8c 20 46 24  |ed(csvW%,0) . F$|
00036a50  3d 22 22 22 22 2b 46 24  2b 22 22 22 22 0d 1e c5  |=""""+F$+""""...|
00036a60  1b 20 20 d5 23 63 73 76  68 61 6e 64 6c 65 25 2c  |.  .#csvhandle%,|
00036a70  46 24 2b 73 65 70 24 3b  0d 1e c6 05 cd 0d 1e c7  |F$+sep$;........|
00036a80  17 49 25 3d 2d 31 3a 4c  25 3d a9 28 46 6f 72 6d  |.I%=-1:L%=.(Form|
00036a90  24 29 2d 31 0d 1e c8 0c  c8 95 20 49 25 3c 4c 25  |$)-1...... I%<L%|
00036aa0  0d 1e c9 22 20 20 49 25  2b 3d 32 3a 46 25 3d a4  |..."  I%+=2:F%=.|
00036ab0  66 6e 75 6d 28 c1 46 6f  72 6d 24 2c 49 25 2c 32  |fnum(.Form$,I%,2|
00036ac0  29 29 0d 1e ca 18 20 20  c8 8e 20 63 68 61 72 74  |))....  .. chart|
00036ad0  79 70 65 25 28 46 25 29  20 ca 0d 1e cb 10 20 20  |ype%(F%) .....  |
00036ae0  20 20 c9 20 33 36 2c 33  39 3a 0d 1e cc 2c 20 20  |  . 36,39:...,  |
00036af0  20 20 6c 65 6e 25 3d a4  6c 6f 61 64 5f 62 6c 6f  |  len%=.load_blo|
00036b00  62 28 24 64 61 74 61 62  61 73 65 25 2c 52 25 2c  |b($database%,R%,|
00036b10  46 25 2c 33 36 29 0d 1e  cd 27 20 20 20 20 e7 20  |F%,36)...'    . |
00036b20  6c 65 6e 25 3e 30 20 84  20 a4 73 65 6c 65 63 74  |len%>0 . .select|
00036b30  65 64 28 63 73 76 57 25  2c 32 29 20 8c 0d 1e ce  |ed(csvW%,2) ....|
00036b40  2b 20 20 20 20 20 20 4e  25 2b 3d 31 3a e7 20 4e  |+      N%+=1:. N|
00036b50  25 3e 31 20 8c 20 d5 23  63 73 76 68 61 6e 64 6c  |%>1 . .#csvhandl|
00036b60  65 25 2c 73 65 70 24 3b  0d 1e cf 33 20 20 20 20  |e%,sep$;...3    |
00036b70  20 20 e7 20 a4 73 65 6c  65 63 74 65 64 28 63 73  |  . .selected(cs|
00036b80  76 57 25 2c 30 29 20 8c  20 d5 23 63 73 76 68 61  |vW%,0) . .#csvha|
00036b90  6e 64 6c 65 25 2c 22 22  22 22 3b 0d 1e d0 28 20  |ndle%,"""";...( |
00036ba0  20 20 20 20 20 f2 62 6c  6f 62 5f 74 6f 5f 66 69  |     .blob_to_fi|
00036bb0  6c 65 28 63 73 76 68 61  6e 64 6c 65 25 2c 6c 65  |le(csvhandle%,le|
00036bc0  6e 25 29 0d 1e d1 33 20  20 20 20 20 20 e7 20 a4  |n%)...3      . .|
00036bd0  73 65 6c 65 63 74 65 64  28 63 73 76 57 25 2c 30  |selected(csvW%,0|
00036be0  29 20 8c 20 d5 23 63 73  76 68 61 6e 64 6c 65 25  |) . .#csvhandle%|
00036bf0  2c 22 22 22 22 3b 0d 1e  d2 09 20 20 20 20 cd 0d  |,"""";....    ..|
00036c00  1e d3 1d 20 20 20 20 c9  20 33 2c 36 2c 34 36 2c  |...    . 3,6,46,|
00036c10  34 37 2c 35 34 2c 35 36  2c 35 37 3a 0d 1e d4 17  |47,54,56,57:....|
00036c20  20 20 20 20 46 24 3d 46  24 28 46 25 29 3a 4e 25  |    F$=F$(F%):N%|
00036c30  2b 3d 31 0d 1e d5 27 20  20 20 20 e7 20 46 24 3c  |+=1...'    . F$<|
00036c40  3e 22 22 20 84 20 a4 73  65 6c 65 63 74 65 64 28  |>"" . .selected(|
00036c50  63 73 76 57 25 2c 32 29  20 8c 0d 1e d6 1d 20 20  |csvW%,2) .....  |
00036c60  20 20 20 20 e7 20 4e 25  3e 31 20 8c 20 46 24 3d  |    . N%>1 . F$=|
00036c70  73 65 70 24 2b 46 24 0d  1e d7 1a 20 20 20 20 20  |sep$+F$....     |
00036c80  20 d5 23 63 73 76 68 61  6e 64 6c 65 25 2c 46 24  | .#csvhandle%,F$|
00036c90  3b 0d 1e d8 09 20 20 20  20 cd 0d 1e d9 0a 20 20  |;....    .....  |
00036ca0  20 20 7f 3a 0d 1e da 21  20 20 20 20 e7 20 a4 73  |  .:...!    . .s|
00036cb0  65 6c 65 63 74 65 64 28  70 72 69 6e 74 57 25 2c  |elected(printW%,|
00036cc0  31 31 29 20 8c 0d 1e db  2f 20 20 20 20 20 20 46  |11) ..../      F|
00036cd0  24 3d a4 65 78 70 61 6e  64 28 46 24 28 46 25 29  |$=.expand(F$(F%)|
00036ce0  2c 6c 69 6e 6b 24 28 46  25 29 2c 4c 65 6e 25 2c  |,link$(F%),Len%,|
00036cf0  53 46 24 29 0d 1e dc 15  20 20 20 20 20 20 cc 20  |SF$)....      . |
00036d00  46 24 3d 46 24 28 46 25  29 0d 1e dd 09 20 20 20  |F$=F$(F%)....   |
00036d10  20 cd 0d 1e de 0d 20 20  20 20 4e 25 2b 3d 31 0d  | .....    N%+=1.|
00036d20  1e df 27 20 20 20 20 e7  20 46 24 3c 3e 22 22 20  |..'    . F$<>"" |
00036d30  84 20 a4 73 65 6c 65 63  74 65 64 28 63 73 76 57  |. .selected(csvW|
00036d40  25 2c 32 29 20 8c 0d 1e  e0 30 20 20 20 20 20 20  |%,2) ....0      |
00036d50  e7 20 a4 73 65 6c 65 63  74 65 64 28 63 73 76 57  |. .selected(csvW|
00036d60  25 2c 30 29 20 8c 20 46  24 3d 22 22 22 22 2b 46  |%,0) . F$=""""+F|
00036d70  24 2b 22 22 22 22 0d 1e  e1 1d 20 20 20 20 20 20  |$+""""....      |
00036d80  e7 20 4e 25 3e 31 20 8c  20 46 24 3d 73 65 70 24  |. N%>1 . F$=sep$|
00036d90  2b 46 24 0d 1e e2 1a 20  20 20 20 20 20 d5 23 63  |+F$....      .#c|
00036da0  73 76 68 61 6e 64 6c 65  25 2c 46 24 3b 0d 1e e3  |svhandle%,F$;...|
00036db0  09 20 20 20 20 cd 0d 1e  e4 07 20 20 cb 0d 1e e5  |.    .....  ....|
00036dc0  05 ce 0d 1e e6 17 d5 23  63 73 76 68 61 6e 64 6c  |.......#csvhandl|
00036dd0  65 25 2c 74 65 72 6d 24  3b 0d 1e e7 05 e1 0d 1e  |e%,term$;.......|
00036de0  e8 05 3a 0d 1e e9 16 dd  20 f2 63 6f 6e 76 65 72  |..:..... .conver|
00036df0  74 5f 63 73 76 28 66 24  29 0d 1e ea 72 ea 20 6b  |t_csv(f$)...r. k|
00036e00  24 2c 42 25 2c 4a 25 2c  66 6c 64 25 2c 63 73 76  |$,B%,J%,fld%,csv|
00036e10  68 61 6e 64 6c 65 25 2c  74 6f 6f 62 69 67 68 61  |handle%,toobigha|
00036e20  6e 64 6c 65 25 2c 53 24  2c 73 65 70 25 2c 73 65  |ndle%,S$,sep%,se|
00036e30  70 32 25 2c 74 65 72 6d  25 2c 74 65 72 6d 32 25  |p2%,term%,term2%|
00036e40  2c 46 24 2c 41 25 2c 46  25 2c 6b 65 79 62 61 73  |,F$,A%,F%,keybas|
00036e50  65 25 2c 62 61 73 65 25  2c 62 61 73 65 32 25 2c  |e%,base%,base2%,|
00036e60  73 68 6f 77 25 2c 64 6f  6e 65 25 0d 1e eb 07 ea  |show%,done%.....|
00036e70  20 85 0d 1e ec 1d ee 20  85 20 ea 3a f7 20 85 3a  | ...... . .:. .:|
00036e80  f2 73 74 6f 70 5f 72 65  61 64 69 6e 67 3a e1 0d  |.stop_reading:..|
00036e90  1e ed 19 73 69 7a 65 25  3d 26 31 30 30 3a 69 6e  |...size%=&100:in|
00036ea0  63 25 3d 73 69 7a 65 25  0d 1e ee 32 f2 65 78 74  |c%=size%...2.ext|
00036eb0  65 6e 64 5f 6e 61 6d 65  64 5f 73 6c 69 64 69 6e  |end_named_slidin|
00036ec0  67 5f 62 6c 6f 63 6b 28  74 65 6d 70 61 6e 63 68  |g_block(tempanch|
00036ed0  6f 72 25 2c 73 69 7a 65  25 29 0d 1e ef 3a 73 65  |or%,size%)...:se|
00036ee0  70 25 3d 97 28 73 65 70  24 29 3a e7 20 a9 28 73  |p%=.(sep$):. .(s|
00036ef0  65 70 24 29 3d 32 20 8c  20 73 65 70 32 25 3d 97  |ep$)=2 . sep2%=.|
00036f00  28 c2 73 65 70 24 29 29  20 8b 20 73 65 70 32 25  |(.sep$)) . sep2%|
00036f10  3d 32 35 35 0d 1e f0 40  74 65 72 6d 25 3d 97 28  |=255...@term%=.(|
00036f20  74 65 72 6d 24 29 3a e7  20 a9 28 74 65 72 6d 24  |term$):. .(term$|
00036f30  29 3d 32 20 8c 20 74 65  72 6d 32 25 3d 97 28 c2  |)=2 . term2%=.(.|
00036f40  74 65 72 6d 24 29 29 20  8b 20 74 65 72 6d 32 25  |term$)) . term2%|
00036f50  3d 32 35 35 0d 1e f1 14  63 73 76 68 61 6e 64 6c  |=255....csvhandl|
00036f60  65 25 3d 8e 28 66 24 29  0d 1e f2 24 e7 20 70 72  |e%=.(f$)...$. pr|
00036f70  65 73 65 6e 74 25 3d 30  20 8c 20 f2 63 73 76 5f  |esent%=0 . .csv_|
00036f80  74 6f 5f 64 62 61 73 65  28 66 24 29 0d 1e f3 19  |to_dbase(f$)....|
00036f90  46 6f 72 6d 24 3d a4 63  73 76 5f 69 6d 70 6f 72  |Form$=.csv_impor|
00036fa0  74 66 6f 72 6d 0d 1e f4  33 74 6f 6f 62 69 67 68  |tform...3toobigh|
00036fb0  61 6e 64 6c 65 25 3d ae  28 24 64 61 74 61 62 61  |andle%=.($databa|
00036fc0  73 65 25 2b 22 2e 50 72  69 6e 74 4a 6f 62 73 2e  |se%+".PrintJobs.|
00036fd0  54 6f 6f 42 69 67 22 29  0d 1e f5 15 c8 99 20 22  |TooBig")...... "|
00036fe0  48 6f 75 72 67 6c 61 73  73 5f 4f 6e 22 0d 1e f6  |Hourglass_On"...|
00036ff0  05 f5 0d 1e f7 0c 20 20  c8 8e 20 b9 20 ca 0d 1e  |......  .. . ...|
00037000  f8 1d 20 20 20 20 c9 20  a4 73 65 6c 65 63 74 65  |..    . .selecte|
00037010  64 28 63 73 76 57 25 2c  33 29 3a 0d 1e f9 13 20  |d(csvW%,3):.... |
00037020  20 20 20 f2 72 65 61 64  5f 62 79 74 65 73 0d 1e  |   .read_bytes..|
00037030  fa 2c 20 20 20 20 61 64  64 72 3d a4 66 69 6e 64  |.,    addr=.find|
00037040  28 c0 24 62 61 73 65 25  2c 4b 4c 25 28 6b 65 79  |(.$base%,KL%(key|
00037050  25 29 29 2c 30 2c 31 2c  a3 29 0d 1e fb 22 20 20  |%)),0,1,.)..."  |
00037060  20 20 52 45 43 25 3d a4  72 65 63 5f 6e 6f 28 6b  |  REC%=.rec_no(k|
00037070  24 2c 6b 65 79 25 2c 61  64 64 72 29 0d 1e fc 28  |$,key%,addr)...(|
00037080  20 20 20 20 f2 72 65 61  64 28 66 69 65 6c 64 73  |    .read(fields|
00037090  25 2c b9 2c 52 45 43 25  2c 24 64 61 74 61 62 61  |%,.,REC%,$databa|
000370a0  73 65 25 29 0d 1e fd 0a  20 20 20 20 7f 3a 0d 1e  |se%)....    .:..|
000370b0  fe 32 20 20 20 20 6b 65  79 62 61 73 65 25 3d 21  |.2    keybase%=!|
000370c0  6b 65 79 61 6e 63 68 6f  72 25 28 30 29 3a 41 25  |keyanchor%(0):A%|
000370d0  3d 21 6b 65 79 62 61 73  65 25 3a 46 25 3d 41 25  |=!keybase%:F%=A%|
000370e0  0d 1e ff 1c 20 20 20 20  e7 20 21 28 6b 65 79 62  |....    . !(keyb|
000370f0  61 73 65 25 2b 46 25 29  3e 30 20 8c 0d 1f 00 3a  |ase%+F%)>0 ....:|
00037100  20 20 20 20 20 20 41 25  3d 21 28 6b 65 79 62 61  |      A%=!(keyba|
00037110  73 65 25 2b 46 25 29 3a  52 45 43 25 3d 21 28 6b  |se%+F%):REC%=!(k|
00037120  65 79 62 61 73 65 25 2b  46 25 2b 38 2b 4b 4c 25  |eybase%+F%+8+KL%|
00037130  28 30 29 2b 31 29 0d 1f  01 0b 20 20 20 20 20 20  |(0)+1)....      |
00037140  cc 0d 1f 02 1e 20 20 20  20 20 20 69 6e 63 72 25  |.....      incr%|
00037150  3d bb 28 24 49 6e 63 72  65 6d 65 6e 74 25 29 0d  |=.($Increment%).|
00037160  1f 03 15 20 20 20 20 20  20 e7 20 69 6e 63 72 25  |...      . incr%|
00037170  3e 30 20 8c 0d 1f 04 27  20 20 20 20 20 20 20 20  |>0 ....'        |
00037180  f2 63 68 61 6e 67 65 5f  6c 65 6e 67 74 68 28 52  |.change_length(R|
00037190  41 25 2b 69 6e 63 72 25  2c a3 29 0d 1f 05 36 20  |A%+incr%,.)...6 |
000371a0  20 20 20 20 20 20 20 6b  65 79 62 61 73 65 25 3d  |       keybase%=|
000371b0  21 6b 65 79 61 6e 63 68  6f 72 25 28 30 29 3a 41  |!keyanchor%(0):A|
000371c0  25 3d 21 6b 65 79 62 61  73 65 25 3a 46 25 3d 41  |%=!keybase%:F%=A|
000371d0  25 0d 1f 06 3c 20 20 20  20 20 20 20 20 41 25 3d  |%...<        A%=|
000371e0  21 28 6b 65 79 62 61 73  65 25 2b 46 25 29 3a 52  |!(keybase%+F%):R|
000371f0  45 43 25 3d 21 28 6b 65  79 62 61 73 65 25 2b 46  |EC%=!(keybase%+F|
00037200  25 2b 38 2b 4b 4c 25 28  30 29 2b 31 29 0d 1f 07  |%+8+KL%(0)+1)...|
00037210  22 20 20 20 20 20 20 20  20 cc 20 85 20 6d 6f 61  |"        . . moa|
00037220  6e 5f 65 72 72 25 2c a4  6d 73 67 28 36 36 29 0d  |n_err%,.msg(66).|
00037230  1f 08 0b 20 20 20 20 20  20 cd 0d 1f 09 09 20 20  |...      .....  |
00037240  20 20 cd 0d 1f 0a 27 20  20 20 20 f2 72 65 61 64  |  ....'    .read|
00037250  28 66 69 65 6c 64 73 25  2c a3 2c 52 41 25 2c 24  |(fields%,.,RA%,$|
00037260  64 61 74 61 62 61 73 65  25 29 0d 1f 0b 07 20 20  |database%)....  |
00037270  cb 0d 1f 0c 16 20 20 65  6e 64 6c 69 6e 65 25 3d  |.....  endline%=|
00037280  a3 3a 4a 25 3d 2d 31 0d  1f 0d 23 20 20 c8 95 20  |.:J%=-1...#  .. |
00037290  4a 25 3c a9 28 46 6f 72  6d 24 29 2d 32 20 80 20  |J%<.(Form$)-2 . |
000372a0  65 6e 64 6c 69 6e 65 25  3d a3 0d 1f 0e 26 20 20  |endline%=....&  |
000372b0  20 20 4a 25 2b 3d 32 3a  66 6c 64 25 3d a4 66 6e  |  J%+=2:fld%=.fn|
000372c0  75 6d 28 c1 46 6f 72 6d  24 2c 4a 25 2c 32 29 29  |um(.Form$,J%,2))|
000372d0  0d 1f 0f 21 20 20 20 20  f2 74 72 61 6e 73 66 65  |...!    .transfe|
000372e0  72 5f 63 73 76 5f 66 69  65 6c 64 28 66 6c 64 25  |r_csv_field(fld%|
000372f0  29 0d 1f 10 07 20 20 ce  0d 1f 11 31 20 20 e7 20  |)....  ....1  . |
00037300  66 6c 64 25 3c 66 69 65  6c 64 73 25 20 80 20 ac  |fld%<fields% . .|
00037310  20 65 6e 64 6c 69 6e 65  25 20 8c 20 f2 6e 65 78  | endline% . .nex|
00037320  74 5f 63 73 76 5f 72 65  63 0d 1f 12 0b 20 20 f2  |t_csv_rec....  .|
00037330  70 6f 6c 6c 0d 1f 13 1a  20 20 f2 77 72 69 74 65  |poll....  .write|
00037340  28 66 69 65 6c 64 73 25  2c 6b 65 79 25 29 0d 1f  |(fields%,key%)..|
00037350  14 2d 20 20 e7 20 a4 73  65 6c 65 63 74 65 64 28  |.-  . .selected(|
00037360  63 73 76 57 25 2c 31 31  29 20 8c 20 f2 72 65 64  |csvW%,11) . .red|
00037370  72 61 77 28 6d 61 69 6e  57 25 29 0d 1f 15 3f 20  |raw(mainW%)...? |
00037380  20 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 50  | .. "Hourglass_P|
00037390  65 72 63 65 6e 74 61 67  65 22 2c 8f 23 63 73 76  |ercentage",.#csv|
000373a0  68 61 6e 64 6c 65 25 2a  31 30 30 20 81 20 a2 23  |handle%*100 . .#|
000373b0  63 73 76 68 61 6e 64 6c  65 25 0d 1f 16 18 20 20  |csvhandle%....  |
000373c0  c8 99 20 22 4f 53 5f 42  79 74 65 22 2c 32 32 39  |.. "OS_Byte",229|
000373d0  2c 30 0d 1f 17 12 fd 20  c5 23 63 73 76 68 61 6e  |,0..... .#csvhan|
000373e0  64 6c 65 25 0d 1f 18 16  c8 99 20 22 48 6f 75 72  |dle%...... "Hour|
000373f0  67 6c 61 73 73 5f 4f 66  66 22 0d 1f 19 1b f2 63  |glass_Off".....c|
00037400  6c 6f 73 65 5f 66 69 6c  65 28 63 73 76 68 61 6e  |lose_file(csvhan|
00037410  64 6c 65 25 29 0d 1f 1a  1e f2 63 6c 6f 73 65 5f  |dle%).....close_|
00037420  66 69 6c 65 28 74 6f 6f  62 69 67 68 61 6e 64 6c  |file(toobighandl|
00037430  65 25 29 0d 1f 1b 25 f2  73 63 72 61 70 5f 73 6c  |e%)...%.scrap_sl|
00037440  69 64 69 6e 67 5f 62 6c  6f 63 6b 28 74 65 6d 70  |iding_block(temp|
00037450  61 6e 63 68 6f 72 25 29  0d 1f 1c 37 c8 99 20 22  |anchor%)...7.. "|
00037460  4f 53 5f 46 69 6c 65 22  2c 31 38 2c 24 64 61 74  |OS_File",18,$dat|
00037470  61 62 61 73 65 25 2b 22  2e 50 72 69 6e 74 4a 6f  |abase%+".PrintJo|
00037480  62 73 2e 54 6f 6f 42 69  67 22 2c 26 66 66 66 0d  |bs.TooBig",&fff.|
00037490  1f 1d 1c 61 64 64 72 3d  a4 6d 6f 76 65 74 6f 28  |...addr=.moveto(|
000374a0  6b 65 79 25 2c 74 6f 70  2c 31 29 0d 1f 1e 14 f2  |key%,top,1).....|
000374b0  63 6c 65 61 72 5f 73 65  6c 65 63 74 69 6f 6e 0d  |clear_selection.|
000374c0  1f 1f 18 f2 63 6c 6f 73  65 5f 77 69 6e 64 6f 77  |....close_window|
000374d0  28 63 73 76 57 25 29 0d  1f 20 46 e7 20 a4 73 65  |(csvW%).. F. .se|
000374e0  6c 65 63 74 65 64 28 70  61 73 73 57 25 2c 31 36  |lected(passW%,16|
000374f0  29 20 8c 20 d5 23 6c 6f  67 68 61 6e 64 6c 65 25  |) . .#loghandle%|
00037500  2c 22 43 53 56 20 64 61  74 61 20 69 6d 70 6f 72  |,"CSV data impor|
00037510  74 65 64 20 66 72 6f 6d  20 22 2b 66 24 0d 1f 21  |ted from "+f$..!|
00037520  05 e1 0d 1f 22 05 3a 0d  1f 23 21 dd 20 f2 74 72  |....".:..#!. .tr|
00037530  61 6e 73 66 65 72 5f 63  73 76 5f 66 69 65 6c 64  |ansfer_csv_field|
00037540  28 f8 20 66 6c 64 25 29  0d 1f 24 18 c8 8e 20 63  |(. fld%)..$... c|
00037550  68 61 72 74 79 70 65 25  28 66 6c 64 25 29 20 ca  |hartype%(fld%) .|
00037560  0d 1f 25 0e 20 20 c9 20  33 36 2c 33 39 3a 0d 1f  |..%.  . 36,39:..|
00037570  26 11 20 20 f2 72 65 61  64 5f 62 79 74 65 73 0d  |&.  .read_bytes.|
00037580  1f 27 31 20 20 5a 25 3d  a4 62 6c 6f 62 5f 70 61  |.'1  Z%=.blob_pa|
00037590  74 68 28 b9 2c 24 64 61  74 61 62 61 73 65 25 2c  |th(.,$database%,|
000375a0  52 45 43 25 2c 66 6c 64  25 2c 33 36 2c 46 24 29  |REC%,fld%,36,F$)|
000375b0  0d 1f 28 22 20 20 53 74  61 72 74 25 3d 62 61 73  |..("  Start%=bas|
000375c0  65 25 3a 45 6e 64 25 3d  62 61 73 65 25 2b 70 74  |e%:End%=base%+pt|
000375d0  72 25 0d 1f 29 20 20 20  f2 73 61 76 65 28 46 24  |r%..)   .save(F$|
000375e0  2c 26 66 66 66 2c 53 74  61 72 74 25 2c 45 6e 64  |,&fff,Start%,End|
000375f0  25 29 0d 1f 2a 49 20 20  e7 20 a4 73 65 6c 65 63  |%)..*I  . .selec|
00037600  74 65 64 28 63 73 76 57  25 2c 31 31 29 20 80 20  |ted(csvW%,11) . |
00037610  63 68 61 72 74 79 70 65  25 28 66 6c 64 25 29 3d  |chartype%(fld%)=|
00037620  33 39 20 8c 20 f2 73 68  6f 77 5f 74 65 78 74 5f  |39 . .show_text_|
00037630  62 6c 6f 63 6b 28 66 6c  64 25 29 0d 1f 2b 4d 20  |block(fld%)..+M |
00037640  20 c9 20 30 2c 31 2c 32  2c 33 2c 34 2c 35 2c 36  | . 0,1,2,3,4,5,6|
00037650  2c 37 2c 38 2c 34 31 2c  34 32 2c 34 33 2c 34 34  |,7,8,41,42,43,44|
00037660  2c 34 35 2c 34 36 2c 34  37 2c 34 38 2c 34 39 2c  |,45,46,47,48,49,|
00037670  35 30 2c 35 31 2c 35 32  2c 35 33 2c 35 34 2c 35  |50,51,52,53,54,5|
00037680  35 2c 35 36 2c 35 37 3a  0d 1f 2c 11 20 20 f2 72  |5,56,57:..,.  .r|
00037690  65 61 64 5f 62 79 74 65  73 0d 1f 2d 39 20 20 e7  |ead_bytes..-9  .|
000376a0  20 a4 73 65 6c 65 63 74  65 64 28 63 73 76 57 25  | .selected(csvW%|
000376b0  2c 31 36 29 20 8c 20 24  62 61 73 65 25 3d a4 73  |,16) . $base%=.s|
000376c0  74 72 69 70 73 70 61 63  65 73 28 24 62 61 73 65  |tripspaces($base|
000376d0  25 29 0d 1f 2e 0c 20 20  c8 8e 20 b9 20 ca 0d 1f  |%)....  .. . ...|
000376e0  2f 2c 20 20 20 20 c9 20  70 74 72 25 3c 3d 6c 65  |/,    . ptr%<=le|
000376f0  6e 25 28 66 6c 64 25 29  3a 24 52 66 25 28 66 6c  |n%(fld%):$Rf%(fl|
00037700  64 25 29 3d 24 62 61 73  65 25 0d 1f 30 13 20 20  |d%)=$base%..0.  |
00037710  20 20 c9 20 70 74 72 25  3c 32 34 37 3a 0d 1f 31  |  . ptr%<247:..1|
00037720  41 20 20 20 20 d5 23 74  6f 6f 62 69 67 68 61 6e  |A    .#toobighan|
00037730  64 6c 65 25 2c 22 52 65  63 2e 22 2b c3 28 52 45  |dle%,"Rec."+.(RE|
00037740  43 25 29 2b 22 2c 46 6c  64 2e 22 2b c3 28 66 6c  |C%)+",Fld."+.(fl|
00037750  64 25 29 2b 22 2c 22 2b  24 62 61 73 65 25 0d 1f  |d%)+","+$base%..|
00037760  32 16 20 20 20 20 24 52  66 25 28 66 6c 64 25 29  |2.    $Rf%(fld%)|
00037770  3d 22 40 22 0d 1f 33 0a  20 20 20 20 7f 3a 0d 1f  |="@"..3.    .:..|
00037780  34 87 20 20 20 20 d5 23  74 6f 6f 62 69 67 68 61  |4.    .#toobigha|
00037790  6e 64 6c 65 25 2c 22 52  65 63 2e 22 2b c3 28 52  |ndle%,"Rec."+.(R|
000377a0  45 43 25 2b 31 29 2b 22  2c 46 6c 64 2e 22 2b c3  |EC%+1)+",Fld."+.|
000377b0  28 66 6c 64 25 29 2b 22  20 69 73 20 6d 6f 72 65  |(fld%)+" is more|
000377c0  20 74 68 61 6e 20 32 34  36 20 63 68 61 72 61 63  | than 246 charac|
000377d0  74 65 72 73 20 6c 6f 6e  67 2e 20 44 61 74 61 20  |ters long. Data |
000377e0  6e 6f 74 20 73 61 76 65  64 2e 20 45 78 74 65 72  |not saved. Exter|
000377f0  6e 61 6c 20 66 69 65 6c  64 20 73 75 67 67 65 73  |nal field sugges|
00037800  74 65 64 2e 22 0d 1f 35  16 20 20 20 20 24 52 66  |ted."..5.    $Rf|
00037810  25 28 66 6c 64 25 29 3d  22 40 22 0d 1f 36 07 20  |%(fld%)="@"..6. |
00037820  20 cb 0d 1f 37 0f 20 20  7f 3a 66 6c 64 25 2b 3d  | ...7.  .:fld%+=|
00037830  31 0d 1f 38 46 20 20 f4  20 23 23 23 20 43 61 6e  |1..8F  . ### Can|
00037840  27 74 20 70 75 74 20 43  53 56 20 64 61 74 61 20  |'t put CSV data |
00037850  69 6e 74 6f 20 42 75 74  74 6f 6e 2c 20 53 70 72  |into Button, Spr|
00037860  69 74 65 20 6f 72 20 44  72 61 77 20 66 69 65 6c  |ite or Draw fiel|
00037870  64 73 21 20 23 23 23 0d  1f 39 05 cb 0d 1f 3a 05  |ds! ###..9....:.|
00037880  e1 0d 1f 3b 05 3a 0d 1f  3c 11 dd 20 f2 72 65 61  |...;.:..<.. .rea|
00037890  64 5f 62 79 74 65 73 0d  1f 3d 17 ea 20 65 6e 64  |d_bytes..=.. end|
000378a0  24 2c 66 6c 61 67 25 2c  42 25 2c 6e 71 25 0d 1f  |$,flag%,B%,nq%..|
000378b0  3e 1e 62 61 73 65 25 3d  21 74 65 6d 70 61 6e 63  |>.base%=!tempanc|
000378c0  68 6f 72 25 3a 70 74 72  25 3d 2d 31 0d 1f 3f 13  |hor%:ptr%=-1..?.|
000378d0  42 25 3d 9a 23 63 73 76  68 61 6e 64 6c 65 25 0d  |B%=.#csvhandle%.|
000378e0  1f 40 0d e7 20 42 25 3d  33 34 20 8c 0d 1f 41 13  |.@.. B%=34 ...A.|
000378f0  20 20 66 6c 61 67 25 3d  b9 3a 6e 71 25 3d 31 0d  |  flag%=.:nq%=1.|
00037900  1f 42 63 20 20 65 6e 64  24 3d 22 28 62 61 73 65  |.Bc  end$="(base|
00037910  25 3f 28 70 74 72 25 2d  31 29 3d 33 34 20 41 4e  |%?(ptr%-1)=34 AN|
00037920  44 20 28 6e 71 25 20 4d  4f 44 20 32 29 3d 30 29  |D (nq% MOD 2)=0)|
00037930  20 41 4e 44 20 28 42 25  3d 73 65 70 25 20 4f 52  | AND (B%=sep% OR|
00037940  20 42 25 3d 74 65 72 6d  25 20 4f 52 20 45 4f 46  | B%=term% OR EOF|
00037950  23 63 73 76 68 61 6e 64  6c 65 25 3d 54 52 55 45  |#csvhandle%=TRUE|
00037960  29 22 0d 1f 43 07 20 20  cc 0d 1f 44 21 20 20 cf  |)"..C.  ...D!  .|
00037970  23 63 73 76 68 61 6e 64  6c 65 25 3d 8f 23 63 73  |#csvhandle%=.#cs|
00037980  76 68 61 6e 64 6c 65 25  2d 31 0d 1f 45 37 20 20  |vhandle%-1..E7  |
00037990  65 6e 64 24 3d 22 42 25  3d 73 65 70 25 20 4f 52  |end$="B%=sep% OR|
000379a0  20 42 25 3d 74 65 72 6d  25 20 4f 52 20 45 4f 46  | B%=term% OR EOF|
000379b0  23 63 73 76 68 61 6e 64  6c 65 25 3d 54 52 55 45  |#csvhandle%=TRUE|
000379c0  22 0d 1f 46 05 cd 0d 1f  47 05 f5 0d 1f 48 2b 20  |"..F....G....H+ |
000379d0  20 42 25 3d 9a 23 63 73  76 68 61 6e 64 6c 65 25  | B%=.#csvhandle%|
000379e0  3a 70 74 72 25 2b 3d 31  3a 62 61 73 65 25 3f 70  |:ptr%+=1:base%?p|
000379f0  74 72 25 3d 42 25 0d 1f  49 16 20 20 e7 20 42 25  |tr%=B%..I.  . B%|
00037a00  3d 33 34 20 8c 20 6e 71  25 2b 3d 31 0d 1f 4a 4f  |=34 . nq%+=1..JO|
00037a10  20 20 e7 20 70 74 72 25  3d 73 69 7a 65 25 20 8c  |  . ptr%=size% .|
00037a20  20 73 69 7a 65 25 2b 3d  69 6e 63 25 3a f2 65 78  | size%+=inc%:.ex|
00037a30  74 65 6e 64 5f 6e 61 6d  65 64 5f 73 6c 69 64 69  |tend_named_slidi|
00037a40  6e 67 5f 62 6c 6f 63 6b  28 74 65 6d 70 61 6e 63  |ng_block(tempanc|
00037a50  68 6f 72 25 2c 73 69 7a  65 25 29 0d 1f 4b 0d fd  |hor%,size%)..K..|
00037a60  20 a0 28 65 6e 64 24 29  0d 1f 4c 15 e7 20 66 6c  | .(end$)..L.. fl|
00037a70  61 67 25 20 8c 20 70 74  72 25 2d 3d 31 0d 1f 4d  |ag% . ptr%-=1..M|
00037a80  11 62 61 73 65 25 3f 70  74 72 25 3d 31 33 0d 1f  |.base%?ptr%=13..|
00037a90  4e 0b c8 8e 20 42 25 20  ca 0d 1f 4f 16 20 20 c9  |N... B% ...O.  .|
00037aa0  20 73 65 70 25 3a f2 73  6b 69 70 5f 73 65 70 0d  | sep%:.skip_sep.|
00037ab0  1f 50 18 20 20 c9 20 74  65 72 6d 25 3a f2 73 6b  |.P.  . term%:.sk|
00037ac0  69 70 5f 74 65 72 6d 0d  1f 51 05 cb 0d 1f 52 05  |ip_term..Q....R.|
00037ad0  e1 0d 1f 53 05 3a 0d 1f  54 13 dd 20 f2 6e 65 78  |...S.:..T.. .nex|
00037ae0  74 5f 63 73 76 5f 72 65  63 0d 1f 55 05 f5 0d 1f  |t_csv_rec..U....|
00037af0  56 15 20 20 42 25 3d 9a  23 63 73 76 68 61 6e 64  |V.  B%=.#csvhand|
00037b00  6c 65 25 0d 1f 57 0e fd  20 42 25 3d 74 65 72 6d  |le%..W.. B%=term|
00037b10  25 0d 1f 58 0e f2 73 6b  69 70 5f 74 65 72 6d 0d  |%..X..skip_term.|
00037b20  1f 59 05 e1 0d 1f 5a 05  3a 0d 1f 5b 0f dd 20 f2  |.Y....Z.:..[.. .|
00037b30  73 6b 69 70 5f 73 65 70  0d 1f 5c 12 e7 20 73 65  |skip_sep..\.. se|
00037b40  70 32 25 3c 3e 32 35 35  20 8c 0d 1f 5d 15 20 20  |p2%<>255 ...].  |
00037b50  42 25 3d 9a 23 63 73 76  68 61 6e 64 6c 65 25 0d  |B%=.#csvhandle%.|
00037b60  1f 5e 2f 20 20 e7 20 42  25 3c 3e 73 65 70 32 25  |.^/  . B%<>sep2%|
00037b70  20 8c 20 cf 23 63 73 76  68 61 6e 64 6c 65 25 3d  | . .#csvhandle%=|
00037b80  8f 23 63 73 76 68 61 6e  64 6c 65 25 2d 31 0d 1f  |.#csvhandle%-1..|
00037b90  5f 05 cd 0d 1f 60 05 e1  0d 1f 61 05 3a 0d 1f 62  |_....`....a.:..b|
00037ba0  10 dd 20 f2 73 6b 69 70  5f 74 65 72 6d 0d 1f 63  |.. .skip_term..c|
00037bb0  13 e7 20 74 65 72 6d 32  25 3c 3e 32 35 35 20 8c  |.. term2%<>255 .|
00037bc0  0d 1f 64 15 20 20 42 25  3d 9a 23 63 73 76 68 61  |..d.  B%=.#csvha|
00037bd0  6e 64 6c 65 25 0d 1f 65  3d 20 20 e7 20 42 25 3c  |ndle%..e=  . B%<|
00037be0  3e 74 65 72 6d 32 25 20  8c 20 cf 23 63 73 76 68  |>term2% . .#csvh|
00037bf0  61 6e 64 6c 65 25 3d 8f  23 63 73 76 68 61 6e 64  |andle%=.#csvhand|
00037c00  6c 65 25 2d 31 20 8b 20  65 6e 64 6c 69 6e 65 25  |le%-1 . endline%|
00037c10  3d b9 0d 1f 66 12 20 20  cc 20 65 6e 64 6c 69 6e  |=...f.  . endlin|
00037c20  65 25 3d b9 0d 1f 67 05  cd 0d 1f 68 05 e1 0d 1f  |e%=...g....h....|
00037c30  69 05 3a 0d 1f 6a 13 dd  20 f2 73 74 6f 70 5f 72  |i.:..j.. .stop_r|
00037c40  65 61 64 69 6e 67 0d 1f  6b 16 c8 99 20 22 48 6f  |eading..k... "Ho|
00037c50  75 72 67 6c 61 73 73 5f  4f 66 66 22 0d 1f 6c 36  |urglass_Off"..l6|
00037c60  f2 63 6c 6f 73 65 5f 66  69 6c 65 28 63 73 76 68  |.close_file(csvh|
00037c70  61 6e 64 6c 65 25 29 3a  f2 63 6c 6f 73 65 5f 66  |andle%):.close_f|
00037c80  69 6c 65 28 74 6f 6f 62  69 67 68 61 6e 64 6c 65  |ile(toobighandle|
00037c90  25 29 0d 1f 6d 25 f2 73  63 72 61 70 5f 73 6c 69  |%)..m%.scrap_sli|
00037ca0  64 69 6e 67 5f 62 6c 6f  63 6b 28 74 65 6d 70 61  |ding_block(tempa|
00037cb0  6e 63 68 6f 72 25 29 0d  1f 6e 0d e7 20 9f 20 3d  |nchor%)..n.. . =|
00037cc0  31 37 20 8c 0d 1f 6f 17  20 20 f2 73 6f 66 74 65  |17 ...o.  .softe|
00037cd0  72 72 6f 72 28 22 22 2c  37 34 29 0d 1f 70 1d 20  |rror("",74)..p. |
00037ce0  20 cc 20 f2 77 69 6d 70  5f 65 72 72 6f 72 28 b9  | . .wimp_error(.|
00037cf0  2c 9f 2c 9e 2c f6 24 29  0d 1f 71 05 cd 0d 1f 72  |,.,.,.$)..q....r|
00037d00  12 e7 20 70 72 65 73 65  6e 74 25 3d 37 20 8c 0d  |.. present%=7 ..|
00037d10  1f 73 1e 20 20 61 64 64  72 3d a4 6d 6f 76 65 74  |.s.  addr=.movet|
00037d20  6f 28 6b 65 79 25 2c 74  6f 70 2c 31 29 0d 1f 74  |o(key%,top,1)..t|
00037d30  16 20 20 f2 63 6c 65 61  72 5f 73 65 6c 65 63 74  |.  .clear_select|
00037d40  69 6f 6e 0d 1f 75 05 cd  0d 1f 76 05 e1 0d 1f 77  |ion..u....v....w|
00037d50  05 3a 0d 1f 78 15 dd 20  a4 63 73 76 5f 69 6d 70  |.:..x.. .csv_imp|
00037d60  6f 72 74 66 6f 72 6d 0d  1f 79 0e ea 20 46 25 2c  |ortform..y.. F%,|
00037d70  66 24 2c 46 24 0d 1f 7a  0e 65 6e 64 6c 69 6e 65  |f$,F$..z.endline|
00037d80  25 3d a3 0d 1f 7b 0a c8  8e 20 b9 20 ca 0d 1f 7c  |%=...{... . ...||
00037d90  1b 20 20 c9 20 a4 73 65  6c 65 63 74 65 64 28 63  |.  . .selected(c|
00037da0  73 76 57 25 2c 31 29 3a  0d 1f 7d 2f 20 20 f4 20  |svW%,1):..}/  . |
00037db0  23 23 23 20 55 73 65 20  68 65 61 64 65 72 20 72  |### Use header r|
00037dc0  65 63 6f 72 64 20 74 6f  20 62 75 69 6c 64 20 66  |ecord to build f|
00037dd0  6f 72 6d 20 23 23 23 0d  1f 7e 07 20 20 f5 0d 1f  |orm ###..~.  ...|
00037de0  7f 13 20 20 20 20 f2 72  65 61 64 5f 62 79 74 65  |..    .read_byte|
00037df0  73 0d 1f 80 1b 20 20 20  20 46 25 3d a4 66 69 65  |s....    F%=.fie|
00037e00  6c 64 28 24 62 61 73 65  25 2c a3 29 0d 1f 81 25  |ld($base%,.)...%|
00037e10  20 20 20 20 e7 20 46 25  3d 30 20 8c 20 85 20 6d  |    . F%=0 . . m|
00037e20  6f 61 6e 5f 65 72 72 25  2c a4 6d 73 67 28 38 37  |oan_err%,.msg(87|
00037e30  29 0d 1f 82 11 20 20 20  20 66 24 3d c3 7e 28 46  |)....    f$=.~(F|
00037e40  25 29 0d 1f 83 1d 20 20  20 20 e7 20 a9 28 66 24  |%)....    . .(f$|
00037e50  29 3d 31 20 8c 20 66 24  3d 22 30 22 2b 66 24 0d  |)=1 . f$="0"+f$.|
00037e60  1f 84 0e 20 20 20 20 46  24 2b 3d 66 24 0d 1f 85  |...    F$+=f$...|
00037e70  22 20 20 20 20 f2 69 6e  76 65 72 74 28 6d 61 69  |"    .invert(mai|
00037e80  6e 57 25 2c 66 69 65 6c  64 25 28 46 25 29 29 0d  |nW%,field%(F%)).|
00037e90  1f 86 10 20 20 fd 20 65  6e 64 6c 69 6e 65 25 0d  |...  . endline%.|
00037ea0  1f 87 18 20 20 c9 20 70  72 69 6e 74 6f 72 64 65  |...  . printorde|
00037eb0  72 24 3c 3e 22 22 3a 0d  1f 88 42 20 20 f4 20 23  |r$<>"":...B  . #|
00037ec0  23 23 20 42 75 69 6c 64  20 66 6f 72 6d 20 66 72  |## Build form fr|
00037ed0  6f 6d 20 68 69 67 68 6c  69 67 68 74 65 64 20 66  |om highlighted f|
00037ee0  69 65 6c 64 73 2c 20 61  73 20 69 6e 20 70 72 69  |ields, as in pri|
00037ef0  6e 74 69 6e 67 20 23 23  23 0d 1f 89 14 20 20 46  |nting ###....  F|
00037f00  24 3d 70 72 69 6e 74 6f  72 64 65 72 24 0d 1f 8a  |$=printorder$...|
00037f10  08 20 20 7f 3a 0d 1f 8b  42 20 20 f4 20 23 23 23  |.  .:...B  . ###|
00037f20  20 41 73 73 75 6d 65 20  65 6e 74 72 79 20 69 6e  | Assume entry in|
00037f30  74 6f 20 61 6c 6c 20 66  69 65 6c 64 73 2c 20 62  |to all fields, b|
00037f40  65 67 69 6e 6e 69 6e 67  20 77 69 74 68 20 66 69  |eginning with fi|
00037f50  72 73 74 20 23 23 23 0d  1f 8c 16 20 20 e3 20 46  |rst ###....  . F|
00037f60  25 3d 31 20 b8 20 66 69  65 6c 64 73 25 0d 1f 8d  |%=1 . fields%...|
00037f70  11 20 20 20 20 66 24 3d  c3 7e 28 46 25 29 0d 1f  |.    f$=.~(F%)..|
00037f80  8e 1d 20 20 20 20 e7 20  a9 28 66 24 29 3d 31 20  |..    . .(f$)=1 |
00037f90  8c 20 66 24 3d 22 30 22  2b 66 24 0d 1f 8f 0e 20  |. f$="0"+f$.... |
00037fa0  20 20 20 46 24 2b 3d 66  24 0d 1f 90 0a 20 20 ed  |   F$+=f$....  .|
00037fb0  20 46 25 0d 1f 91 05 cb  0d 1f 92 07 3d 46 24 0d  | F%.........=F$.|
00037fc0  1f 93 05 3a 0d 1f 94 17  dd 20 f2 63 73 76 5f 74  |...:..... .csv_t|
00037fd0  6f 5f 64 62 61 73 65 28  66 24 29 0d 1f 95 1e ea  |o_dbase(f$).....|
00037fe0  20 46 25 2c 50 25 2c 51  25 2c 46 48 25 2c 53 24  | F%,P%,Q%,FH%,S$|
00037ff0  2c 72 65 61 64 70 6f 73  25 0d 1f 96 48 e7 20 ac  |,readpos%...H. .|
00038000  20 28 a4 73 65 6c 65 63  74 65 64 28 63 73 76 57  | (.selected(csvW|
00038010  25 2c 34 29 20 80 20 a4  73 65 6c 65 63 74 65 64  |%,4) . .selected|
00038020  28 63 73 76 57 25 2c 31  29 29 20 8c 20 85 20 6d  |(csvW%,1)) . . m|
00038030  6f 61 6e 5f 65 72 72 25  2c a4 6d 73 67 28 38 38  |oan_err%,.msg(88|
00038040  29 0d 1f 97 28 f2 72 65  61 64 5f 62 79 74 65 73  |)...(.read_bytes|
00038050  3a 53 24 3d 24 62 61 73  65 25 3a cf 23 63 73 76  |:S$=$base%:.#csv|
00038060  68 61 6e 64 6c 65 25 3d  30 0d 1f 98 27 e7 20 a7  |handle%=0...'. .|
00038070  53 24 2c 22 a4 22 29 3d  30 20 8c 20 85 20 6d 6f  |S$,".")=0 . . mo|
00038080  61 6e 5f 65 72 72 25 2c  a4 6d 73 67 28 38 39 29  |an_err%,.msg(89)|
00038090  0d 1f 99 1e 6c 65 61 66  24 3d a4 6c 65 61 66 28  |....leaf$=.leaf(|
000380a0  66 24 29 3a 63 73 76 63  6f 6e 76 25 3d b9 0d 1f  |f$):csvconv%=...|
000380b0  9a 3d e7 20 24 64 61 74  61 62 61 73 65 25 3d 22  |.=. $database%="|
000380c0  4e 6f 20 64 61 74 61 22  20 8c 20 24 64 61 74 61  |No data" . $data|
000380d0  62 61 73 65 25 3d 64 62  61 73 65 70 61 74 68 24  |base%=dbasepath$|
000380e0  2b 22 2e 21 22 2b 6c 65  61 66 24 0d 1f 9b 1b f2  |+".!"+leaf$.....|
000380f0  73 61 76 65 28 24 64 61  74 61 62 61 73 65 25 2c  |save($database%,|
00038100  30 2c 30 2c 30 29 0d 1f  9c 18 66 69 65 6c 64 73  |0,0,0)....fields|
00038110  25 3d 30 3a 65 6e 64 6c  69 6e 65 25 3d a3 0d 1f  |%=0:endline%=...|
00038120  9d 05 f5 0d 1f 9e 10 20  20 66 69 65 6c 64 73 25  |.......  fields%|
00038130  2b 3d 31 0d 1f 9f 1b 20  20 f2 72 65 61 64 5f 62  |+=1....  .read_b|
00038140  79 74 65 73 3a 53 24 3d  24 62 61 73 65 25 0d 1f  |ytes:S$=$base%..|
00038150  a0 22 20 20 50 25 3d a7  53 24 2c 22 a4 22 29 3a  |."  P%=.S$,"."):|
00038160  51 25 3d a7 53 24 2c 22  a4 22 2c 50 25 2b 31 29  |Q%=.S$,".",P%+1)|
00038170  0d 1f a1 25 20 20 54 61  67 24 28 66 69 65 6c 64  |...%  Tag$(field|
00038180  73 25 29 3d c1 53 24 2c  50 25 2b 31 2c 51 25 2d  |s%)=.S$,P%+1,Q%-|
00038190  50 25 2d 31 29 0d 1f a2  20 20 20 6c 65 6e 25 28  |P%-1)...   len%(|
000381a0  66 69 65 6c 64 73 25 29  3d bb 28 c0 53 24 2c 50  |fields%)=.(.S$,P|
000381b0  25 2d 31 29 29 0d 1f a3  25 20 20 63 68 61 72 74  |%-1))...%  chart|
000381c0  79 70 65 25 28 66 69 65  6c 64 73 25 29 3d bb 28  |ype%(fields%)=.(|
000381d0  c1 53 24 2c 51 25 2b 31  29 29 0d 1f a4 0e fd 20  |.S$,Q%+1))..... |
000381e0  65 6e 64 6c 69 6e 65 25  0d 1f a5 25 f2 73 63 72  |endline%...%.scr|
000381f0  61 70 5f 73 6c 69 64 69  6e 67 5f 62 6c 6f 63 6b  |ap_sliding_block|
00038200  28 74 65 6d 70 61 6e 63  68 6f 72 25 29 0d 1f a6  |(tempanchor%)...|
00038210  1d 46 48 25 3d ae 28 24  64 61 74 61 62 61 73 65  |.FH%=.($database|
00038220  25 2b 22 2e 46 6f 72 6d  22 29 0d 1f a7 11 f1 23  |%+".Form").....#|
00038230  46 48 25 2c 66 69 65 6c  64 73 25 0d 1f a8 14 e3  |FH%,fields%.....|
00038240  20 46 25 3d 31 20 b8 20  66 69 65 6c 64 73 25 0d  | F%=1 . fields%.|
00038250  1f a9 13 20 20 78 64 25  3d 31 36 3a 78 66 25 3d  |...  xd%=16:xf%=|
00038260  39 36 0d 1f aa 1a 20 20  79 64 25 3d 2d 28 46 25  |96....  yd%=-(F%|
00038270  2a 35 32 29 3a 79 66 25  3d 79 64 25 0d 1f ab 48  |*52):yf%=yd%...H|
00038280  20 20 f1 23 46 48 25 2c  54 61 67 24 28 46 25 29  |  .#FH%,Tag$(F%)|
00038290  2c 54 61 67 24 28 46 25  29 2c 78 64 25 2c 79 64  |,Tag$(F%),xd%,yd|
000382a0  25 2c 78 66 25 2c 79 66  25 2c 6c 65 6e 25 28 46  |%,xf%,yf%,len%(F|
000382b0  25 29 2c 63 68 61 72 74  79 70 65 25 28 46 25 29  |%),chartype%(F%)|
000382c0  2c 30 2c 30 0d 1f ac 08  ed 20 46 25 0d 1f ad 14  |,0,0..... F%....|
000382d0  f2 63 6c 6f 73 65 5f 66  69 6c 65 28 46 48 25 29  |.close_file(FH%)|
000382e0  0d 1f ae 2b c8 99 20 22  4f 53 5f 46 69 6c 65 22  |...+.. "OS_File"|
000382f0  2c 31 38 2c 24 64 61 74  61 62 61 73 65 25 2b 22  |,18,$database%+"|
00038300  2e 46 6f 72 6d 22 2c 26  37 66 32 0d 1f af 1c 66  |.Form",&7f2....f|
00038310  69 65 6c 64 73 25 3d 30  3a 46 69 65 6c 64 6e 75  |ields%=0:Fieldnu|
00038320  6d 62 65 72 25 3d 30 0d  1f b0 1c 66 69 65 6c 64  |mber%=0....field|
00038330  73 25 3d a4 67 65 74 5f  66 6f 72 6d 28 46 70 74  |s%=.get_form(Fpt|
00038340  72 25 29 0d 1f b1 10 f2  64 65 66 61 75 6c 74 5f  |r%).....default_|
00038350  6b 65 79 0d 1f b2 19 72  65 61 64 70 6f 73 25 3d  |key....readpos%=|
00038360  8f 23 63 73 76 68 61 6e  64 6c 65 25 0d 1f b3 13  |.#csvhandle%....|
00038370  52 41 25 3d a4 6e 6f 5f  6f 66 5f 72 65 63 73 0d  |RA%=.no_of_recs.|
00038380  1f b4 1f f2 64 65 66 61  75 6c 74 73 28 24 64 61  |....defaults($da|
00038390  74 61 62 61 73 65 25 2c  52 41 25 2c 30 29 0d 1f  |tabase%,RA%,0)..|
000383a0  b5 0e f2 73 61 76 65 5f  6b 65 79 73 0d 1f b6 16  |...save_keys....|
000383b0  f2 64 65 73 65 6c 65 63  74 28 63 73 76 57 25 2c  |.deselect(csvW%,|
000383c0  31 29 0d 1f b7 32 f2 63  72 65 61 74 65 5f 6e 61  |1)...2.create_na|
000383d0  6d 65 64 5f 73 6c 69 64  69 6e 67 5f 62 6c 6f 63  |med_sliding_bloc|
000383e0  6b 28 74 65 6d 70 61 6e  63 68 6f 72 25 2c 73 69  |k(tempanchor%,si|
000383f0  7a 65 25 29 0d 1f b8 14  63 73 76 68 61 6e 64 6c  |ze%)....csvhandl|
00038400  65 25 3d 8e 28 66 24 29  0d 1f b9 19 cf 23 63 73  |e%=.(f$).....#cs|
00038410  76 68 61 6e 64 6c 65 25  3d 72 65 61 64 70 6f 73  |vhandle%=readpos|
00038420  25 0d 1f ba 05 e1 0d 1f  bb 05 3a 0d 1f bc 11 dd  |%.........:.....|
00038430  20 a4 6e 6f 5f 6f 66 5f  72 65 63 73 0d 1f bd 0b  | .no_of_recs....|
00038440  ea 20 4e 25 2c 42 25 0d  1f be 05 f5 0d 1f bf 17  |. N%,B%.........|
00038450  20 20 f5 20 42 25 3d 9a  23 63 73 76 68 61 6e 64  |  . B%=.#csvhand|
00038460  6c 65 25 0d 1f c0 1f 20  20 fd 20 42 25 3d 74 65  |le%....  . B%=te|
00038470  72 6d 25 20 84 20 c5 23  63 73 76 68 61 6e 64 6c  |rm% . .#csvhandl|
00038480  65 25 0d 1f c1 0b 20 20  4e 25 2b 3d 31 0d 1f c2  |e%....  N%+=1...|
00038490  3f 20 20 c8 99 20 22 48  6f 75 72 67 6c 61 73 73  |?  .. "Hourglass|
000384a0  5f 50 65 72 63 65 6e 74  61 67 65 22 2c 8f 23 63  |_Percentage",.#c|
000384b0  73 76 68 61 6e 64 6c 65  25 2a 31 30 30 20 81 20  |svhandle%*100 . |
000384c0  a2 23 63 73 76 68 61 6e  64 6c 65 25 0d 1f c3 12  |.#csvhandle%....|
000384d0  fd 20 c5 23 63 73 76 68  61 6e 64 6c 65 25 0d 1f  |. .#csvhandle%..|
000384e0  c4 07 3d 4e 25 0d 1f c5  05 3a 0d 1f c6 26 f4 20  |..=N%....:...&. |
000384f0  2d 2d 2d 20 53 4c 49 44  49 4e 47 20 48 45 41 50  |--- SLIDING HEAP|
00038500  20 32 2e 30 30 20 50 52  4f 43 45 44 55 52 45 53  | 2.00 PROCEDURES|
00038510  0d 1f c7 05 3a 0d 1f c8  1f f4 20 72 65 71 75 69  |....:..... requi|
00038520  72 65 73 20 53 6c 69 64  69 6e 67 48 65 61 70 20  |res SlidingHeap |
00038530  32 2e 30 30 0d 1f c9 05  3a 0d 1f ca 16 f4 20 6d  |2.00....:..... m|
00038540  6f 64 75 6c 65 20 61 6e  64 20 50 52 4f 43 73 0d  |odule and PROCs.|
00038550  1f cb 1a f4 20 a9 20 53  74 65 76 65 6e 20 48 61  |.... . Steven Ha|
00038560  73 6c 61 6d 20 31 39 39  32 0d 1f cc 05 3a 0d 1f  |slam 1992....:..|
00038570  cd 15 dd 20 a4 5f 68 65  61 70 5f 73 6c 6f 74 73  |... ._heap_slots|
00038580  69 7a 65 0d 1f ce 09 ea  20 52 30 25 0d 1f cf 22  |ize..... R0%..."|
00038590  c8 99 20 22 57 69 6d 70  5f 53 6c 6f 74 53 69 7a  |.. "Wimp_SlotSiz|
000385a0  65 22 2c 2d 31 2c 2d 31  20 b8 20 52 30 25 0d 1f  |e",-1,-1 . R0%..|
000385b0  d0 08 3d 52 30 25 0d 1f  d1 05 3a 0d 1f d2 2f dd  |..=R0%....:.../.|
000385c0  20 a4 5f 68 65 61 70 5f  6e 75 6d 74 6f 73 74 72  | ._heap_numtostr|
000385d0  28 64 25 2c 6e 25 29 3d  c2 c4 64 25 2c 22 30 22  |(d%,n%)=..d%,"0"|
000385e0  29 2b c3 7e 6e 25 2c 64  25 29 0d 1f d3 2f dd 20  |)+.~n%,d%).../. |
000385f0  a4 5f 68 65 61 70 5f 73  6e 75 6d 74 6f 73 74 72  |._heap_snumtostr|
00038600  28 64 25 2c 6e 25 29 3d  c2 c4 64 25 2c 22 20 22  |(d%,n%)=..d%," "|
00038610  29 2b c3 6e 25 2c 64 25  29 0d 1f d4 05 3a 0d 1f  |)+.n%,d%)....:..|
00038620  d5 10 dd 20 f2 68 65 61  70 73 69 6e 66 6f 0d 1f  |... .heapsinfo..|
00038630  d6 37 c8 99 20 22 4f 53  5f 48 65 61 70 22 2c 31  |.7.. "OS_Heap",1|
00038640  2c 66 69 78 65 64 68 65  61 70 62 61 73 65 25 20  |,fixedheapbase% |
00038650  b8 20 2c 2c 62 69 67 62  6c 6f 63 25 2c 74 6f 74  |. ,,bigbloc%,tot|
00038660  66 72 65 65 25 0d 1f d7  12 f1 20 22 46 69 78 65  |free%..... "Fixe|
00038670  64 20 68 65 61 70 22 0d  1f d8 12 f1 20 22 2d 2d  |d heap"..... "--|
00038680  2d 2d 2d 20 2d 2d 2d 2d  22 0d 1f d9 3a f1 20 22  |--- ----"...:. "|
00038690  48 65 61 70 20 62 61 73  65 20 20 20 20 3a 20 26  |Heap base    : &|
000386a0  22 3b a4 5f 68 65 61 70  5f 6e 75 6d 74 6f 73 74  |";._heap_numtost|
000386b0  72 28 38 2c 66 69 78 65  64 68 65 61 70 62 61 73  |r(8,fixedheapbas|
000386c0  65 25 29 0d 1f da 35 f1  20 22 48 65 61 70 20 73  |e%)...5. "Heap s|
000386d0  69 7a 65 20 20 20 20 3a  20 22 3b a4 5f 68 65 61  |ize    : ";._hea|
000386e0  70 5f 62 79 74 65 73 32  28 66 69 78 65 64 68 65  |p_bytes2(fixedhe|
000386f0  61 70 73 69 7a 65 25 29  0d 1f db 2f f1 20 22 4c  |apsize%).../. "L|
00038700  61 72 67 65 73 74 20 66  72 65 65 20 3a 20 22 3b  |argest free : ";|
00038710  a4 5f 68 65 61 70 5f 62  79 74 65 73 32 28 62 69  |._heap_bytes2(bi|
00038720  67 62 6c 6f 63 25 29 0d  1f dc 2f f1 20 22 54 6f  |gbloc%).../. "To|
00038730  74 61 6c 20 66 72 65 65  20 20 20 3a 20 22 3b a4  |tal free   : ";.|
00038740  5f 68 65 61 70 5f 62 79  74 65 73 32 28 74 6f 74  |_heap_bytes2(tot|
00038750  66 72 65 65 25 29 0d 1f  dd 05 f1 0d 1f de 14 f1  |free%)..........|
00038760  20 22 53 6c 69 64 69 6e  67 20 68 65 61 70 22 0d  | "Sliding heap".|
00038770  1f df 14 f1 20 22 2d 2d  2d 2d 2d 2d 2d 20 2d 2d  |.... "------- --|
00038780  2d 2d 22 0d 1f e0 2e c8  99 20 22 53 6c 69 64 69  |--"...... "Slidi|
00038790  6e 67 48 65 61 70 5f 48  65 61 70 49 6e 66 6f 22  |ngHeap_HeapInfo"|
000387a0  2c 73 6c 69 64 69 6e 67  68 65 61 70 62 61 73 65  |,slidingheapbase|
000387b0  25 0d 1f e1 05 e1 0d 1f  e2 05 3a 0d 1f e3 17 dd  |%.........:.....|
000387c0  20 a4 5f 68 65 61 70 5f  70 61 67 65 75 70 28 6e  | ._heap_pageup(n|
000387d0  25 29 0d 1f e4 09 ea 20  52 30 25 0d 1f e5 20 c8  |%)..... R0%... .|
000387e0  99 20 22 4f 53 5f 52 65  61 64 4d 65 6d 4d 61 70  |. "OS_ReadMemMap|
000387f0  49 6e 66 6f 22 20 b8 20  52 30 25 0d 1f e6 1b 3d  |Info" . R0%....=|
00038800  28 6e 25 2b 52 30 25 2d  31 29 20 80 20 ac 20 28  |(n%+R0%-1) . . (|
00038810  52 30 25 2d 31 29 0d 1f  e7 05 3a 0d 1f e8 2a dd  |R0%-1)....:...*.|
00038820  20 f2 69 6e 69 74 68 65  61 70 73 28 68 65 61 70  | .initheaps(heap|
00038830  73 69 7a 65 25 2c 73 6c  69 64 69 6e 67 62 6c 6f  |size%,slidingblo|
00038840  63 6b 73 25 29 0d 1f e9  1c 66 69 78 65 64 68 65  |cks%)....fixedhe|
00038850  61 70 73 69 7a 65 25 3d  68 65 61 70 73 69 7a 65  |apsize%=heapsize|
00038860  25 0d 1f ea 4c 68 65 61  70 5f 74 72 69 67 67 65  |%...Lheap_trigge|
00038870  72 25 3d a4 5f 68 65 61  70 5f 70 61 67 65 75 70  |r%=._heap_pageup|
00038880  28 93 2b 66 69 78 65 64  68 65 61 70 73 69 7a 65  |(.+fixedheapsize|
00038890  25 2b 32 30 2b 32 30 2a  73 6c 69 64 69 6e 67 62  |%+20+20*slidingb|
000388a0  6c 6f 63 6b 73 25 2d 26  38 30 30 30 29 0d 1f eb  |locks%-&8000)...|
000388b0  1f f2 73 65 74 73 6c 6f  74 73 69 7a 65 28 68 65  |..setslotsize(he|
000388c0  61 70 5f 74 72 69 67 67  65 72 25 29 0d 1f ec 47  |ap_trigger%)...G|
000388d0  e7 20 a4 5f 68 65 61 70  5f 73 6c 6f 74 73 69 7a  |. ._heap_slotsiz|
000388e0  65 3c 68 65 61 70 5f 74  72 69 67 67 65 72 25 20  |e<heap_trigger% |
000388f0  8c 20 85 20 31 33 30 2c  22 55 6e 61 62 6c 65 20  |. . 130,"Unable |
00038900  74 6f 20 69 6e 69 74 69  61 6c 69 73 65 20 68 65  |to initialise he|
00038910  61 70 22 0d 1f ed 14 66  69 78 65 64 68 65 61 70  |ap"....fixedheap|
00038920  62 61 73 65 25 3d 93 0d  1f ee 25 73 6c 69 64 69  |base%=....%slidi|
00038930  6e 67 68 65 61 70 62 61  73 65 25 3d 93 2b 66 69  |ngheapbase%=.+fi|
00038940  78 65 64 68 65 61 70 73  69 7a 65 25 0d 1f ef 31  |xedheapsize%...1|
00038950  c8 99 20 22 4f 53 5f 48  65 61 70 22 2c 30 2c 66  |.. "OS_Heap",0,f|
00038960  69 78 65 64 68 65 61 70  62 61 73 65 25 2c 2c 66  |ixedheapbase%,,f|
00038970  69 78 65 64 68 65 61 70  73 69 7a 65 25 0d 1f f0  |ixedheapsize%...|
00038980  3d c8 99 20 22 53 6c 69  64 69 6e 67 48 65 61 70  |=.. "SlidingHeap|
00038990  5f 43 72 65 61 74 65 22  2c 73 6c 69 64 69 6e 67  |_Create",sliding|
000389a0  68 65 61 70 62 61 73 65  25 2c 32 2c 73 6c 69 64  |heapbase%,2,slid|
000389b0  69 6e 67 62 6c 6f 63 6b  73 25 0d 1f f1 30 c8 99  |ingblocks%...0..|
000389c0  20 22 53 6c 69 64 69 6e  67 48 65 61 70 5f 56 65  | "SlidingHeap_Ve|
000389d0  72 69 66 79 48 65 61 70  22 2c 73 6c 69 64 69 6e  |rifyHeap",slidin|
000389e0  67 68 65 61 70 62 61 73  65 25 0d 1f f2 05 e1 0d  |gheapbase%......|
000389f0  1f f3 05 3a 0d 1f f4 15  dd 20 a4 5f 68 65 61 70  |...:..... ._heap|
00038a00  5f 6e 65 78 74 66 72 65  65 0d 1f f5 0f ea 20 6e  |_nextfree..... n|
00038a10  65 78 74 66 72 65 65 25  0d 1f f6 3a c8 99 20 22  |extfree%...:.. "|
00038a20  53 6c 69 64 69 6e 67 48  65 61 70 5f 4e 65 78 74  |SlidingHeap_Next|
00038a30  46 72 65 65 22 2c 73 6c  69 64 69 6e 67 68 65 61  |Free",slidinghea|
00038a40  70 62 61 73 65 25 20 b8  20 6e 65 78 74 66 72 65  |pbase% . nextfre|
00038a50  65 25 0d 1f f7 0e 3d 6e  65 78 74 66 72 65 65 25  |e%....=nextfree%|
00038a60  0d 1f f8 05 3a 0d 1f f9  13 dd 20 f2 64 65 73 74  |....:..... .dest|
00038a70  72 6f 79 68 65 61 70 73  0d 1f fa 19 f2 73 65 74  |royheaps.....set|
00038a80  73 6c 6f 74 73 69 7a 65  28 93 2d 26 38 30 30 30  |slotsize(.-&8000|
00038a90  29 0d 1f fb 05 e1 0d 1f  fc 05 3a 0d 1f fd 24 dd  |).........:...$.|
00038aa0  20 a4 5f 68 65 61 70 5f  77 6f 72 64 75 70 28 78  | ._heap_wordup(x|
00038ab0  25 29 3d 28 78 25 2b 33  29 20 80 20 ac 20 33 0d  |%)=(x%+3) . . 3.|
00038ac0  1f fe 05 3a 0d 1f ff 1b  dd 20 a4 63 72 65 61 74  |...:..... .creat|
00038ad0  65 5f 61 6e 63 68 6f 72  28 6e 61 6d 65 24 29 0d  |e_anchor(name$).|
00038ae0  20 00 0c ea 20 73 70 61  63 65 25 0d 20 01 17 de  | ... space%. ...|
00038af0  20 73 70 61 63 65 25 20  34 2b a9 6e 61 6d 65 24  | space% 4+.name$|
00038b00  2b 31 0d 20 02 0d 21 73  70 61 63 65 25 3d 30 0d  |+1. ..!space%=0.|
00038b10  20 03 15 24 28 73 70 61  63 65 25 2b 34 29 3d 6e  | ..$(space%+4)=n|
00038b20  61 6d 65 24 0d 20 04 0b  3d 73 70 61 63 65 25 0d  |ame$. ..=space%.|
00038b30  20 05 05 3a 0d 20 06 30  dd 20 f2 63 72 65 61 74  | ..:. .0. .creat|
00038b40  65 5f 6e 61 6d 65 64 5f  73 6c 69 64 69 6e 67 5f  |e_named_sliding_|
00038b50  62 6c 6f 63 6b 28 61 6e  63 68 6f 72 25 2c 73 69  |block(anchor%,si|
00038b60  7a 65 25 29 0d 20 07 0e  ea 20 74 72 79 73 69 7a  |ze%). ... trysiz|
00038b70  65 25 0d 20 08 1e 73 69  7a 65 25 3d a4 5f 68 65  |e%. ..size%=._he|
00038b80  61 70 5f 77 6f 72 64 75  70 28 73 69 7a 65 25 29  |ap_wordup(size%)|
00038b90  0d 20 09 37 74 72 79 73  69 7a 65 25 3d a4 5f 68  |. .7trysize%=._h|
00038ba0  65 61 70 5f 70 61 67 65  75 70 28 a4 5f 68 65 61  |eap_pageup(._hea|
00038bb0  70 5f 6e 65 78 74 66 72  65 65 2b 73 69 7a 65 25  |p_nextfree+size%|
00038bc0  2d 26 37 46 46 34 29 0d  20 0a 1e e7 20 74 72 79  |-&7FF4). ... try|
00038bd0  73 69 7a 65 25 3e 68 65  61 70 5f 74 72 69 67 67  |size%>heap_trigg|
00038be0  65 72 25 20 8c 0d 20 0b  1d 20 20 20 f2 73 65 74  |er% .. ..   .set|
00038bf0  73 6c 6f 74 73 69 7a 65  28 74 72 79 73 69 7a 65  |slotsize(trysize|
00038c00  25 29 0d 20 0c 23 20 20  20 e7 20 a4 5f 68 65 61  |%). .#   . ._hea|
00038c10  70 5f 73 6c 6f 74 73 69  7a 65 3c 74 72 79 73 69  |p_slotsize<trysi|
00038c20  7a 65 25 20 8c 0d 20 0d  25 20 20 20 20 20 20 f2  |ze% .. .%      .|
00038c30  73 65 74 73 6c 6f 74 73  69 7a 65 28 68 65 61 70  |setslotsize(heap|
00038c40  5f 74 72 69 67 67 65 72  25 29 0d 20 0e 46 20 20  |_trigger%). .F  |
00038c50  20 20 20 20 85 20 31 33  31 2c 22 4e 6f 74 20 65  |    . 131,"Not e|
00038c60  6e 6f 75 67 68 20 72 6f  6f 6d 20 74 6f 20 63 72  |nough room to cr|
00038c70  65 61 74 65 20 62 6c 6f  63 6b 20 22 22 22 2b 24  |eate block """+$|
00038c80  28 61 6e 63 68 6f 72 25  2b 34 29 2b 22 22 22 22  |(anchor%+4)+""""|
00038c90  0d 20 0f 08 20 20 20 cc  0d 20 10 20 20 20 20 20  |. ..   .. .     |
00038ca0  20 20 68 65 61 70 5f 74  72 69 67 67 65 72 25 3d  |  heap_trigger%=|
00038cb0  74 72 79 73 69 7a 65 25  0d 20 11 08 20 20 20 cd  |trysize%. ..   .|
00038cc0  0d 20 12 05 cd 0d 20 13  46 c8 99 20 22 53 6c 69  |. .... .F.. "Sli|
00038cd0  64 69 6e 67 48 65 61 70  5f 4e 65 77 42 6c 6f 63  |dingHeap_NewBloc|
00038ce0  6b 22 2c 73 6c 69 64 69  6e 67 68 65 61 70 62 61  |k",slidingheapba|
00038cf0  73 65 25 2c 61 6e 63 68  6f 72 25 2c 73 69 7a 65  |se%,anchor%,size|
00038d00  25 2c 61 6e 63 68 6f 72  25 2b 34 0d 20 14 30 c8  |%,anchor%+4. .0.|
00038d10  99 20 22 53 6c 69 64 69  6e 67 48 65 61 70 5f 56  |. "SlidingHeap_V|
00038d20  65 72 69 66 79 48 65 61  70 22 2c 73 6c 69 64 69  |erifyHeap",slidi|
00038d30  6e 67 68 65 61 70 62 61  73 65 25 0d 20 15 05 e1  |ngheapbase%. ...|
00038d40  0d 20 16 05 3a 0d 20 17  23 dd 20 f2 73 63 72 61  |. ..:. .#. .scra|
00038d50  70 5f 73 6c 69 64 69 6e  67 5f 62 6c 6f 63 6b 28  |p_sliding_block(|
00038d60  61 6e 63 68 6f 72 25 29  0d 20 18 14 e7 20 21 61  |anchor%). ... !a|
00038d70  6e 63 68 6f 72 25 3d 30  20 8c 20 e1 0d 20 19 38  |nchor%=0 . .. .8|
00038d80  c8 99 20 22 53 6c 69 64  69 6e 67 48 65 61 70 5f  |.. "SlidingHeap_|
00038d90  53 63 72 61 70 42 6c 6f  63 6b 22 2c 73 6c 69 64  |ScrapBlock",slid|
00038da0  69 6e 67 68 65 61 70 62  61 73 65 25 2c 61 6e 63  |ingheapbase%,anc|
00038db0  68 6f 72 25 0d 20 1a 31  74 72 79 73 69 7a 65 25  |hor%. .1trysize%|
00038dc0  3d a4 5f 68 65 61 70 5f  70 61 67 65 75 70 28 a4  |=._heap_pageup(.|
00038dd0  5f 68 65 61 70 5f 6e 65  78 74 66 72 65 65 2d 26  |_heap_nextfree-&|
00038de0  37 46 46 43 29 0d 20 1b  1f e7 20 74 72 79 73 69  |7FFC). ... trysi|
00038df0  7a 65 25 3c 3e 68 65 61  70 5f 74 72 69 67 67 65  |ze%<>heap_trigge|
00038e00  72 25 20 8c 0d 20 1c 1d  20 20 20 f2 73 65 74 73  |r% .. ..   .sets|
00038e10  6c 6f 74 73 69 7a 65 28  74 72 79 73 69 7a 65 25  |lotsize(trysize%|
00038e20  29 0d 20 1d 1d 20 20 20  68 65 61 70 5f 74 72 69  |). ..   heap_tri|
00038e30  67 67 65 72 25 3d 74 72  79 73 69 7a 65 25 0d 20  |gger%=trysize%. |
00038e40  1e 05 cd 0d 20 1f 0e 21  61 6e 63 68 6f 72 25 3d  |.... ..!anchor%=|
00038e50  30 0d 20 20 30 c8 99 20  22 53 6c 69 64 69 6e 67  |0.  0.. "Sliding|
00038e60  48 65 61 70 5f 56 65 72  69 66 79 48 65 61 70 22  |Heap_VerifyHeap"|
00038e70  2c 73 6c 69 64 69 6e 67  68 65 61 70 62 61 73 65  |,slidingheapbase|
00038e80  25 0d 20 21 05 e1 0d 20  22 05 3a 0d 20 23 1c dd  |%. !... ".:. #..|
00038e90  20 f2 73 65 74 73 6c 6f  74 73 69 7a 65 28 6e 65  | .setslotsize(ne|
00038ea0  77 73 69 7a 65 25 29 0d  20 24 22 c8 99 20 22 57  |wsize%). $".. "W|
00038eb0  69 6d 70 5f 53 6c 6f 74  53 69 7a 65 22 2c 6e 65  |imp_SlotSize",ne|
00038ec0  77 73 69 7a 65 25 2c 2d  31 0d 20 25 05 e1 0d 20  |wsize%,-1. %... |
00038ed0  26 05 3a 0d 20 27 33 dd  20 f2 65 78 74 65 6e 64  |&.:. '3. .extend|
00038ee0  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00038ef0  6c 6f 63 6b 28 61 6e 63  68 6f 72 25 2c 6e 65 77  |lock(anchor%,new|
00038f00  73 69 7a 65 25 29 0d 20  28 42 e7 20 21 61 6e 63  |size%). (B. !anc|
00038f10  68 6f 72 25 3d 30 20 8c  20 f2 63 72 65 61 74 65  |hor%=0 . .create|
00038f20  5f 6e 61 6d 65 64 5f 73  6c 69 64 69 6e 67 5f 62  |_named_sliding_b|
00038f30  6c 6f 63 6b 28 61 6e 63  68 6f 72 25 2c 6e 65 77  |lock(anchor%,new|
00038f40  73 69 7a 65 25 29 3a e1  0d 20 29 41 e7 20 21 61  |size%):.. )A. !a|
00038f50  6e 63 68 6f 72 25 3e a4  5f 68 65 61 70 5f 6e 65  |nchor%>._heap_ne|
00038f60  78 74 66 72 65 65 20 8c  20 85 20 31 32 39 2c 22  |xtfree . . 129,"|
00038f70  42 6c 6f 63 6b 20 62 65  79 6f 6e 64 20 68 65 61  |Block beyond hea|
00038f80  70 20 6c 69 6d 69 74 73  22 0d 20 2a 24 6e 65 77  |p limits". *$new|
00038f90  73 69 7a 65 25 3d a4 5f  68 65 61 70 5f 77 6f 72  |size%=._heap_wor|
00038fa0  64 75 70 28 6e 65 77 73  69 7a 65 25 29 0d 20 2b  |dup(newsize%). +|
00038fb0  48 c8 99 20 22 53 6c 69  64 69 6e 67 48 65 61 70  |H.. "SlidingHeap|
00038fc0  5f 44 65 73 63 72 69 62  65 42 6c 6f 63 6b 22 2c  |_DescribeBlock",|
00038fd0  73 6c 69 64 69 6e 67 68  65 61 70 62 61 73 65 25  |slidingheapbase%|
00038fe0  2c 61 6e 63 68 6f 72 25  20 b8 20 2c 2c 6f 6c 64  |,anchor% . ,,old|
00038ff0  73 69 7a 65 25 0d 20 2c  1d 6c 61 72 67 65 72 25  |size%. ,.larger%|
00039000  3d 6e 65 77 73 69 7a 65  25 3e 6f 6c 64 73 69 7a  |=newsize%>oldsiz|
00039010  65 25 0d 20 2d 0f e7 20  6c 61 72 67 65 72 25 20  |e%. -.. larger% |
00039020  8c 0d 20 2e 48 20 20 20  74 72 79 73 69 7a 65 25  |.. .H   trysize%|
00039030  3d a4 5f 68 65 61 70 5f  70 61 67 65 75 70 28 a4  |=._heap_pageup(.|
00039040  5f 68 65 61 70 5f 6e 65  78 74 66 72 65 65 2b 28  |_heap_nextfree+(|
00039050  6e 65 77 73 69 7a 65 25  2d 6f 6c 64 73 69 7a 65  |newsize%-oldsize|
00039060  25 29 2d 26 37 46 46 43  29 0d 20 2f 21 20 20 20  |%)-&7FFC). /!   |
00039070  e7 20 74 72 79 73 69 7a  65 25 3e 68 65 61 70 5f  |. trysize%>heap_|
00039080  74 72 69 67 67 65 72 25  20 8c 0d 20 30 20 20 20  |trigger% .. 0   |
00039090  20 20 20 20 f2 73 65 74  73 6c 6f 74 73 69 7a 65  |    .setslotsize|
000390a0  28 74 72 79 73 69 7a 65  25 29 0d 20 31 26 20 20  |(trysize%). 1&  |
000390b0  20 20 20 20 e7 20 a4 5f  68 65 61 70 5f 73 6c 6f  |    . ._heap_slo|
000390c0  74 73 69 7a 65 3c 74 72  79 73 69 7a 65 25 20 8c  |tsize<trysize% .|
000390d0  0d 20 32 28 20 20 20 20  20 20 20 20 20 f2 73 65  |. 2(         .se|
000390e0  74 73 6c 6f 74 73 69 7a  65 28 68 65 61 70 5f 74  |tslotsize(heap_t|
000390f0  72 69 67 67 65 72 25 29  0d 20 33 40 20 20 20 20  |rigger%). 3@    |
00039100  20 20 20 20 20 85 20 31  33 32 2c 22 4e 6f 74 20  |     . 132,"Not |
00039110  65 6e 6f 75 67 68 20 72  6f 6f 6d 20 74 6f 20 65  |enough room to e|
00039120  78 74 65 6e 64 20 62 6c  6f 63 6b 20 23 22 2b c3  |xtend block #"+.|
00039130  7e 61 6e 63 68 6f 72 25  0d 20 34 0b 20 20 20 20  |~anchor%. 4.    |
00039140  20 20 cc 0d 20 35 23 20  20 20 20 20 20 20 20 20  |  .. 5#         |
00039150  68 65 61 70 5f 74 72 69  67 67 65 72 25 3d 74 72  |heap_trigger%=tr|
00039160  79 73 69 7a 65 25 0d 20  36 0b 20 20 20 20 20 20  |ysize%. 6.      |
00039170  cd 0d 20 37 08 20 20 20  cd 0d 20 38 05 cd 0d 20  |.. 7.   .. 8... |
00039180  39 42 c8 99 20 22 53 6c  69 64 69 6e 67 48 65 61  |9B.. "SlidingHea|
00039190  70 5f 45 78 74 65 6e 64  42 6c 6f 63 6b 22 2c 73  |p_ExtendBlock",s|
000391a0  6c 69 64 69 6e 67 68 65  61 70 62 61 73 65 25 2c  |lidingheapbase%,|
000391b0  61 6e 63 68 6f 72 25 2c  6e 65 77 73 69 7a 65 25  |anchor%,newsize%|
000391c0  0d 20 3a 31 74 72 79 73  69 7a 65 25 3d a4 5f 68  |. :1trysize%=._h|
000391d0  65 61 70 5f 70 61 67 65  75 70 28 a4 5f 68 65 61  |eap_pageup(._hea|
000391e0  70 5f 6e 65 78 74 66 72  65 65 2d 26 37 46 46 43  |p_nextfree-&7FFC|
000391f0  29 0d 20 3b 1f e7 20 74  72 79 73 69 7a 65 25 3c  |). ;.. trysize%<|
00039200  3e 68 65 61 70 5f 74 72  69 67 67 65 72 25 20 8c  |>heap_trigger% .|
00039210  0d 20 3c 1d 20 20 20 f2  73 65 74 73 6c 6f 74 73  |. <.   .setslots|
00039220  69 7a 65 28 74 72 79 73  69 7a 65 25 29 0d 20 3d  |ize(trysize%). =|
00039230  1d 20 20 20 68 65 61 70  5f 74 72 69 67 67 65 72  |.   heap_trigger|
00039240  25 3d 74 72 79 73 69 7a  65 25 0d 20 3e 05 cd 0d  |%=trysize%. >...|
00039250  20 3f 30 c8 99 20 22 53  6c 69 64 69 6e 67 48 65  | ?0.. "SlidingHe|
00039260  61 70 5f 56 65 72 69 66  79 48 65 61 70 22 2c 73  |ap_VerifyHeap",s|
00039270  6c 69 64 69 6e 67 68 65  61 70 62 61 73 65 25 0d  |lidingheapbase%.|
00039280  20 40 05 e1 0d 20 41 05  3a 0d 20 42 16 dd 20 a4  | @... A.:. B.. .|
00039290  5f 68 65 61 70 5f 62 79  74 65 73 28 62 25 29 0d  |_heap_bytes(b%).|
000392a0  20 43 0a ea 20 65 6e 64  25 0d 20 44 3e c8 99 20  | C.. end%. D>.. |
000392b0  22 4f 53 5f 43 6f 6e 76  65 72 74 46 69 78 65 64  |"OS_ConvertFixed|
000392c0  46 69 6c 65 53 69 7a 65  22 2c 62 25 2c 62 6c 6f  |FileSize",b%,blo|
000392d0  63 6b 25 2c 62 6c 6f 63  6b 25 2b 26 31 30 30 20  |ck%,block%+&100 |
000392e0  b8 20 2c 65 6e 64 25 0d  20 45 0c 3f 65 6e 64 25  |. ,end%. E.?end%|
000392f0  3d 31 33 0d 20 46 0c 3d  24 62 6c 6f 63 6b 25 0d  |=13. F.=$block%.|
00039300  20 47 05 3a 0d 20 48 17  dd 20 a4 5f 68 65 61 70  | G.:. H.. ._heap|
00039310  5f 62 79 74 65 73 32 28  62 25 29 0d 20 49 0a ea  |_bytes2(b%). I..|
00039320  20 65 6e 64 25 0d 20 4a  39 c8 99 20 22 4f 53 5f  | end%. J9.. "OS_|
00039330  43 6f 6e 76 65 72 74 46  69 6c 65 53 69 7a 65 22  |ConvertFileSize"|
00039340  2c 62 25 2c 62 6c 6f 63  6b 25 2c 62 6c 6f 63 6b  |,b%,block%,block|
00039350  25 2b 26 31 30 30 20 b8  20 2c 65 6e 64 25 0d 20  |%+&100 . ,end%. |
00039360  4b 0c 3f 65 6e 64 25 3d  31 33 0d 20 4c 0c 3d 24  |K.?end%=13. L.=$|
00039370  62 6c 6f 63 6b 25 0d 20  4d 05 3a 0d 20 4e 20 dd  |block%. M.:. N .|
00039380  20 a4 63 72 65 61 74 65  5f 66 69 78 65 64 5f 62  | .create_fixed_b|
00039390  6c 6f 63 6b 28 73 69 7a  65 25 29 0d 20 4f 14 ea  |lock(size%). O..|
000393a0  20 70 6f 69 6e 74 65 72  25 2c 66 6c 61 67 25 0d  | pointer%,flag%.|
000393b0  20 50 3c c8 99 20 22 58  4f 53 5f 48 65 61 70 22  | P<.. "XOS_Heap"|
000393c0  2c 32 2c 66 69 78 65 64  68 65 61 70 62 61 73 65  |,2,fixedheapbase|
000393d0  25 2c 2c 73 69 7a 65 25  20 b8 20 2c 2c 70 6f 69  |%,,size% . ,,poi|
000393e0  6e 74 65 72 25 3b 66 6c  61 67 25 0d 20 51 10 c8  |nter%;flag%. Q..|
000393f0  95 20 66 6c 61 67 25 20  80 20 31 0d 20 52 14 f2  |. flag% . 1. R..|
00039400  65 78 74 65 6e 64 66 69  78 65 64 68 65 61 70 0d  |extendfixedheap.|
00039410  20 53 3c c8 99 20 22 58  4f 53 5f 48 65 61 70 22  | S<.. "XOS_Heap"|
00039420  2c 32 2c 66 69 78 65 64  68 65 61 70 62 61 73 65  |,2,fixedheapbase|
00039430  25 2c 2c 73 69 7a 65 25  20 b8 20 2c 2c 70 6f 69  |%,,size% . ,,poi|
00039440  6e 74 65 72 25 3b 66 6c  61 67 25 0d 20 54 05 ce  |nter%;flag%. T..|
00039450  0d 20 55 0d 3d 70 6f 69  6e 74 65 72 25 0d 20 56  |. U.=pointer%. V|
00039460  05 3a 0d 20 57 16 dd 20  f2 65 78 74 65 6e 64 66  |.:. W.. .extendf|
00039470  69 78 65 64 68 65 61 70  0d 20 58 1c ea 20 6e 73  |ixedheap. X.. ns|
00039480  68 62 25 2c 65 78 74 65  6e 64 25 2c 74 72 79 73  |hb%,extend%,trys|
00039490  69 7a 65 25 0d 20 59 24  c8 99 20 22 4f 53 5f 52  |ize%. Y$.. "OS_R|
000394a0  65 61 64 4d 65 6d 4d 61  70 49 6e 66 6f 22 20 b8  |eadMemMapInfo" .|
000394b0  20 65 78 74 65 6e 64 25  0d 20 5a 24 74 72 79 73  | extend%. Z$trys|
000394c0  69 7a 65 25 3d a4 5f 68  65 61 70 5f 73 6c 6f 74  |ize%=._heap_slot|
000394d0  73 69 7a 65 2b 65 78 74  65 6e 64 25 0d 20 5b 1a  |size+extend%. [.|
000394e0  f2 73 65 74 73 6c 6f 74  73 69 7a 65 28 74 72 79  |.setslotsize(try|
000394f0  73 69 7a 65 25 29 0d 20  5c 45 e7 20 a4 5f 68 65  |size%). \E. ._he|
00039500  61 70 5f 73 6c 6f 74 73  69 7a 65 3c 74 72 79 73  |ap_slotsize<trys|
00039510  69 7a 65 25 20 8c 20 85  20 32 35 35 2c 22 4e 6f  |ize% . . 255,"No|
00039520  20 72 6f 6f 6d 20 74 6f  20 65 78 74 65 6e 64 20  | room to extend |
00039530  66 69 78 65 64 20 68 65  61 70 22 0d 20 5d 22 6e  |fixed heap". ]"n|
00039540  73 68 62 25 3d 73 6c 69  64 69 6e 67 68 65 61 70  |shb%=slidingheap|
00039550  62 61 73 65 25 2b 65 78  74 65 6e 64 25 0d 20 5e  |base%+extend%. ^|
00039560  35 c8 99 20 22 53 6c 69  64 69 6e 67 48 65 61 70  |5.. "SlidingHeap|
00039570  5f 53 68 69 66 74 48 65  61 70 22 2c 73 6c 69 64  |_ShiftHeap",slid|
00039580  69 6e 67 68 65 61 70 62  61 73 65 25 2c 6e 73 68  |ingheapbase%,nsh|
00039590  62 25 0d 20 5f 2a c8 99  20 22 4f 53 5f 48 65 61  |b%. _*.. "OS_Hea|
000395a0  70 22 2c 35 2c 66 69 78  65 64 68 65 61 70 62 61  |p",5,fixedheapba|
000395b0  73 65 25 2c 2c 65 78 74  65 6e 64 25 0d 20 60 1b  |se%,,extend%. `.|
000395c0  66 69 78 65 64 68 65 61  70 73 69 7a 65 25 2b 3d  |fixedheapsize%+=|
000395d0  65 78 74 65 6e 64 25 0d  20 61 1a 73 6c 69 64 69  |extend%. a.slidi|
000395e0  6e 67 68 65 61 70 62 61  73 65 25 3d 6e 73 68 62  |ngheapbase%=nshb|
000395f0  25 0d 20 62 30 c8 99 20  22 53 6c 69 64 69 6e 67  |%. b0.. "Sliding|
00039600  48 65 61 70 5f 56 65 72  69 66 79 48 65 61 70 22  |Heap_VerifyHeap"|
00039610  2c 73 6c 69 64 69 6e 67  68 65 61 70 62 61 73 65  |,slidingheapbase|
00039620  25 0d 20 63 05 e1 0d ff                           |%. c....|
00039628