home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 #1
/
monster.zip
/
monster
/
PROG_GEN
/
TCYBER.ZIP
/
PXBROWSE.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-15
|
31KB
|
310 lines
{
Turbo Vision CyberTools 1.0
(C) 1994 Steve Goldsmith
All Rights Reserved
PX Browse is a generic paradox table browser and supporting tools to
interface Turbo Vision with the Database Framework.
}
UNIT PXBROWSE;{$I APP.INC} {$X+} INTERFACE USES DOS,OOPXENG,PXENGINE,DRIVERS,OBJECTS,VIEWS,VALIDATE,
DIALOGS,MSGBOX,EDITORS,APP,MEMORY,CBCMDS;CONST PXBBLOBNAMES:ARRAY [0..4] OF STRING [17]
=('<BLOB Memo>','<BLOB Binary>','<BLOB Fmt Memo>','<BLOB OLE Object>','<BLOB Graphic>');PXBMAXUMEMOSIZE=16384;
PXBFIXEDMAX=1E13;PXBDOUBLEMAX:EXTENDED=1.7E308;PXBDOUBLEMIN:EXTENDED=5E-324;
TYPE PPXBFIELDNAME=^TPXBFIELDNAME;TPXBFIELDNAME=OBJECT(TSTATICTEXT)XYZX,XYZY:TPOINT;CONSTRUCTOR INIT
(VAR BOUNDS:TRECT;CONST ATEXT:STRING);PROCEDURE CALCBOUNDS(VAR BOUNDS:TRECT;DELTA:TPOINT);VIRTUAL;END;
PPXBINPUTLINE=^TPXBINPUTLINE;TPXBINPUTLINE=OBJECT(TINPUTLINE)YXZZX:PXFIELDTYPE;YXZZZ:PXFIELDSUBTYPE;
YXZXY:FIELDNUMBER;YXZYX:RECORDNUMBER;XYZX,XYZY,XYZZ:TPOINT;XYZXX,XYZXY,XYZXZ,XYZYX,
XYZYY:PPXBINPUTLINE;CONSTRUCTOR INIT(VAR BOUNDS:TRECT;AMAXLEN:INTEGER);PROCEDURE CALCBOUNDS(VAR BOUNDS:TRECT;
DELTA:TPOINT);VIRTUAL;PROCEDURE SETSTATE(ASTATE:WORD;ENABLE:BOOLEAN);VIRTUAL;FUNCTION VALID
(COMMAND:WORD):BOOLEAN;VIRTUAL;PROCEDURE HANDLEEVENT(VAR EVENT:TEVENT);VIRTUAL;END;
TPXBENGINECFGREC=RECORD ENGTYP,DOSSHR,WINSHR,CRTFMT,LCKMOD,SRTORD:INTEGER;SWPSIZ,TABHAN,RECHAN,
LCKHAN,FILHAN:STRING [6];NETPAT:PATHSTR;USRNAM:STRING [MAXNAMELEN];CLINAM:STRING [MAXNAMELEN];END;
PPXBENGINECFG=^TPXBENGINECFG;TPXBENGINECFG=OBJECT(TDIALOG)CONSTRUCTOR INIT;END;PPXBMEMOREC=^TPXBMEMOREC;
TPXBMEMOREC=RECORD LEN:WORD;DATA:ARRAY [0..PXBMAXUMEMOSIZE-1] OF CHAR;END;PPXBMEMOEDIT=^TPXBMEMOEDIT;
TPXBMEMOEDIT=OBJECT(TDIALOG)MEMO:PMEMO;CONSTRUCTOR INIT;END;PPXBDIALOG=^TPXBDIALOG;
TPXBDIALOG=OBJECT(TDIALOG)XYZYZ,XYZZX,XYZZY:INTEGER;XYZZZ:FIELDNUMBER;YXZX:LOCKHANDLE;YXZY:RECORDNUMBER;
YXZZ,ZXYX:STRING;ZXYY:PATHSTR;ZXYZ:PENGINE;ZYXX:PDATABASE;ZYXY:PCURSOR;ZYXZ:PCOLLECTION;ZZXX:PRECORD;
ZZXY:PINPUTLINE;ZZXZ:TPOINT;ZZZX:PGROUP;YXZZY,YXZXX,YXZXZ:PPXBINPUTLINE;YXZYY:PPXBFIELDNAME;
CONSTRUCTOR INIT(RECLINES:INTEGER;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
IDXNUM:FIELDNUMBER);DESTRUCTOR DONE;VIRTUAL;PROCEDURE UPDATESTATUS(S:STRING);FUNCTION ERRORBOX
(ERRCODE:INTEGER):BOOLEAN;VIRTUAL;PROCEDURE INITBROWSER;VIRTUAL;FUNCTION INPLINELEN(P:PFIELDDESC):INTEGER;
VIRTUAL;PROCEDURE MAKEVALIDATOR(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE MAKEMOVELINKS;VIRTUAL;PROCEDURE BUILDFIELDS
;VIRTUAL;PROCEDURE READFIELDS;VIRTUAL;FUNCTION SEARCHKEY(INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;FUNCTION LOCKREC
(INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;FUNCTION UNLOCKREC:RETCODE;VIRTUAL;PROCEDURE LOCKUPDATE
(INPLINE:PPXBINPUTLINE);VIRTUAL;FUNCTION WRITEFIELD(INPLINE:PPXBINPUTLINE):RETCODE;VIRTUAL;PROCEDURE TABPOSLINE
(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE TOGGLEINS;VIRTUAL;PROCEDURE FIELDCHANGED(INPLINE:PPXBINPUTLINE);VIRTUAL;
PROCEDURE FIELDENTER(INPLINE:PPXBINPUTLINE);VIRTUAL;FUNCTION FIELDEXIT(INPLINE:PPXBINPUTLINE):BOOLEAN;VIRTUAL;
PROCEDURE GOTOHOME;VIRTUAL;PROCEDURE GOTOLAST;VIRTUAL;PROCEDURE DOWNREAD(INPLINE:PPXBINPUTLINE);VIRTUAL;
PROCEDURE UPREAD(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE PAGEUPREAD;VIRTUAL;PROCEDURE PAGEDOWNREAD;VIRTUAL;
PROCEDURE HOMEREAD;VIRTUAL;PROCEDURE ENDREAD;VIRTUAL;PROCEDURE COPYCLIP(INPLINE:PPXBINPUTLINE);VIRTUAL;
PROCEDURE PASTECLIP(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE BLOBMEMOEDIT(INPLINE:PPXBINPUTLINE);VIRTUAL;
PROCEDURE BLOBEDIT(INPLINE:PPXBINPUTLINE);VIRTUAL;PROCEDURE DELETEREC(INPLINE:PPXBINPUTLINE);VIRTUAL;
PROCEDURE SIZELIMITS(VAR MIN,MAX:TPOINT);VIRTUAL;PROCEDURE HANDLEEVENT(VAR EVENT:TEVENT);VIRTUAL;FUNCTION VALID
(COMMAND:WORD):BOOLEAN;VIRTUAL;END;FUNCTION TRIMSTR(S:STRING):STRING;FUNCTION INTTOSTR(L:LONGINT):STRING;
FUNCTION STRTOINT(S:STRING):LONGINT;PROCEDURE ENGCFGTODLGCFG(ENGCFG:TENV;VAR DLGCFG:TPXBENGINECFGREC);
PROCEDURE DLGCFGTOENGCFG(DLGCFG:TPXBENGINECFGREC;VAR ENGCFG:TENV);IMPLEMENTATION FUNCTION TRIMSTR(S:STRING):STRING
;VAR OIlO:WORD;BEGIN WHILE(BYTE(S [0])>0)AND(S [BYTE(S [0])]<=' ') DO DEC(BYTE(S [0]));OIlO:=1;
WHILE(OIlO<=BYTE(S [0]))AND(S [OIlO]<=' ') DO INC(OIlO);DEC(OIlO);IF OIlO >0 THEN DELETE(S,1,OIlO
);TRIMSTR:=S END;FUNCTION INTTOSTR(L:LONGINT):STRING;VAR OO1O:STRING;BEGIN STR(L,OO1O);INTTOSTR:=OO1O END;
FUNCTION STRTOINT(S:STRING):LONGINT;VAR Ol000OO00IlO:INTEGER;OO01:LONGINT;BEGIN VAL(S,OO01,Ol000OO00IlO);
STRTOINT:=OO01 END;PROCEDURE ENGCFGTODLGCFG(ENGCFG:TENV;VAR DLGCFG:TPXBENGINECFGREC);
BEGIN WITH ENGCFG DO BEGIN WITH DLGCFG DO BEGIN ENGTYP:=INTEGER(ENGINETYPE);DOSSHR:=INTEGER(DOSSHARE);WINSHR:=
INTEGER(WINSHARE);CRTFMT:=INTEGER(TABCRTMODE);LCKMOD:=INTEGER(TABLCKMODE);SRTORD:=INTEGER(SORTORDER);
SWPSIZ:=INTTOSTR(BUFSIZE);TABHAN:=INTTOSTR(MAXTABLES);RECHAN:=INTTOSTR(MAXRECBUFS);LCKHAN:=INTTOSTR
(MAXLOCKS);FILHAN:=INTTOSTR(MAXFILES);NETPAT:=NETNAMEPATH;USRNAM:=USERNAME;CLINAM:=CLIENTNAME END END END
;PROCEDURE DLGCFGTOENGCFG(DLGCFG:TPXBENGINECFGREC;VAR ENGCFG:TENV);BEGIN WITH DLGCFG DO BEGIN WITH ENGCFG DO BEGIN
ENGINETYPE:=TENGINETYPE(ENGTYP);DOSSHARE:=PXDOSSHARE(DOSSHR);WINSHARE:=PXWINSHARE(WINSHR);TABCRTMODE:=
PXTABCRTMODE(CRTFMT);TABLCKMODE:=PXTBLLCKMODE(LCKMOD);SORTORDER:=PXSORTORDER(SRTORD);BUFSIZE:=STRTOINT
(SWPSIZ);MAXTABLES:=STRTOINT(TABHAN);MAXRECBUFS:=STRTOINT(RECHAN);MAXLOCKS:=STRTOINT(LCKHAN);MAXFILES:=
STRTOINT(FILHAN);NETNAMEPATH:=NETPAT;USERNAME:=USRNAM;CLIENTNAME:=CLINAM END END END;CONSTRUCTOR
TPXBENGINECFG.INIT;VAR OO1I:TRECT;O10I0l0O:PRADIOBUTTONS;OIO1000lI0l:PINPUTLINE;BEGIN OO1I.ASSIGN(0,0,53
,20);INHERITED INIT(OO1I,'Engine Options');OPTIONS:=OPTIONS OR OFCENTERED;OO1I.ASSIGN(2,3,15,6);
O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('Local',NEWSITEM('Network',NEWSITEM('Windows',NIL)))));
INSERT(O10I0l0O);OO1I.ASSIGN(1,2,13,3);INSERT(NEW(PLABEL,INIT(OO1I,'~E~ngine type',O10I0l0O)));
OO1I.ASSIGN(17,3,30,6);O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('Local',NEWSITEM('Network',
NEWSITEM('None',NIL)))));INSERT(O10I0l0O);OO1I.ASSIGN(16,2,30,3);INSERT(NEW(PLABEL,INIT(OO1I,
'~D~OS share',O10I0l0O)));OO1I.ASSIGN(32,3,51,6);O10I0l0O:=NEW(PRADIOBUTTONS,INIT(OO1I,NEWSITEM
('Shared',NEWSITEM('Single client',NEWSITEM('Exclusive',NIL)))));INSERT(O10I0l0O);OO1I.ASSIGN(31,2,47,3);
INSERT(NEW(PLABEL,INIT(OO1I,'~W~indows share',O10I0l0O)));OO1I.ASSIGN(2,8,15,10);O10I0l0O:=NEW
(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('4.0',NEWSITEM('3.5',NIL))));INSERT(O10I0l0O);OO1I.ASSIGN(1,7,15,8
);INSERT(NEW(PLABEL,INIT(OO1I,'~C~reate format',O10I0l0O)));OO1I.ASSIGN(17,8,30,10);O10I0l0O:=NEW
(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('4.0',NEWSITEM('3.5',NIL))));INSERT(O10I0l0O);OO1I.ASSIGN(16,7,30,8
);INSERT(NEW(PLABEL,INIT(OO1I,'~L~ock mode',O10I0l0O)));OO1I.ASSIGN(32,8,51,13);O10I0l0O:=NEW
(PRADIOBUTTONS,INIT(OO1I,NEWSITEM('ASCII',NEWSITEM('International',NEWSITEM('Norwegian 3.5',NEWSITEM
('Norwegian 4.0',NEWSITEM('Swedish',NIL)))))));INSERT(O10I0l0O);OO1I.ASSIGN(31,7,51,8);INSERT(NEW(PLABEL
,INIT(OO1I,'~S~ort order',O10I0l0O)));OO1I.ASSIGN(13,11,21,12);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I
,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(8,256)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,11,
12,12);INSERT(NEW(PLABEL,INIT(OO1I,'Swap si~z~e',OIO1000lI0l)));OO1I.ASSIGN(13,12,21,13);OIO1000lI0l
:=NEW(PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(1,64)));INSERT
(OIO1000lI0l);OO1I.ASSIGN(1,12,12,13);INSERT(NEW(PLABEL,INIT(OO1I,'~T~ables',OIO1000lI0l)));
OO1I.ASSIGN(13,13,21,14);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW
(PRANGEVALIDATOR,INIT(1,512)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,13,12,14);INSERT(NEW(PLABEL,INIT
(OO1I,'~R~ecords',OIO1000lI0l)));OO1I.ASSIGN(13,14,21,15);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,6));
OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(1,128)));INSERT(OIO1000lI0l);OO1I.ASSIGN(1,14,12,15
);INSERT(NEW(PLABEL,INIT(OO1I,'L~o~cks',OIO1000lI0l)));OO1I.ASSIGN(13,15,21,16);OIO1000lI0l:=NEW
(PINPUTLINE,INIT(OO1I,6));OIO1000lI0l^.SETVALIDATOR(NEW(PRANGEVALIDATOR,INIT(3,255)));INSERT(OIO1000lI0l
);OO1I.ASSIGN(1,15,12,16);INSERT(NEW(PLABEL,INIT(OO1I,'~F~iles',OIO1000lI0l)));OO1I.ASSIGN(32,14,51
,15);OIO1000lI0l:=NEW(PINPUTLINE,INIT(OO1I,SIZEOF(PATHSTR)-1));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,14,
31,15);INSERT(NEW(PLABEL,INIT(OO1I,'Net ~p~ath',OIO1000lI0l)));OO1I.ASSIGN(32,15,51,16);OIO1000lI0l
:=NEW(PINPUTLINE,INIT(OO1I,MAXNAMELEN));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,15,31,16);INSERT(NEW
(PLABEL,INIT(OO1I,'~N~ame',OIO1000lI0l)));OO1I.ASSIGN(32,16,51,17);OIO1000lI0l:=NEW(PINPUTLINE,INIT
(OO1I,MAXNAMELEN));INSERT(OIO1000lI0l);OO1I.ASSIGN(22,16,31,17);INSERT(NEW(PLABEL,INIT(OO1I,
'Cl~i~ent',OIO1000lI0l)));OO1I.ASSIGN(1,17,11,19);INSERT(NEW(PBUTTON,INIT(OO1I,'O~K~',CMOK,BFDEFAULT
)));OO1I.ASSIGN(12,17,22,19);INSERT(NEW(PBUTTON,INIT(OO1I,'Cancel',CMCANCEL,BFNORMAL)))END;
CONSTRUCTOR TPXBMEMOEDIT.INIT;VAR OO1I:TRECT;OOIOI1II000O,OOIOI1II00l1:PSCROLLBAR;BEGIN APPLICATION^.GETEXTENT(OO1I
);OO1I.B.Y:=OO1I.B.Y-2;OO1I.A.Y:=(OO1I.B.Y SHR 1)-1;INHERITED INIT(OO1I,'Memo Editor');GETEXTENT(OO1I);
OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.B.X-1;OO1I.A.Y:=OO1I.B.Y-5;OO1I.B.Y:=OO1I.A.Y+1;OOIOI1II000O:=
NEW(PSCROLLBAR,INIT(OO1I));INSERT(OOIOI1II000O);GETEXTENT(OO1I);OO1I.A.X:=OO1I.B.X-1;OO1I.B.X:=OO1I.A.X+
1;OO1I.A.Y:=OO1I.A.Y+1;OO1I.B.Y:=OO1I.B.Y-5;OOIOI1II00l1:=NEW(PSCROLLBAR,INIT(OO1I));INSERT
(OOIOI1II00l1);GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.B.X-1;OO1I.A.Y:=OO1I.A.Y+1;OO1I.B.Y
:=OO1I.B.Y-5;MEMO:=NEW(PMEMO,INIT(OO1I,OOIOI1II000O,OOIOI1II00l1,NIL,PXBMAXUMEMOSIZE));INSERT(MEMO);
GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+1;OO1I.B.X:=OO1I.A.X+10;OO1I.A.Y:=OO1I.B.Y-3;OO1I.B.Y:=OO1I.A.Y+2
;INSERT(NEW(PBUTTON,INIT(OO1I,'O~K~',CMOK,BFDEFAULT)));OO1I.A.X:=OO1I.B.X+2;OO1I.B.X:=OO1I.A.X+10;
INSERT(NEW(PBUTTON,INIT(OO1I,'Cancel',CMCANCEL,BFNORMAL)));SELECTNEXT(FALSE)END;
CONSTRUCTOR TPXBFIELDNAME.INIT(VAR BOUNDS:TRECT;CONST ATEXT:STRING);BEGIN INHERITED INIT(BOUNDS,ATEXT);XYZX:=
BOUNDS.A;GETEXTENT(BOUNDS);XYZY:=BOUNDS.B END;PROCEDURE TPXBFIELDNAME.CALCBOUNDS(VAR BOUNDS:TRECT;
DELTA:TPOINT);BEGIN BOUNDS.A.X:=ORIGIN.X;BOUNDS.A.Y:=ORIGIN.Y;BOUNDS.B.X:=ORIGIN.X+XYZY.X;BOUNDS.B.Y:=
ORIGIN.Y+XYZY.Y END;CONSTRUCTOR TPXBINPUTLINE.INIT(VAR BOUNDS:TRECT;AMAXLEN:INTEGER);BEGIN INHERITED INIT(BOUNDS
,AMAXLEN);OPTIONS:=OPTIONS OR OFVALIDATE;XYZX:=BOUNDS.A;GETEXTENT(BOUNDS);XYZY:=BOUNDS.B END;
PROCEDURE TPXBINPUTLINE.CALCBOUNDS(VAR BOUNDS:TRECT;DELTA:TPOINT);BEGIN BOUNDS.A.X:=ORIGIN.X;BOUNDS.A.Y:=ORIGIN.Y;
BOUNDS.B.X:=ORIGIN.X+XYZY.X;BOUNDS.B.Y:=ORIGIN.Y+XYZY.Y END;PROCEDURE TPXBINPUTLINE.SETSTATE(ASTATE:WORD;
ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE,ENABLE);IF(ASTATE=SFSELECTED)AND(STATE AND SFACTIVE<>0)AND
(STATE AND SFSELECTED<>0)THEN MESSAGE(OWNER^.OWNER,EVCOMMAND,CMFIELDENTER,@ SELF)END;
FUNCTION TPXBINPUTLINE.VALID(COMMAND:WORD):BOOLEAN;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0:=INHERITED VALID(COMMAND
);IF COMMAND=CMRELEASEDFOCUS THEN BEGIN IF MESSAGE(OWNER^.OWNER,EVCOMMAND,CMFIELDEXIT,@ SELF)=NIL THEN
BEGIN SELECT;OIOI100IlI0:=FALSE END END;VALID:=OIOI100IlI0 END;PROCEDURE TPXBINPUTLINE.HANDLEEVENT
(VAR EVENT:TEVENT);BEGIN IF EVENT.WHAT=EVKEYDOWN THEN BEGIN IF YXZZX=FLDBLOB THEN BEGIN CLEAREVENT(EVENT);
INHERITED HANDLEEVENT(EVENT)END ELSE BEGIN INHERITED HANDLEEVENT(EVENT);MESSAGE(OWNER^.OWNER,EVCOMMAND,
CMFIELDCHANGED,@ SELF)END END ELSE INHERITED HANDLEEVENT(EVENT)END;CONSTRUCTOR TPXBDIALOG.INIT
(RECLINES:INTEGER;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;IDXNUM:FIELDNUMBER);VAR OO1I:TRECT;
OO1100I1001:PVIEW;BEGIN APPLICATION^.GETEXTENT(OO1I);OO1I.B.Y:=OO1I.A.Y+RECLINES+6;INHERITED INIT(OO1I,
TBLNAME);OPTIONS:=OPTIONS OR OFVALIDATE OR OFTILEABLE;FLAGS:=WFMOVE+WFGROW+WFCLOSE+WFZOOM;GROWMODE:=
GFGROWREL;PALETTE:=DPBLUEDIALOG;GETEXTENT(OO1I);OO1I.A.X:=OO1I.A.X+2;OO1I.B.X:=OO1I.A.X+12;OO1I.A.Y:=
OO1I.B.Y-1;ZZXY:=NEW(PINPUTLINE,INIT(OO1I,10));ZZXY^.OPTIONS:=ZZXY^.OPTIONS AND NOT OFSELECTABLE;ZZXY
^.GROWMODE:=GFGROWLOY;INSERT(ZZXY);GETEXTENT(OO1I);INC(OO1I.A.X,2);INC(OO1I.A.Y,2);DEC(OO1I.B.X,2);
DEC(OO1I.B.Y,2);ZZZX:=NEW(PGROUP,INIT(OO1I));WITH ZZZX^DO BEGIN GROWMODE:=GFGROWHIX+GFGROWHIY;GETEXTENT
(OO1I);XYZZY:=OO1I.B.Y-2;OO1100I1001:=NEW(PVIEW,INIT(OO1I));OO1100I1001^.GROWMODE:=GFGROWHIX+GFGROWHIY
;INSERT(OO1100I1001)END;INSERT(ZZZX);GETEXTENT(OO1I);ZZXZ.X:=OO1I.B.X;ZZXZ.Y:=OO1I.B.Y;ZXYY:=TBLNAME;
ZXYZ:=ENGPTR;ZYXX:=DBPTR;ZYXY:=CURPTR;XYZZZ:=IDXNUM;INITBROWSER END;DESTRUCTOR TPXBDIALOG.DONE;
BEGIN IF ZYXZ<>NIL THEN DISPOSE(ZYXZ,DONE);IF ZZXX<>NIL THEN DISPOSE(ZZXX,DONE);IF ZYXY<>NIL THEN DISPOSE
(ZYXY,DONE);INHERITED DONE END;PROCEDURE TPXBDIALOG.UPDATESTATUS(S:STRING);BEGIN ZZXY^.SETDATA(S)END;
FUNCTION TPXBDIALOG.ERRORBOX(ERRCODE:INTEGER):BOOLEAN;BEGIN IF ERRCODE<>PXSUCCESS THEN BEGIN MESSAGEBOX(ZXYZ^.
GETERRORMESSAGE(ERRCODE),NIL,MFERROR OR MFOKBUTTON);ERRORBOX:=TRUE END ELSE ERRORBOX:=FALSE END;
PROCEDURE TPXBDIALOG.INITBROWSER;VAR OIlO:FIELDNUMBER;OO10:PFIELDDESC;BEGIN YXZX:=0;YXZY:=0;ZZXX:=NEW(PRECORD,
INIT(ZYXY));XYZYZ:=ZYXY^.GENERICREC^.GETFIELDCOUNT;XYZZX:=ZYXX^.GETNUMPFIELDS(ZXYY);ZYXZ:=NEW
(PCOLLECTION,INIT(XYZYZ,0));FOR OIlO:=1 TO XYZYZ DO BEGIN OO10:=NEW(PFIELDDESC,INIT);ZYXY^.GENERICREC^.
GETFIELDDESC(OIlO,OO10);ZYXZ^.INSERT(OO10)END;BUILDFIELDS;YXZZY^.SELECT;YXZXZ:=YXZZY;GOTOHOME;
READFIELDS END;FUNCTION TPXBDIALOG.INPLINELEN(P:PFIELDDESC):INTEGER;BEGIN CASE P^.FLDTYPE OF FLDCHAR
:INPLINELEN:=P^.FLDLEN;FLDSHORT:INPLINELEN:=6;FLDLONG:INPLINELEN:=11;FLDDOUBLE:INPLINELEN:=17;FLDDATE
:INPLINELEN:=10;FLDBLOB:CASE P^.FLDSUBTYPE OF FLDSTMEMO:INPLINELEN:=BYTE(PXBBLOBNAMES [0,0]);FLDSTBINARY
:INPLINELEN:=BYTE(PXBBLOBNAMES [1,0]);FLDSTFMTMEMO:INPLINELEN:=BYTE(PXBBLOBNAMES [2,0]);FLDSTOLEOBJ
:INPLINELEN:=BYTE(PXBBLOBNAMES [3,0]);FLDSTGRAPHIC:INPLINELEN:=BYTE(PXBBLOBNAMES [4,0])END END END;
PROCEDURE TPXBDIALOG.MAKEVALIDATOR(INPLINE:PPXBINPUTLINE);BEGIN CASE INPLINE^.YXZZX OF FLDSHORT:INPLINE
^.SETVALIDATOR(NEW(PFILTERVALIDATOR,INIT(['0'..'9','+','-',' '])));FLDLONG:INPLINE^.SETVALIDATOR(NEW
(PFILTERVALIDATOR,INIT(['0'..'9','+','-',' '])));FLDDOUBLE:INPLINE^.SETVALIDATOR(NEW(PFILTERVALIDATOR,
INIT(['0'..'9','+','-','.','E','e',' '])));FLDDATE:INPLINE^.SETVALIDATOR(NEW(PPXPICTUREVALIDATOR,INIT
('{##}/{##}/{####}',TRUE)))END END;PROCEDURE TPXBDIALOG.MAKEMOVELINKS;
VAR O101000OOOI01,O10O0OlO01OII:INTEGER;O10O0ll1OOllO,O10O0ll1Ol00O:PPXBINPUTLINE;BEGIN O10O0ll1OOllO:=YXZZY;
O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O10O0OlO01OII:=1 TO XYZYZ DO PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW;
FOR O101000OOOI01:=1 TO XYZZY DO FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1OOllO^.XYZXX:=O10O0ll1Ol00O;
IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW;IF O10O0ll1Ol00O<>NIL THEN
PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW END;O10O0ll1OOllO:=YXZZY;FOR O101000OOOI01:=1 TO XYZZY
DO FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO^.XYZXX;IF O10O0ll1Ol00O<>NIL THEN
O10O0ll1Ol00O^.XYZXY:=O10O0ll1OOllO;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO
^.PREVVIEW END;O10O0ll1OOllO:=YXZZY;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;
FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O^.XYZXZ:=O10O0ll1OOllO;IF O10O0ll1Ol00O^.PREVVIEW<>NIL
THEN PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.PREVVIEW END;PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.XYZXX
END;O10O0ll1OOllO:=YXZXX;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O10O0OlO01OII
:=1 TO XYZYZ DO BEGIN O10O0ll1Ol00O^.XYZYX:=O10O0ll1OOllO;PVIEW(O10O0ll1Ol00O):=O10O0ll1Ol00O^.NEXTVIEW
END;O10O0ll1OOllO:=O10O0ll1OOllO^.XYZXY END;O10O0ll1OOllO:=YXZZY;FOR O10O0OlO01OII:=1 TO XYZYZ
DO BEGIN O10O0ll1Ol00O:=O10O0ll1OOllO;FOR O101000OOOI01:=1 TO XYZZY DO BEGIN O10O0ll1Ol00O^.XYZYY:=
O10O0ll1OOllO;O10O0ll1Ol00O:=O10O0ll1Ol00O^.XYZXX END;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW
(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END END;PROCEDURE TPXBDIALOG.BUILDFIELDS;VAR OIlO:INTEGER;
OI000O0O00:TPOINT;OO1I:TRECT;PROCEDURE OOIII0I1O11l(OO10:PFIELDDESC);FAR;VAR O1lO1ll0Il1I:PPXBINPUTLINE;
BEGIN OO1I.ASSIGN(OI000O0O00.X,OI000O0O00.Y,OI000O0O00.X+INPLINELEN(OO10)+2,OI000O0O00.Y+1);O1lO1ll0Il1I
:=NEW(PPXBINPUTLINE,INIT(OO1I,INPLINELEN(OO10)));O1lO1ll0Il1I^.XYZZ:=OI000O0O00;O1lO1ll0Il1I^.YXZXY:=
OO10^.FLDNUM;O1lO1ll0Il1I^.YXZZX:=OO10^.FLDTYPE;O1lO1ll0Il1I^.YXZZZ:=OO10^.FLDSUBTYPE;MAKEVALIDATOR
(O1lO1ll0Il1I);ZZZX^.INSERT(O1lO1ll0Il1I);OI000O0O00.X:=OI000O0O00.X+INPLINELEN(OO10)+3 END;
PROCEDURE O10O0OIl1OOl0(OO10:PFIELDDESC);FAR;BEGIN OO1I.ASSIGN(OI000O0O00.X,OI000O0O00.Y,OI000O0O00.X+INPLINELEN
(OO10)+2,OI000O0O00.Y+2);ZZZX^.INSERT(NEW(PPXBFIELDNAME,INIT(OO1I,#3+OO10^.FLDNAME)));OI000O0O00.X:=
OI000O0O00.X+INPLINELEN(OO10)+3 END;FUNCTION Ol000IOOlI10(OO10:PVIEW):BOOLEAN;FAR;BEGIN Ol000IOOlI10:=
(TYPEOF(OO10^)=TYPEOF(TPXBINPUTLINE))AND(TYPEOF(OO10^.NEXTVIEW^)=TYPEOF(TPXBFIELDNAME))END;
BEGIN OI000O0O00.X:=0;OI000O0O00.Y:=0;ZYXZ^.FOREACH(@ O10O0OIl1OOl0);OI000O0O00.X:=0;INC(OI000O0O00.Y,2
);FOR OIlO:=1 TO XYZZY DO BEGIN ZYXZ^.FOREACH(@ OOIII0I1O11l);OI000O0O00.X:=0;INC(OI000O0O00.Y)END;
PVIEW(YXZYY):=ZZZX^.LAST^.PREV;PVIEW(YXZXX):=ZZZX^.LAST^.NEXT;PVIEW(YXZZY):=ZZZX^.FIRSTTHAT(@
Ol000IOOlI10);MAKEMOVELINKS END;PROCEDURE TPXBDIALOG.READFIELDS;VAR OO1O,OIlO,O10O0OlO01OII:INTEGER;OO01:LONGINT;
OIOO:DOUBLE;O10111IIlO0ll:BOOLEAN;O100I0OIOO1:STRING;O10O0ll1OOllO:PPXBINPUTLINE;BEGIN IF ZYXY^.HASCHANGED THEN ZYXY
^.REFRESH;O10O0ll1OOllO:=YXZZY;ZYXY^.GETRECORD(ZZXX);FOR OIlO:=1 TO XYZZY DO BEGIN IF ZYXY^.LASTERROR
=PXSUCCESS THEN BEGIN ZYXY^.GETRECORD(ZYXY^.GENERICREC);FOR O10O0OlO01OII:=1 TO XYZYZ DO IF O10O0ll1OOllO^.
YXZZX<>FLDBLOB THEN BEGIN IF NOT ZYXY^.GENERICREC^.ISNULL(O10O0ll1OOllO^.YXZXY)THEN BEGIN CASE O10O0ll1OOllO^.
YXZZX OF FLDCHAR:ZYXY^.GENERICREC^.GETSTRING(O10O0ll1OOllO^.YXZXY,O100I0OIOO1,O10111IIlO0ll);FLDSHORT
:BEGIN ZYXY^.GENERICREC^.GETFIELD(O10O0ll1OOllO^.YXZXY,@ OO1O,SIZEOF(OO1O),O10111IIlO0ll);STR(OO1O:6,
O100I0OIOO1)END;FLDLONG:BEGIN ZYXY^.GENERICREC^.GETFIELD(O10O0ll1OOllO^.YXZXY,@ OO01,SIZEOF(OO01),
O10111IIlO0ll);STR(OO01:11,O100I0OIOO1)END;FLDDOUBLE:BEGIN ZYXY^.GENERICREC^.GETDOUBLE(O10O0ll1OOllO^.
YXZXY,OIOO,O10111IIlO0ll);IF(ABS(OIOO)< PXBFIXEDMAX)THEN STR(OIOO:17:2,O100I0OIOO1)ELSE STR(OIOO:17,
O100I0OIOO1)END;FLDDATE:ZYXY^.GENERICREC^.GETSTRING(O10O0ll1OOllO^.YXZXY,O100I0OIOO1,O10111IIlO0ll)
END;IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;
O10O0ll1OOllO^.YXZYX:=ZYXY^.GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW);END ELSE
BEGIN O100I0OIOO1:='';IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.
DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=ZYXY^.GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.
PREVVIEW);END END ELSE BEGIN CASE O10O0ll1OOllO^.YXZZZ OF FLDSTMEMO:O100I0OIOO1:=PXBBLOBNAMES [0];
FLDSTBINARY:O100I0OIOO1:=PXBBLOBNAMES [1];FLDSTFMTMEMO:O100I0OIOO1:=PXBBLOBNAMES [2];FLDSTOLEOBJ:O100I0OIOO1
:=PXBBLOBNAMES [3];FLDSTGRAPHIC:O100I0OIOO1:=PXBBLOBNAMES [4] END;IF O10O0ll1OOllO^.EXPOSED THEN
O10O0ll1OOllO^.SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=ZYXY^.
GETCURRECNUM;O10O0ll1OOllO:=PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW)END;ZYXY^.GOTONEXT END ELSE
BEGIN O100I0OIOO1:='';FOR O10O0OlO01OII:=1 TO XYZYZ DO BEGIN IF O10O0ll1OOllO^.EXPOSED THEN O10O0ll1OOllO^.
SETDATA(O100I0OIOO1)ELSE O10O0ll1OOllO^.DATA^:=O100I0OIOO1;O10O0ll1OOllO^.YXZYX:=0;O10O0ll1OOllO:=
PPXBINPUTLINE(O10O0ll1OOllO^.PREVVIEW)END END END;YXZZ:=PPXBINPUTLINE(ZZZX^.CURRENT)^.DATA^;
LOCKUPDATE(PPXBINPUTLINE(ZZZX^.CURRENT))END;FUNCTION TPXBDIALOG.SEARCHKEY(INPLINE:PPXBINPUTLINE):RETCODE;
VAR O10O0ll1OOllO:PPXBINPUTLINE;OIlO:INTEGER;BEGIN O10O0ll1OOllO:=INPLINE^.XYZXZ;ZYXY^.GENERICREC^.CLEAR;IF
XYZZZ=0 THEN BEGIN IF XYZZX<>0 THEN BEGIN FOR OIlO:=1 TO XYZZX DO BEGIN IF(O10O0ll1OOllO^.YXZYX=PPXBINPUTLINE
(ZZZX^.CURRENT)^.YXZYX)AND(O10O0ll1OOllO^.YXZXY=PPXBINPUTLINE(ZZZX^.CURRENT)^.YXZXY)THEN ZYXY^.
GENERICREC^.PUTSTRING(O10O0ll1OOllO^.YXZXY,YXZZ)ELSE ZYXY^.GENERICREC^.PUTSTRING(O10O0ll1OOllO^.YXZXY,
O10O0ll1OOllO^.DATA^);PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END;SEARCHKEY:=ZYXY^.SEARCHINDEX
(ZYXY^.GENERICREC,PXSEARCHFIRST,XYZZX)END ELSE SEARCHKEY:=ZYXY^.GOTOREC(O10O0ll1OOllO^.YXZYX)
END ELSE SEARCHKEY:=ZYXY^.GOTOREC(O10O0ll1OOllO^.YXZYX)END;FUNCTION TPXBDIALOG.LOCKREC
(INPLINE:PPXBINPUTLINE):RETCODE;VAR OOO1IlI0l0OI:RETCODE;OIO1O1II01l:WORD;O11lOl0I1O:LONGINT;OIl1I0IlOO:STRING;
BEGIN IF INPLINE^.YXZYX<>0 THEN BEGIN IF YXZX=0 THEN BEGIN OOO1IlI0l0OI:=SEARCHKEY(INPLINE);IF OOO1IlI0l0OI
=PXSUCCESS THEN BEGIN IF ZXYZ^.ENGINETYPE<>PXLOCAL THEN BEGIN REPEAT YXZX:=ZYXY^.LOCKRECORD;OOO1IlI0l0OI:=ZYXY
^.LASTERROR;IF OOO1IlI0l0OI=PXERR_RECLOCKED THEN BEGIN OIl1I0IlOO:=ZYXX^.GETNETERRUSER;IF OIl1I0IlOO=''THEN
OIl1I0IlOO:='unknown or local user';O11lOl0I1O:=LONGINT(@ OIl1I0IlOO);OIO1O1II01l:=MESSAGEBOX
(#3'Record is locked by %s.'#13#13#3'Try to lock record again?',@ O11lOl0I1O,MFYESBUTTON+MFNOBUTTON)END ELSE
OIO1O1II01l:=CMNO UNTIL(OOO1IlI0l0OI=PXSUCCESS)OR(OIO1O1II01l=CMNO);IF OOO1IlI0l0OI=PXSUCCESS THEN BEGIN YXZY:=
INPLINE^.YXZYX;UPDATESTATUS('Locked') END ELSE IF OOO1IlI0l0OI<>PXERR_RECLOCKED THEN ERRORBOX(OOO1IlI0l0OI)
END END END ELSE OOO1IlI0l0OI:=ZYXY^.GOTOREC(INPLINE^.YXZYX)END ELSE BEGIN YXZX:=0;YXZY:=0;
OOO1IlI0l0OI:=PXSUCCESS END;IF OOO1IlI0l0OI<>PXERR_RECLOCKED THEN ERRORBOX(OOO1IlI0l0OI);IF(OOO1IlI0l0OI
=PXERR_RECDELETED)OR(OOO1IlI0l0OI=PXERR_RECNOTFOUND)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS END;
LOCKREC:=OOO1IlI0l0OI END;FUNCTION TPXBDIALOG.UNLOCKREC:RETCODE;BEGIN IF(ZXYZ^.ENGINETYPE<>PXLOCAL)AND
(YXZX<>0)THEN BEGIN ZYXY^.UNLOCKRECORD(YXZX);YXZX:=0;YXZY:=0 END;UNLOCKREC:=ZYXY^.LASTERROR END
;PROCEDURE TPXBDIALOG.LOCKUPDATE(INPLINE:PPXBINPUTLINE);BEGIN IF YXZY<>INPLINE^.YXZYX THEN UNLOCKREC;IF YXZX=0
THEN UPDATESTATUS('Browse')ELSE UPDATESTATUS('Locked')END;FUNCTION TPXBDIALOG.WRITEFIELD
(INPLINE:PPXBINPUTLINE):RETCODE;VAR OIOl:EXTENDED;OOO1IlI0l0OI:RETCODE;BEGIN IF INPLINE^.YXZYX<>0 THEN
BEGIN OOO1IlI0l0OI:=ZYXY^.GOTOREC(INPLINE^.YXZYX);IF OOO1IlI0l0OI=PXSUCCESS THEN OOO1IlI0l0OI:=ZYXY^.
GETRECORD(ZYXY^.GENERICREC) END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.CLEAR;IF OOO1IlI0l0OI=PXSUCCESS THEN
BEGIN IF TRIMSTR(INPLINE^.DATA^)<>''THEN BEGIN IF INPLINE^.YXZZX=FLDDOUBLE THEN BEGIN VAL(TRIMSTR(INPLINE^.
DATA^),OIOl,OOO1IlI0l0OI);IF OOO1IlI0l0OI=0 THEN BEGIN IF((ABS(OIOl)>=PXBDOUBLEMIN)AND(ABS(OIOl)<=
PXBDOUBLEMAX))OR(OIOl=0.0)THEN OOO1IlI0l0OI:=ZYXY^.GENERICREC^.PUTDOUBLE(INPLINE^.YXZXY,OIOl)ELSE
OOO1IlI0l0OI:=PXERR_OUTOFRANGE END ELSE BEGIN INPLINE^.CURPOS:=OOO1IlI0l0OI-1;OOO1IlI0l0OI:=PXERR_DATACONV
END END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.PUTSTRING(INPLINE^.YXZXY,TRIMSTR(INPLINE^.DATA^))
END ELSE OOO1IlI0l0OI:=ZYXY^.GENERICREC^.SETNULL(INPLINE^.YXZXY);IF OOO1IlI0l0OI=PXSUCCESS THEN BEGIN IF
INPLINE^.YXZYX<>0 THEN OOO1IlI0l0OI:=ZYXY^.UPDATEREC(ZYXY^.GENERICREC)ELSE OOO1IlI0l0OI:=ZYXY^.APPENDREC
(ZYXY^.GENERICREC)END END;ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS;WRITEFIELD:=OOO1IlI0l0OI END;
PROCEDURE TPXBDIALOG.TABPOSLINE(INPLINE:PPXBINPUTLINE);VAR O10O0O01IO0l1,OIlO:INTEGER;
O10O0ll1OOllO,O10O0ll1OOlOO:PPXBINPUTLINE;O10O0ll1Ol001:PPXBFIELDNAME;BEGIN IF INPLINE^.YXZXY<>YXZXZ^.YXZXY THEN
BEGIN O10O0ll1Ol001:=YXZYY;FOR OIlO:=1 TO XYZYZ DO BEGIN O10O0ll1Ol001^.MOVETO(O10O0ll1Ol001^.XYZX.X-INPLINE
^.XYZZ.X,O10O0ll1Ol001^.XYZX.Y);PVIEW(O10O0ll1Ol001):=O10O0ll1Ol001^.PREV END;O10O0ll1OOllO:=YXZXZ^.
XYZYY;WHILE O10O0ll1OOllO^.EXPOSED DO BEGIN O10O0ll1OOlOO:=O10O0ll1OOllO^.XYZYY;FOR O10O0O01IO0l1:=1 TO XYZZY
DO BEGIN O10O0ll1OOlOO^.MOVETO(ZZXZ.X,O10O0ll1OOlOO^.XYZX.Y);O10O0ll1OOlOO:=O10O0ll1OOlOO^.XYZXX END;
IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=O10O0ll1OOllO^.PREVVIEW END;O10O0ll1OOllO:=
INPLINE^.XYZYY;OIlO:=0;REPEAT O10O0ll1OOlOO:=O10O0ll1OOllO^.XYZYY;FOR O10O0O01IO0l1:=1 TO XYZZY
DO BEGIN O10O0ll1OOlOO^.MOVETO(OIlO,O10O0ll1OOlOO^.XYZX.Y);O10O0ll1OOlOO:=O10O0ll1OOlOO^.XYZXX END;
OIlO:=OIlO+O10O0ll1OOllO^.XYZY.X+1;IF O10O0ll1OOllO^.PREVVIEW<>NIL THEN PVIEW(O10O0ll1OOllO):=
O10O0ll1OOllO^.PREVVIEW ELSE OIlO:=ZZXZ.X+1 UNTIL(OIlO >ZZXZ.X)OR(INPLINE^.YXZXY >=O10O0ll1OOllO^.YXZXY
)END END;PROCEDURE TPXBDIALOG.TOGGLEINS;VAR O10O0O01IO0l1,OIlO:INTEGER;O10O0ll1OOllO:PPXBINPUTLINE;
BEGIN O10O0ll1OOllO:=YXZZY;FOR O10O0O01IO0l1:=1 TO XYZZY DO FOR OIlO:=1 TO XYZYZ DO BEGIN IF(NOT O10O0ll1OOllO
^.GETSTATE(SFFOCUSED))AND(O10O0ll1OOllO^.YXZZX<>FLDBLOB)THEN IF O10O0ll1OOllO^.GETSTATE(SFCURSORINS)THEN
O10O0ll1OOllO^.SETSTATE(SFCURSORINS,FALSE)ELSE O10O0ll1OOllO^.SETSTATE(SFCURSORINS,TRUE);PVIEW(O10O0ll1OOllO
):=O10O0ll1OOllO^.PREV END END;PROCEDURE TPXBDIALOG.FIELDCHANGED(INPLINE:PPXBINPUTLINE);
VAR OOO1IlI0l0OI:RETCODE;BEGIN IF YXZZ<>INPLINE^.DATA^THEN BEGIN OOO1IlI0l0OI:=LOCKREC(INPLINE);IF(OOO1IlI0l0OI
<>PXSUCCESS)AND(OOO1IlI0l0OI<>PXERR_RECDELETED)AND(OOO1IlI0l0OI<>PXERR_RECNOTFOUND)THEN INPLINE^.SETDATA
(YXZZ)END END;PROCEDURE TPXBDIALOG.FIELDENTER(INPLINE:PPXBINPUTLINE);BEGIN YXZZ:=INPLINE^.DATA^;
TABPOSLINE(INPLINE);LOCKUPDATE(INPLINE)END;FUNCTION TPXBDIALOG.FIELDEXIT(INPLINE:PPXBINPUTLINE):BOOLEAN;
VAR OOO1IlI0l0OI:RETCODE;BEGIN YXZXZ:=INPLINE;IF YXZZ=INPLINE^.DATA^THEN FIELDEXIT:=TRUE ELSE BEGIN FIELDEXIT:=
(NOT ERRORBOX(WRITEFIELD(INPLINE)));ZYXY^.GOTOREC(YXZZY^.YXZYX);READFIELDS END END;
PROCEDURE TPXBDIALOG.GOTOHOME;BEGIN WITH ZYXY^DO BEGIN GOTOBEGIN;IF LASTERROR=PXSUCCESS THEN GOTONEXT END END
;PROCEDURE TPXBDIALOG.GOTOLAST;BEGIN WITH ZYXY^DO BEGIN GOTOEND;IF LASTERROR=PXSUCCESS THEN GOTOPREV END END
;PROCEDURE TPXBDIALOG.DOWNREAD(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.XYZXX<>NIL THEN INPLINE^.XYZXX^.
FOCUS ELSE IF INPLINE^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);ZYXY^.GOTONEXT;
READFIELDS END END;PROCEDURE TPXBDIALOG.UPREAD(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.XYZXY<>NIL THEN
INPLINE^.XYZXY^.FOCUS ELSE IF INPLINE^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);ZYXY^.
GOTOPREV;IF ZYXY^.LASTERROR=PXERR_STARTOFTABLE THEN GOTOHOME;READFIELDS END END;
PROCEDURE TPXBDIALOG.PAGEUPREAD;VAR OIlO:INTEGER;BEGIN IF ZZZX^.CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.
GOTOREC(YXZZY^.YXZYX);FOR OIlO:=1 TO XYZZY DO ZYXY^.GOTOPREV;IF ZYXY^.LASTERROR=PXERR_STARTOFTABLE THEN
GOTOHOME;READFIELDS END END;PROCEDURE TPXBDIALOG.PAGEDOWNREAD;VAR OIlO:INTEGER;BEGIN IF ZZZX^.CURRENT^.
VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOREC(YXZZY^.YXZYX);FOR OIlO:=1 TO XYZZY DO ZYXY^.GOTONEXT;IF ZYXY
^.LASTERROR=PXERR_ENDOFTABLE THEN GOTOLAST;READFIELDS END END;PROCEDURE TPXBDIALOG.HOMEREAD;BEGIN IF ZZZX^.
CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTOPREV;GOTOHOME;READFIELDS END END;
PROCEDURE TPXBDIALOG.ENDREAD;BEGIN IF ZZZX^.CURRENT^.VALID(CMRELEASEDFOCUS)THEN BEGIN ZYXY^.GOTONEXT;GOTOLAST;
READFIELDS END END;PROCEDURE TPXBDIALOG.COPYCLIP(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.SELEND >0 THEN
ZXYX:=COPY(INPLINE^.DATA^,INPLINE^.SELSTART+1,INPLINE^.SELEND-INPLINE^.SELSTART)END;
PROCEDURE TPXBDIALOG.PASTECLIP(INPLINE:PPXBINPUTLINE);VAR OIOI100IlI0:STRING;BEGIN IF INPLINE^.YXZZX<>FLDBLOB THEN
BEGIN IF BYTE(ZXYX [0])<=INPLINE^.MAXLEN THEN INPLINE^.SETDATA(ZXYX)ELSE BEGIN OIOI100IlI0:=COPY(ZXYX,1,
INPLINE^.MAXLEN);INPLINE^.SETDATA(OIOI100IlI0)END;FIELDCHANGED(INPLINE)END END;
PROCEDURE TPXBDIALOG.BLOBMEMOEDIT(INPLINE:PPXBINPUTLINE);VAR OOIl000I1:CHAR;OI110IlIOIO1:WORD;O101I1lllO0OO:LONGINT;
OOO0O1lIIOO1:PPXBMEMOREC;OOIIOOlOl0Il:PPXBMEMOEDIT;BEGIN ERRORBOX(ZYXY^.GENERICREC^.OPENBLOBREAD(INPLINE^.YXZXY,
TRUE));O101I1lllO0OO:=ZYXY^.GENERICREC^.GETBLOBSIZE(INPLINE^.YXZXY);IF O101I1lllO0OO< PXBMAXUMEMOSIZE THEN
BEGIN OOO0O1lIIOO1:=MEMALLOC(SIZEOF(TPXBMEMOREC));OOO0O1lIIOO1^.LEN:=O101I1lllO0OO;OOIIOOlOl0Il:=NEW
(PPXBMEMOEDIT,INIT);IF OOIIOOlOl0Il^.VALID(CMVALID)THEN BEGIN IF O101I1lllO0OO<>0 THEN BEGIN ZYXY^.GENERICREC
^.GETBLOB(INPLINE^.YXZXY,O101I1lllO0OO,0,@ OOO0O1lIIOO1^.DATA);OOIl000I1:=#0;FOR OI110IlIOIO1:=0 TO
O101I1lllO0OO-1 DO BEGIN IF(OOO0O1lIIOO1^.DATA [OI110IlIOIO1]=#10)AND(OOIl000I1<>#13)THEN BEGIN OOIl000I1:=
OOO0O1lIIOO1^.DATA [OI110IlIOIO1];OOO0O1lIIOO1^.DATA [OI110IlIOIO1]:=#13;END ELSE OOIl000I1:=OOO0O1lIIOO1^.
DATA [OI110IlIOIO1] END END;ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,FALSE);IF APPLICATION^.
EXECUTEDIALOG(OOIIOOlOl0Il,OOO0O1lIIOO1)<>CMCANCEL THEN BEGIN ZYXY^.GENERICREC^.OPENBLOBWRITE(INPLINE^.YXZXY
,OOO0O1lIIOO1^.LEN,FALSE);ZYXY^.GENERICREC^.PUTBLOB(INPLINE^.YXZXY,OOO0O1lIIOO1^.LEN,0,@
OOO0O1lIIOO1^.DATA);ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,TRUE);ZYXY^.UPDATEREC(ZYXY^.GENERICREC
);END;FREEMEM(OOO0O1lIIOO1,SIZEOF(TPXBMEMOREC)) END ELSE BEGIN ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY
,FALSE);FREEMEM(OOO0O1lIIOO1,SIZEOF(TPXBMEMOREC));DISPOSE(OOIIOOlOl0Il,DONE);APPLICATION^.OUTOFMEMORY
END END ELSE ZYXY^.GENERICREC^.CLOSEBLOB(INPLINE^.YXZXY,FALSE)END;PROCEDURE TPXBDIALOG.BLOBEDIT
(INPLINE:PPXBINPUTLINE);BEGIN IF(INPLINE^.YXZYX<>0)AND(INPLINE^.YXZZX=FLDBLOB)THEN BEGIN IF(LOCKREC(INPLINE
)=PXSUCCESS)AND(ZYXY^.GETRECORD(ZYXY^.GENERICREC)=PXSUCCESS)THEN CASE INPLINE^.YXZZZ OF FLDSTMEMO
:BLOBMEMOEDIT(INPLINE)ELSE MESSAGEBOX('This blob format not currently supported.',NIL,MFINFORMATION+MFOKBUTTON
)END END END;PROCEDURE TPXBDIALOG.DELETEREC(INPLINE:PPXBINPUTLINE);BEGIN IF INPLINE^.YXZYX<>0 THEN IF
LOCKREC(INPLINE)=PXSUCCESS THEN BEGIN ZYXY^.DELETEREC;UNLOCKREC;UPDATESTATUS('Delete');ZYXY^.GOTOREC(YXZZY^.
YXZYX);READFIELDS END END;PROCEDURE TPXBDIALOG.SIZELIMITS(VAR MIN,MAX:TPOINT);BEGIN INHERITED SIZELIMITS(MIN,
MAX);MIN.X:=MINWINSIZE.X;MIN.Y:=MINWINSIZE.Y;MAX.Y:=ZZXZ.Y END;PROCEDURE TPXBDIALOG.HANDLEEVENT
(VAR EVENT:TEVENT);VAR O1OO01l1lI0O:BOOLEAN;BEGIN CASE EVENT.WHAT OF EVKEYDOWN:BEGIN O1OO01l1lI0O:=TRUE;
CASE EVENT.KEYCODE OF KBTAB:ZZZX^.FOCUSNEXT(FALSE);KBSHIFTTAB:ZZZX^.FOCUSNEXT(TRUE);KBDOWN:DOWNREAD
(PPXBINPUTLINE(ZZZX^.CURRENT));KBUP:UPREAD(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLHOME:PPXBINPUTLINE(ZZZX^.
CURRENT)^.XYZXZ^.FOCUS;KBCTRLEND:PPXBINPUTLINE(ZZZX^.CURRENT)^.XYZYX^.FOCUS;KBPGDN:PAGEDOWNREAD;KBPGUP
:PAGEUPREAD;KBCTRLPGUP:HOMEREAD;KBCTRLPGDN:ENDREAD;KBENTER:BLOBEDIT(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLDEL
:DELETEREC(PPXBINPUTLINE(ZZZX^.CURRENT));KBCTRLINS:COPYCLIP(PPXBINPUTLINE(ZZZX^.CURRENT));KBSHIFTINS
:PASTECLIP(PPXBINPUTLINE(ZZZX^.CURRENT));KBINS:BEGIN TOGGLEINS;O1OO01l1lI0O:=FALSE END ELSE O1OO01l1lI0O:=
FALSE END;IF O1OO01l1lI0O THEN CLEAREVENT(EVENT)END;EVCOMMAND:BEGIN O1OO01l1lI0O:=TRUE;
CASE EVENT.COMMAND OF CMFIELDCHANGED:FIELDCHANGED(PPXBINPUTLINE(EVENT.INFOPTR));CMFIELDENTER:FIELDENTER
(PPXBINPUTLINE(EVENT.INFOPTR));CMFIELDEXIT:O1OO01l1lI0O:=FIELDEXIT(PPXBINPUTLINE(EVENT.INFOPTR))ELSE O1OO01l1lI0O
:=FALSE END;IF O1OO01l1lI0O THEN CLEAREVENT(EVENT)END END;INHERITED HANDLEEVENT(EVENT)END;
FUNCTION TPXBDIALOG.VALID(COMMAND:WORD):BOOLEAN;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0:=INHERITED VALID(COMMAND);
IF COMMAND=CMCLOSE THEN BEGIN IF FIELDEXIT(PPXBINPUTLINE(ZZZX^.CURRENT))THEN UNLOCKREC ELSE OIOI100IlI0:=FALSE;
END;VALID:=OIOI100IlI0 END;END.