CONST V20_s_ver='3.0'; V20_ver='2.4k'; V20_verdate='Jan 01 1990'; V20_maxboards=100; { 1 - x } V20_maxuboards=143; { 0 - x } V20_maxprotocols=120; { 0 - x } V20_maxevents=10; { 0 - x } { #0 is Nightly Events (if active) } V20_maxarcs=8; { 1 - x } V20_maxubatchfiles=20; V20_numvoteqs=20; V20_numvoteas=9; V20_maxmenucmds=50; TYPE V20_astr = string[160]; V20_acstring=string[20]; { Access Condition String } V20_acrq ='@'..'Z'; { AR flags } V20_uflags = (V20_rlogon, { L - Restricted to one call a day } V20_rchat, { C - Can't page the SysOp } V20_rvalidate, { - Posts marked unvalidated } V20_rbackspace, { - Can't do ^B/^N/etc in messages } V20_ramsg, { - Can't change the AutoMessage } V20_rpostan, { * - Can't post anonymously } V20_rpost, { P - Can't post at all } V20_remail, { E - Can't send any e-mail } V20_rvoting, { K - Can't vote } V20_rmsg, V20_spcsr, V20_onekey, { onekey input mode } V20_wordwrap, { UNUSED } V20_pause, { pause } V20_novice, { user is at novice help level } V20_ansi, { user has ANSI } V20_color, { user has color } V20_alert, {} V20_smw, { short-message waiting for user } V20_nomail, { user mail-box is closed } V20_fnodlratio, { 1 - No UL/DL ratio } V20_fnopostratio, { 2 - No post/call ratio } V20_fnofilepts, { 3 - No file points checking } V20_fnodeletion); { 4 - Protection from deletion } V20_anontyp = (V20_atno, { No anonymous posts allowed } V20_atyes, { Anonymous posts are allowed } V20_atforced, { ALL posts are forced anonymous } V20_atdearabby, { "Dear Abby" message base } V20_atanyname); { User's can post as ANY name they want } V20_clrs = array[FALSE..TRUE,0..9] of byte; { color records } V20_secrange= array[0..255] of integer; { security tables } cpackdatetime=array[1..6] of byte; V20_mzscanr = set of 1..V20_maxboards; V20_fzscanr = set of 0..V20_maxuboards; V20_mhireadr= array[1..V20_maxboards] of cpackdatetime; V20_dlnscan =set of 0..96; V20_messages= { message file name records } record ltr:char; { ("A") letter } number:integer; { ("-32767") number } ext:byte; { (".1") extension } end; V20_smalrec= { NAMES.LST : Sorted names listing } record name:string[36]; { user name } number:integer; { user number } end; V20_userrec= { USER.LST : User account records } record name:string[36]; { user name } realname:string[36]; { real name } pw:string[20]; { user password } ph:string[12]; { user phone # } bday:string[8]; { user birthdate } firston:string[8]; { firston date } x1xs :array[1..2] of byte; laston:string[8]; { laston date } x2xs :array[1..2] of byte; street:string[30]; { mailing address } citystate:string[30]; { city, state } zipcode:string[10]; { zipcode } computer:string[30]; { type of computer } occupation:string[40]; { occupation } wherebbs:string[40]; { BBS reference } note:string[39]; { SysOp note } lockedout:boolean; { if locked out } deleted:boolean; { if deleted } lockedfile:string[8]; { lockout msg to print } ac:set of V20_uflags; { user flags } ar:set of V20_acrq; { AR flags } zzqscan:array[1..64] of word; { last read msg pointers } xqxxx:array[1..64] of word; zzqscn:array[1..64] of boolean; { scan boards flags } zzdlnscn:V20_dlnscan; { scan uboards flags } vote:array[1..20] of byte; { voting data } sex:char; { user sex } ttimeon:longint; { total mins spent on } x1xx:integer; uk:longint; { UL k } x2xx:integer; dk:longint; { DL k } x3xx:integer; uploads,downloads, { # of ULs / # of DLs } loggedon, { # times logged on } tltoday, { # min left today } msgpost, { # public posts } emailsent, { # email sent } feedback, { # feedback sent } forusr, { forward mail to user # } filepoints:integer; { # of file points } waiting, { mail waiting } linelen, { line length (# cols) } pagelen, { page length (# rows) } ontoday, { # times on today } illegal, { # illegal logon attempts } sl,dsl:byte; { SL / DSL } cols:V20_clrs; { user colors } lastmsg,lastfil:byte; { last msg/file areas } credit:longint; { $$$ credit in dollars } x4xx:integer; timebank:integer; { # mins in Time Bank } boardsysop:array[1..5] of byte; { msg board SysOp } trapactivity, { if trapping users activity } trapseperate:boolean; { if trap to seperate TRAP file } timebankadd:integer; { time added to timebank TODAY } mpointer:longint; { pointer to entry in MACRO.LST } chatauto, { if auto chat trapping } chatseperate:boolean; { if seperate chat file to trap to } userstartmenu:string[8]; { menu to start user out on } slogseperate:boolean; { seperate SysOp log? } clsmsg:byte; { 1 if clear-screen msg, 2 if not } { NEW STUFF } flistopt:byte; { type of file list type to use } msgorder:byte; { 0:Chrono, 1:ReplyTree } { NEW STUFF *ENDS* } res:array[1..55] of byte; { RESERVED } end; V20_zscanrec= { ZSCAN.DAT : NewScan recs (file/msg) } record { ** b0..b3 } mhiread:V20_mhireadr; { NewScan high message pointers } mzscan:V20_mzscanr; { NewScan message bases } fzscan:V20_fzscanr; { NewScan file bases } end; V20_msgindexstatr= (V20_miexist, { does message actually exist? } V20_miencrypted, { is it encrypted? } V20_miunvalidated, { is message unvalidated? } V20_mipermanent, { is the message permanent? } V20_miallowmci, { DID owner have access to MCI? } V20_mithreads, { is message referenced? (threaded) } V20_mimassmail); { is it private, mass mail? } V20_msgindexrec= { *.MIX : Message index records } record messagenum:word; { message number, tonum in EMAIL.MIX } hdrptr:longint; { pointer to message header } msgindexstat:set of V20_msgindexstatr; { status flags } msgid:word; { id: permanent random -- 0..65535 } msgdate:array[1..6] of byte; { id: original date/time } msgdowk:byte; { id: original day-of-week (0=Sun ...) } lastdate:array[1..6] of byte; { update: date/time } lastdowk:byte; { update: day-of-week } isreplyto, { reply this message is to (-1=None) } numreplys:word; { number of replys to THIS message } end; V20_fromtoinfo= { from/to information for mheaderrec } record anon:byte; { anonymous type } usernum:word; { user number } as:string[60]; { given name for this case } real, { user real name } alias:string[36]; { user alias } end; V20_mheaderrec= { *.BRD : Message header records } record signature, { header signature - $ABCD0123 } msgptr:longint; { pointer to actual message text } isreplyto_iddate:array[1..6] of byte; { isreplyto id date - for NetMail } isreplyto_idrand:word; { isreplyto id randomid } title:string[60]; { title of message } fromi, { from information } toi:V20_fromtoinfo; { to information } originsite:string[60]; { site of *original* origin } end; V20_mtreerec= { *.TRE : Message reply-tree records } record messagerunning, { message number, running } messagenum:word; { actual message number in *.MIX } ilevel:byte; { indent level - for replys } isreplyto, { reply this message is to (-1=None) } numreplys:word; { number of replys to THIS message } msgdate:array[1..6] of byte; { message id date } msgdowk:byte; { message day-of-week } end; V20_msgstat= (V20_validated, { validated } V20_unvalidated, { unvalidated } V20_deleted, { deleted } V20_permanentpost, { post is permanent } V20_mciallowed, { owner of post has access to MCI } V20_anonymouspost, { post is anonymous (any type) } V20_sysopanonymous); { anonymous post made by SysOp } V20_messagerec= { *.BRD : Public message records } record title:string[50]; { title of message } messagestat:set of V20_msgstat; { message status } message:V20_messages; { message filename } owner, { from user # } date, { date of message } nacc:integer; { number of times read } end; V20_mailrec= { EMAIL.DAT : Private mail records } record title:string[30]; { title of e-mail } from, { from user # } destin:integer; { to user # } msg:V20_messages; { message filename } date:integer; { date of message } mage:byte; { max days message can exist } end; V20_zlogrec= { ZLOG.DAT : System log } record date:string[8]; userbaud:array[0..4] of integer; active,calls,newusers,pubpost,privpost,fback,criterr:integer; uploads,downloads:integer; uk,dk:longint; end; V20_filearcinforec= { Archive configuration records } record active:boolean; { whether this archive format is active } ext:string[3]; { 3-chr file extension } listline, { /x for internal; x: 1=ZIP, 2=ARC/PAK, 3=ZOO, 4=LZH } arcline, { compression cmdline } unarcline, { de-compression cmdline } testline, { integrity test cmdline, '' for *None* } cmtline:string[25]; { comment cmdline, '' for *None* } succlevel:integer; { success ERRORLEVEL, -1=ignore results } end; V20_modemrec= record waitbaud:word; { wait baud } comport:byte; { comport number } init:string[80]; { initialization string } answer:string[40]; { answer string } hangup:string[40]; { hangup string } offhook:string[40]; { phone off-hook string } nocallinittime:integer; { reinit modem after x mins of inactivity } arq9600rate:word; { baud rate to USE when 9600 ARQ result code } noforcerate:boolean; { whether to force baud rate} nocarrier:integer; { no carrier result code } nodialtone:integer; { no dialtone result code } busy:integer; { busy result code } resultcode:array[1..2,0..4] of integer; {**-Result codes-** } ctschecking, dsrchecking, usexonxoff, hardwired:boolean; end; V20_fstringrec= record ansiq:string[80]; { "Do you want ANSI? " string } note:array[1..2] of string[80]; { Logon notes (L #1-2) } lprompt:string[80]; { Logon prompt (L #3) } echoc:char; { Echo char for PWs } sysopin, { "SysOp In" (inside SysOp hours)} sysopout, { "SysOp Out" } engage, { "Engage Chat" } endchat, { "End Chat" } wait, { "SysOp Working" } pause, { "Pause" } entermsg1, { "Enter Message" line #1 } entermsg2, { "Enter Message" line #2 } newscan1, { "NewScan begin" } newscan2, { "NewScan done" } scanmessage, { Message scanning prompt } automsgt:string[80]; { Auto-Message title } autom:char; { Auto-Message border characters } shelldos1, { " >> SysOp shelling to DOS ..." } shelldos2, { " ... thank you for waiting." } chatcall1, { "Paging SysOp, please wait..." } chatcall2, { ">>><*><<<" } guestline, { "To be a guest ... " } namenotfound, { "Name NOT found in user list." } bulletinline, { Bulletin line } thanxvote, { "Thanks for voting" } listline, { "List files - P to pause" } newline, { "Search for new files -" } searchline, { "Search all dirs for file mask" } findline1, { "Search for descriptions... " } findline2, { "Enter the string to search for.." } downloadline, { "Download - " } uploadline, { "Upload - " } viewline, { "View interior files - " } nofilepts, { "Insufficient file points." } unbalance, { "Your UL/DL ratio is unbalanced" } pninfo, { "P to Pause, N for next dir" } gfnline1, { "[Enter]=All files" } gfnline2, { "File mask: " } batchadd:string[80]; { "File added to batch queue." } end; V20_systatrec= record gfilepath:string[79]; { GFILES path } afilepath:string[79]; { AFILES path (text files path) } menupath:string[79]; { MENUS path } trappath:string[79]; { LOG path (traps, chats, SysOp logs) } msgpath:string[79]; { MSG path (priv/pub mail path) } tfilepath:string[79]; { TFILES path } temppath:string[79]; { TEMP path - "temp" directory } bbsname:string[80]; { BBS name } bbsphone:string[12]; { BBS phone number } sysopname:string[30]; { SysOp's full name or alias } maxusers, { max number of users system can have } lowtime, { SysOp begin minute (in minutes) } hitime, { SysOp end time } dllowtime, { normal downloading hours begin.. } dlhitime:integer; { ..and end } shuttlelog, { is Shuttle Logon active? } lock300:boolean; { lock out 300 baud? } sysoppw, { SysOp PW } newuserpw, { newuser PW (or NULL if none) } shuttlepw:string[20]; { Shuttle PW (if Shuttle active) } b300lowtime, { 300 baud calling hours begin.. } b300hitime, { ..and end } b300dllowtime, { 300 baud downloading hours begin.. } b300dlhitime:integer; { ..and end } closedsystem:boolean; { DON'T allow new users? } snowchecking:boolean; { is snow checking on? } eventwarningtime:integer; { time before event warning } tfiledate:string[8]; { last date text-files were inserted } hmsg:V20_messages; { highest message pointer } res1:array[1..20] of byte; { RESERVED SPACE #1 } sop, { SysOp } csop, { Co-SysOp } msop, { Message SysOp } fsop, { File SysOp } spw, { SysOp PW at logon } seepw, { see SysOp PWs remotely } normpubpost, { make normal public posts } normprivpost, { send normal e-mail } anonpubread, { see who posted public anon } anonprivread, { see who sent anon e-mail } anonpubpost, { make anon posts } anonprivpost, { send anon e-mail } seeunval, { see unvalidated files } dlunval, { DL unvalidated files } nodlratio, { no UL/DL ratio } nopostratio, { no post/call ratio } nofilepts, { no file points checking } ulvalreq:V20_acstring; { uploads require validation by SysOp } res2:array[1..100] of byte; { RESERVED SPACE #2 } maxprivpost, { max e-mail can send per call } maxfback, { max feedback per call } maxpubpost, { max posts per call } maxchat, { max chat-pages per call } maxwaiting, { max mail in mail-box } csmaxwaiting, { max mail in mail-box for Co-SysOp + } maxlines, { max lines in message } csmaxlines, { max lines in message for Co-SysOp + } maxlogontries, { tries allowed for PW's at logon } bsdelay, { backspacing delay } sysopcolor, { SysOp color in chat mode } usercolor:byte; { user color in chat mode } minspaceforpost, { minimum K drive space left to post } minspaceforupload:integer; { minimum K drive space left to upload } backsysoplogs, { days to keep SYSOP##.LOG } wfcblanktime:byte; { minutes after which to blank WFC menu } res3:array[1..20] of byte; { RESERVED SPACE #3 } specialfx, { WFC menu "special effects" } fossil, { make use of FOSSIL comm driver } allowalias, { allow alias's? (handles) } phonepw, { use phone number password in logon? } localsec, { is local security ON? } localscreensec, { is local screen-security ON? } globaltrap, { trap ALL USER'S activity? } autochatopen, { does chat buffer auto-open? } autominlogon, { Auto-Message in logon? } bullinlogon, { bulletins in logon? } lcallinlogon, { "Last Few Callers" list in logon? } yourinfoinlogon, { "Your Info" in logon? } multitask, { is BBS multitasking? } offhooklocallogon, { take phone off-hook for local logons? } forcevoting, { is manditory logon voting active? } compressbases, { "compress" file/message base numbers? } searchdup:boolean; { search for dup. filenames when UL? } slogtype:byte; { SysOp log type: File/Printer/Both } stripclog:boolean; { strip colors from SysOp log output? } newapp, { user# to send new user application to } guestuser, { user# of guest user account } timeoutbell, { minutes before time-out bell } timeout:integer; { minutes before timeout (logoff) } usewfclogo:boolean; { whether to use WFC menu logo } res4:array[1..19] of byte; { RESERVED SPACE #4 } filearcinfo:array[1..V20_maxarcs] of V20_filearcinforec; { archive specs } filearccomment:array[1..3] of string[80]; { BBS comments for archives } uldlratio, { are UL/DL ratios active? } fileptratio:boolean; { is auto file-pt compensation active? } fileptcomp, { file point compensation ratio } fileptcompbasesize, { file point "base compensation size" } ulrefund, { percent time refund for ULs } tosysopdir:byte; { "To SysOp" file base } validateallfiles:boolean; { validate ALL FILES automatically? } remdevice:string[10]; { remote output device (GATEx,COMx,etc) } maxintemp, { max K allowed in TEMP\3\ } minresume:integer; { min K to allow resume-later } maxdbatch, { max files in DL batch queue } maxubatch:byte; { max files in UL batch queue } res5:array[1..30] of byte; { RESERVED SPACE #5 } newsl, { newuser SL } newdsl:byte; { newuser DSL } newar:set of V20_acrq; { newuser AR } newac:set of V20_uflags; { newuser AC } newfp:integer; { newuser file points } autosl, { auto-validation SL } autodsl:byte; { auto-validation DSL } autoar:set of V20_acrq; { auto-validation AR } autoac:set of V20_uflags; { auto-validation AC } allstartmenu:string[8]; { logon menu to start ALL users on } chatcfilter1, { SysOp chat color-filter } chatcfilter2:string[12]; { user chat color-filter } bulletprefix:string[8]; { default bulletins filename prefix } res6:array[1..15] of byte; { RESERVED SPACE #6 } timeallow, { time allowance } callallow, { call allowance } dlratio, { # ULs/# DLs ratios } dlkratio, { DLk/ULk ratios } postratio:V20_secrange; { post/call ratios } lastdate:string[8]; { last system date } curwindow:byte; { type of SysOp window currently in use } istopwindow:boolean; { is SysOp window on top of screen? } callernum:longint; { total number of callers } numusers:integer; { number of users } todayzlog:V20_zlogrec; { TODAY's ZLOG record } postcredits:integer; {file points/upload credit compensation for posts} rebootforevent:boolean; { reboot before events? } watchdogdoor:boolean; { Telegard WatchDog active in doors? } windowon:boolean; res:array[1..199] of byte; {((((((>>> RESERVED <<<))))))} end; V20_tbflags= (V20_tbunhidden, { whether *VISIBLE* to users w/o access } V20_tbnetlink, { whether Net-Linked to other Telegards } V20_tbisdir); { if a text-file base directory } V20_tfilerec= { GFILES.DAT : Text-file records } record title:string[40]; { title } filen:string[12]; { filename } gdate:string[8]; { date of Tfile / Tfile base } gdaten:integer; { numeric date for fast calculation } acs, { access requirement } ulacs:V20_acstring; { upload to base access requirement } tbstat:set of V20_tbflags; { text-file base status vars } permindx:longint; { permanent index # } tbdepth:integer; { tfile base dir depth } res:array[1..4] of byte; { RESERVED } end; V20_smr= record msg:V20_astr; destin:integer; end; V20_vdatar= { VOTING.DAT : Voting records } record question:string[79]; { voting question } numa:integer; { number of user's who have answered } answ:array[0..V20_numvoteas] of record ans:string[40]; { answer description } numres:integer; { # user's who picked this answer } end; end; V20_mbflags= (V20_mbunhidden, { whether *VISIBLE* to users w/o access } V20_mbrealname, { whether real names are forced } V20_mbisdir, { if a message base directory } V20_mbmsgpath); { if *.BRD file stored in MSGPATH } (* V20_boardrec= { MBASES.DAT : Message base records } record { ** b133..135 (assumes b132=$FC) } name:string[40]; { message base description } filename:string[12]; { filename of data files } acs, { access requirement } postacs, { post access requirement } mciacs:V20_acstring; { MCI usage requirement } maxmsgs:word; { max message count } anonymous:V20_anontyp; { anonymous type } password:string[20]; { base password } mbstat:set of V20_mbflags; { message base status vars } permindx:longint; { permanent index # } echoname:string[8]; { message base echo name } { dirs, { base-directory "sibling" }} { dirp:longint; { base-directory "parent" }} dataver:array[1..3] of byte; { version of data file } end; *) V20_boardrec= { BOARDS.DAT : Message base records } record name:string[40]; { message base description } filename:string[12]; { BRD/MIX/TRE data filename } msgpath:string[40]; { messages pathname } acs, { access requirement } postacs, { post access requirement } mciacs:V20_acstring; { MCI usage requirement } maxmsgs:word; { max message count } anonymous:V20_anontyp; { anonymous type } password:string[20]; { base password } mbstat:set of V20_mbflags; { message base status vars } permindx:longint; { permanent index # } mbtype:integer; { base type (0=Local, 1=FidoNet) } res:array[1..4] of byte; { RESERVED } end; V20_fbflags= (V20_fbnoratio, { if active } V20_fbunhidden, { whether *VISIBLE* to users w/o access } V20_fbdirdlpath, { if *.DIR file stored in DLPATH } V20_fbisdir, { if a file base directory } V20_fbusegifspecs, { whether to use GifSpecs } V20_fbnetlink); { whether Net-Linked to other Telegards } V20_ulrec= { UPLOADS.DAT : File base records } record name:string[40]; { area description } filename:string[12]; { filename + ".DIR" } dlpath, { download path } ulpath:string[40]; { upload path } maxfiles:integer; { max files allowed } password:string[20]; { password required } arctype, { wanted archive type (1..maxarcs,0=inactive) } cmttype:byte; { wanted comment type (1..3,0=inactive) } fbdepth:integer; { file base dir depth } fbstat:set of V20_fbflags; { file base status vars } acs, { access requirements } ulacs, { upload requirements } nameacs:V20_acstring; { see-names requirements } permindx:longint; { permanent index # } res:array[1..6] of byte; { RESERVED } end; V20_filstat= (V20_notval, { if file is NOT validated } V20_isrequest, { if file is REQUEST } V20_resumelater); { if file is RESUME-LATER } V20_ulfrec= { *.DIR : File records } record filename:string[12]; { Filename } description:string[60]; { File description } filepoints:integer; { File points } nacc:integer; { Number DLs } ft:byte; { File type (useless?) } blocks:integer; { # 128 byte blks } owner:integer; { ULer of file } stowner:string[36]; { ULer's name } date:string[8]; { Date ULed } daten:integer; { Numeric date ULed } vpointer:longint; { Pointer to verbose descr, -1 if none } filestat:set of V20_filstat; { File status } res:array[1..10] of byte; { RESERVED } end; V20_verbrec= { VERBOSE.DAT : Verbose descriptions } record descr:array[1..4] of string[50]; end; V20_lcallers= { LASTON.DAT : Last few callers records } record callernum:integer; { system caller number } name:string[36]; { user name of caller } number:integer; { user number of caller } citystate:string[30]; { city/state of caller } end; V20_eventrec= { EVENTS.DAT : Event records } record active:boolean; { whether active } description:string[30]; { event description (for logs) } etype:char; { A:CS, C:hat, D:os call, E:xternal } execdata:string[20]; { errorlevel if "E", commandline if "D" } busytime:integer; { off-hook time before; 0 if none } exectime:integer; { time of execution } busyduring:boolean; { busy phone DURING event? } duration:integer; { length of time event takes } execdays:byte; { bitwise execution days or day of month if monthly } monthly:boolean; { monthly event? } end; V20_macrorec= { MACROS.LST : Macro records } record macro:array[1..4] of string[240]; end; V20_mnuflags= (V20_clrscrbefore, { C: clear screen before menu display } V20_dontcenter, { D: don't center the menu titles! } V20_nomenuprompt, { N: no menu prompt whatsoever? } V20_forcepause, { P: force a pause before menu display? } V20_autotime); { T: is time displayed automatically? } V20_menurec= { *.MNU : Menu records } record menuname:array[1..3] of string[100]; { menu name } directive, { help file displayed } tutorial:string[12]; { tutorial help file } menuprompt:string[120]; { menu prompt } acs:V20_acstring; { access requirements } password:string[15]; { password required } fallback:string[8]; { fallback menu } forcehelplevel:byte; { forced help level for menu } gencols:byte; { generic menus: # of columns } gcol:array[1..3] of byte; { generic menus: colors } menuflags:set of V20_mnuflags; { menu status variables } end; V20_cmdflags= (V20_hidden, { H: is command ALWAYS hidden? } V20_unhidden); { U: is command ALWAYS visible? } V20_commandrec= { *.MNU : Command records } record ldesc:string[70]; { long command description } sdesc:string[35]; { short command description } ckeys:string[14]; { command-execution keys } acs:V20_acstring; { access requirements } cmdkeys:string[2]; { command keys: type of command } mstring:string[50]; { MString: command data } commandflags:set of V20_cmdflags; { command status variables } end; V20_xbflags= (V20_xbactive, V20_xbisbatch, V20_xbisresume, V20_xbxferokcode); V20_protrec= record xbstat:set of V20_xbflags; { protocol flags } ckeys:string[14]; { command keys } descr:string[40]; { description } acs:V20_acstring; { access string } templog:string[25]; { temp. log file } uloadlog,dloadlog:string[25]; { permanent log files } ulcmd,dlcmd:string[78]; { UL/DL commandlines } ulcode,dlcode:array [1..6] of string[6]; { UL/DL codes } envcmd:string[60]; {B}{ environment setup cmd } dlflist:string[25]; {B}{ DL file lists } maxchrs:integer; { max chrs in cmdline } logpf,logps:integer; {B}{ pos in log file for data } permindx:longint; { permanent index # } res:array[1..11] of byte; { RESERVED } end; V20_datetimerec= record day,hour,min,sec:longint; end; V20_cfilterrec=array[0..255] of byte; { color filter record }