Record work

This commit is contained in:
mysticbbs 2012-03-25 12:43:12 -07:00
parent a4ab7a1990
commit 74156a71c0
7 changed files with 372 additions and 337 deletions

View File

@ -4089,3 +4089,7 @@
Upgrade option.
+ Added CARDINAL (Unsigned 32-bit Integer) type to MPL
+ MPLC and MIDE now calculate the error position in the file (line and
column) after the error has occured. This takes a little bit of time
but it ensures that the column/line error position is accurate.

View File

@ -14,7 +14,7 @@
# Note: the DF MCI code can also be used to display files in place of
# prompts.
000 |DFpreuser |CR|01[|10þ|01] |09Enter your user name:
000 |DFpreuser |CR|01[|10þ|01] |09Enter your user name: |XX
; Log in as new user prompt
001 |CR|12Create an account with this BBS? |11
; User's password
@ -22,17 +22,17 @@
; User login: Invalid PW
003 |CR|12Invalid password.
; Displayed IMMEDATELY when a user connects if the password is set
004 |CRSystem Password:
004 |CRSystem Password: |XX
; New user password prompt
005 |CRNew User Password:
005 |CRNew User Password: |XX
; New user login: first and last name prompt
006 |01[|10þ|01] |09Enter your full REAL name ->
006 |01[|10þ|01] |09Enter your full REAL name -> |XX
; Displayed if user doesn't enter a two word name.
007 |CR|12Please enter your first AND last name!|CR
; Displayed if user enters a new user name that already exists.
008 |CR|12User already exists.|CR
; New user login: Enter your handle/alias prompt
009 |01[|10þ|01] |09Enter your alias/handle ->
009 |01[|10þ|01] |09Enter your alias/handle -> |XX
; New user login: Enter your address prompt
010 |CR|03Enter your street address.|CR|09:
; New user login: Enter your city/state
@ -44,21 +44,21 @@
; New user login: Enter your data phone number
014 |CR|03Enter your data phone number:|CR|09:
; New user login: Enter your birthdate.
015 |01[|10þ|01] |09Enter your birthdate |01[|10|UF|01]|09 ->
015 |01[|10þ|01] |09Enter your birthdate |01[|10|UF|01]|09 -> |XX
; New user login: Gender (M)ale, (F)emale
016 |01[|10þ|01] |09Are you |01[|10M|01]|09ale or |01[|10F|01]|09emale ->
016 |01[|10þ|01] |09Are you |01[|10M|01]|09ale or |01[|10F|01]|09emale -> |XX
; New user login: Password prompt
017 |DFprepass |CR|01[|10þ|01] |09Password ->
017 |DFprepass |CR|01[|10þ|01] |09Password -> |XX
; Displayed if user enters a password shorter than 4 chars.
018 |CR|12Password must be at least 4 characters long!|DE|DE|DE
; New user login: PW verification prompt
019 |01[|10þ|01] |09Again ->
019 |01[|10þ|01] |09Again -> |XX
; New user login: Passwords do not match
020 |CR|12Passwords do not match!|DE|DE|DE
; New user login: Saving/creating new user account
021 |CR|01[|10þ|01] |09Saving new account information|01...
; System pause prompt
022 !go-pawz
022 |15þ|07þ|08þ|09|17Ý|15 Pause |09Þ|16|08þ|07þ|15þ
; Chat call - reason for chat
023 |CR|14Why do you wish to chat with the Sysop?|CR|09:
; Paging Sysop text
@ -80,7 +80,7 @@
; User list footer &1 = Total # of users listed
031 |09|$D73Ä|CR |01[|10þ|01] |09Users: |07|$R46|&1 |PA
; User list search string
032 |CR|01[|10þ|01] |09Enter Search String |01(|07Enter|01/|07All|01)|09:
032 |CR|01[|10þ|01] |09Enter Search String |01(|07Enter|01/|07All|01)|09: |XX
; File base list header
033 |CL|09Ú|$D77Ä|01¿|CR|09³|17 ± |15File Base Listing|$L56|FG |01|16³|CR|09À|01|$D77ÄÙ|CR |10A|02rea |10F|02ile |10B|02ase |10N|02ame |10A|02rea |10F|02ile |10B|02ase |10N|02ame|CR |09|$D77Ä
; File base listing format:
@ -89,7 +89,7 @@
; File upload testing FAILED text
035 Failed
; File base listing prompt.
036 |09|$D77Ä|CR |01[|10þ|01] |09Select file base |01[|10?|01/|10List|01]|09:
036 |09|$D77Ä|CR |01[|10þ|01] |09Select file base |01[|10?|01/|10List|01]|09: |XX
; Displayed if there are no available file bases
037 |CR|12There are no available file bases
; Displayed if user hasn't selected a file base
@ -126,7 +126,7 @@
; Displayed if batch queue is empty
052 |CL |15There are no files in your batch queue
; &1 = number of files in batch queue
053 |CR |09Delete which |01(|071|01-|07|&1|01)|09:
053 |CR |09Delete which |01(|071|01-|07|&1|01)|09: |XX
; Batch removed from queue &1 = Filename &2 = Size
054 |CR|15|&1 |08(|07|&2 bytes|15|08) |07removed from queue.
; File upload PASSED text
@ -149,8 +149,8 @@
063 |CR|12Cannot download files in local mode!|DE|DE|DE
064 |01[|10þ|01] |09Search all file groups? |11
065 |CR|12Start your transfer now.
066 UNUSED
067 UNUSED
066 |CR|14File area "|FB" is password protected.|CR|09Password: |XX
067 |CR|12Access denied.
068 |CR|12You do not have access to upload here!
069 |CR|12Illegal filename.|DE|DE|DE
070 |CR|14Searching for duplicate files ...
@ -192,7 +192,7 @@
; &1 = base number &2 = base name &3 = scan base? (Yes or No)
093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
094 |CR|12There are no available message bases!
095 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit:
095 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
; For strings 096 - 099: &1 = message base name
096 |CR |11|&1 will NOT be scanned in QWK packets!|CR
097 |CR |11|&1 will be scanned in QWK packets!|CR
@ -202,9 +202,9 @@
; Message base format list:
; &1 = base number &2 = base name &3 = total messages
101 |15|$L05|&1 |07|$R32|&2
102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09:
103 UNUSED
104 UNUSED
102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09: |XX
103 |CR|14Message area "|MB" is password protected.|CR|09Password: |XX
104 Access denied.
105 |CR|12You don't have access to post here!
106 |CR|12Use the full screen editor? |11
107 |01[|10þ|01] |09Saving Message|01...
@ -219,13 +219,13 @@
; E-mail reader prompt
115 |CR|09(A)gain, (P)revious, (N)ext, (R)eply, (D)elete, (J)ump, (Q)uit?
; Message read prompt. &1 = Current Msg # &2 = Total Messages
116 !to-prmpt MESSAGE
116 |CR (|&1 of |&2) Reading Messages (?/Help): |XX
117 |CR|12Delete this mail? |11
118 |CR|15End of messages.
; Post message TO:
119 |CR|09To:
119 |CR|09To: |XX
; post message SUBJ:
120 |CR|09Subject:
120 |CR|09Subject: |XX
; Files still in batch. &1 = # of files
121 |CR|BE|14There are |15|&1 |14file(s) in your batch queue.|CR|12Download them now? |11
122 |09Saved
@ -255,7 +255,7 @@
; Who's online list format:
; &1 = node number &2 = user name &3 = action &4 = location
; &5 = baud rate &6 = gender &7 = age &8 = available?
139 |07|$R02|&1 |15|$R14|&2|$R30|07|&3
139 |07|$R05|&1 |15|$R26|&2 |12|&3
; Who's online list footer
140 |09|$D77Ä|CR |PA
; Last 10 callers list header
@ -265,23 +265,23 @@
; &6 = Baud &8 = Address &9 = Usernote &0 = Email &A-&C = Optional 1-3
142 |15|$R27|&1 |07|$R25|&3 |$L04|&2 |&4 |&5
; Last 10 callers footer
143 |09|$D77Ä|CR|PA
143 |09 |$D77Ä|CR|PA
; Message from another node:
; &1 = Message from &2 = Node user is logged in to.
144 |CR|14Message from |&1 on node |&2:|10
144 |CL|09|17 ° |15Message from |14|&1 |15on node |14|&2|[K|03|16|CR
; Message from another node footer
145 |CR|09NodeMsg: (R)eply or (ENTER/Continue): |15
146 |CR|09Send message to which node |01[|10?|01/|10List|01]|09:
145 |CR|09Node Message: |01[|10R|01]|09eply or |01[|10ENTER|01/|10Continue|01]|09: |15
146 |CR|09Send message to which node |01[|10?|01/|10List|01]|09: |XX
147 |CR|12No one is logged in on that node!
; Send message to node prompt:
; &1 = receiver's name &2 = receiver's node number
148 |CR|07Enter messsage for |15|&1 |07on node |15|&2|07:
149 |CR|12You don't have access to this menu!|CR|CR|PA
150 |CR|09Enter Menu Password:
151 |CR|09Enter your current password:
150 |CR|09Enter Menu Password: |XX
151 |CR|09Enter your current password: |XX
152 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07
; &1 = def. page length
153 |CR|01[|10þ|01] |09Screen Pause Length |01[|10Enter|01/|10|&1|01]:
153 |CR|01[|10þ|01] |09Screen Pause Length |01[|10Enter|01/|10|&1|01]: |XX
154 |CR|11(|030|08) |09Ascii (No Color)|CR|11(|031|08) |09Ansi (Color)|CR|CR|09Graphics Mode |08-> |07
; User name search
; &1 = User's Name
@ -289,8 +289,8 @@
156 |CR|15User not found.|DE|DE|DE
157 |CR|12You've reached your calls per day limit. Call back tomorrow!|CR|CR|PA
158 |CR|15No quote data available...
159 |CR|09Enter first line to quote:
160 |09Enter last line to quote :
159 |CR|09Enter first line to quote: |XX
160 |09Enter last line to quote : |XX
; Email reply: not valid user. &1=username
161 |CR|11|&1 is not a valid user on this system.
; &1 = maximum length of each line &2 = maximum number of lines
@ -300,7 +300,7 @@
; Line editor "backing up to line". &1 = new line number
165 |15Backing up to line |&1.|03
; Line editor "command" prompt.
166 |CR|09Command |01[|10?|01/|10Help|01]|09:
166 |CR|09Command |01[|10?|01/|10Help|01]|09: |XX
; Line editor "command" prompt help
167 |CR|03(|11A|03)bort Message (|11C|03)ontinue Message (|11U|03)pload Message|CR(|11Q|03)uote Message (|11S|03)ave Message (|11H|03)elp|CR(|11T|03)itle Change
168 |CR|12Abort message? |11
@ -308,9 +308,9 @@
; Archive list format:
; &1 = archive number &2 = archive name &3 = archive extension
170 |15|$R02|&1 |10|$R22|&2 |11|&3
171 |09|$D30Ä|CR|01[|10þ|01] |09Select Archive #:
172 |CR|09Deposit how many minutes |01[|100|01-|10|TL|01]|09:
173 |CR|09Withdraw how many minutes |01[|100|01-|10|TB|01]|09:
171 |09|$D30Ä|CR|01[|10þ|01] |09Select Archive #: |XX
172 |CR|09Deposit how many minutes |01[|100|01-|10|TL|01]|09: |XX
173 |CR|09Withdraw how many minutes |01[|100|01-|10|TB|01]|09: |XX
; Message group list header
174 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15Message Groups|$D37 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10M|02essage |10G|02roup |10N|02ame|07|$D24 |02A|10reas|CR|$D14 |09|$D54Ä
; Message group list format
@ -318,7 +318,7 @@
175 |$D14 |07|$R04|&1 |15|$R41|&2 |12|&3
176 |CR|12There are no available message groups.
; Message group list prompt
177 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select Message Group |01[|10Enter|01/|101|01]|09:
177 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select Message Group |01[|10Enter|01/|101|01]|09: |XX
178 |CR|12Send E-mail to the Sysop? |11
; 179-180 are System broadcast messages header/footer
; &1 = User who sent system broadcast
@ -333,7 +333,7 @@
; &1 = language number &2 = language description
183 |15|$R03|&1|14|&2
; Language select footer
184 |CR|09Select language:
184 |CR|09Select language: |XX
; Language file does not exist
185 |CR|12Language file does not exist.
; Displayed if user's language does not exist.
@ -368,7 +368,7 @@
; &1 = File base number &2 = File base name &3 = Scan? (Yes or No)
201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
; Select scanned file bases prompt
202 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit:
202 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
; &1 = File base name
203 |CR |11|&1 will NOT be scanned in new file scan!|CR
; &1 = File base name
@ -376,7 +376,7 @@
; Displayed if file already exists when user trys to upload.
205 File already exists.
; Displayed before running uploads processor
206 |12þ |03Testing file for errors :
206 |12þ |03Testing file for errors : |XX
; File description input line. &1 = Line number
207 |09:
; Default file description if none entered/found.
@ -391,7 +391,7 @@
; Lightbar file list: Access to file denied.
212 |12File is not available.|PN
; Read Message personal prompt. &1 = Current Msg # &2 = Total Messages
213 !to-prmpt MESSAGE
213 |CR|09[|&1 of |&2] Reading Messages (?/Help): |XX
; File group list header
214 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15File Groups|$D40 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10F|02ile |10G|02roup |10N|02ame|07|$D29 |02A|10reas|CR|$D14 |09|$D54Ä
; File group list format
@ -400,7 +400,7 @@
; Displayed if there are no available file groups
216 |CR|12There are no available file groups.
; File group list prompt
217 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select File Group |01[|10Enter|01/|101|01]|09:
217 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select File Group |01[|10Enter|01/|101|01]|09: |XX
; nodechat private text: &1 = user name
218 |02<|10|&1 |02private|02> |07
; Displayed when creating a new files list
@ -458,14 +458,14 @@
; There are no voting questions.
243 |12Sorry, there are no voting questions.
; Voting booth prompt &1 = Total number of questions
244 |08|$D79Ä|CR|09Vote on which question (1-|&1, or Enter/Quit):
244 |08|$D79Ä|CR|09Vote on which question (1-|&1, or Enter/Quit): |XX
; Voting on question header &1 = Question
245 |CL|08|$D79Ä|CR|14Question: (* = Current Vote)|CR|12|&1|CR|08|$D79Ä
; Voting on question list format
; &1 = Answer # &2 = Answer text &3 = Current Answer?
246 |12|&3 |09(|10|$R02|&1|09) |03|&2
; Voting prompt
247 |08|$D79Ä|CR|09Vote for which answer (Enter/Quit):
247 |08|$D79Ä|CR|09Vote for which answer (Enter/Quit): |XX
; See voting results?
248 |CR|12See results? |11
; Vote Result Header
@ -480,13 +480,13 @@
; <Pick this to add your own answer> text
252 <Pick this to add your own answer>
; Enter your answer prompt
253 |CR|09Enter your response:
253 |CR|09Enter your response: |XX
254 |CR|14This is a forced question. You must answer it to continue.|CR|CR|PA
255 |CR|09Enter new file scan date |01[|10|UF|01]|09:
255 |CR|09Enter new file scan date |01[|10|UF|01]|09: |XX
256 |CR|12Set this date for all file bases? |11
; &1 = Date of the updated new scan.
257 |CR|07New scan date set to [|15|&1|07].|DE|DE|DE
258 |CRDetecting terminal emulation:
258 |CRDetecting terminal emulation: |XX
259 |TE detected.
; Short BBS list header
260 |CR|07Õ|08Í[ |15B|07BS |15N|07ame |08]Í|07ÍÍÍÍÍÍÍÍÍÍÍ|08Í[ |15T|07ype |08]|07Í|08Í[ |15A|07ddress |08/ |15P|07hone |08]Í|07ÍÍÍÍÍÍÍ|08Í[ |15S|07oftware |08]Í|07¸
@ -495,7 +495,7 @@
261 |08³ |14|$R25|&1 |09|$R06|&2 |10|$R30|&3 |12|$R10|&4 |08³
; Short BBS list footer
262 |07ÔÍ|08ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ|07Í;
263 |08|$D79Ä|CR|09Results for which question? (Enter/Quit):
263 |08|$D79Ä|CR|09Results for which question? (Enter/Quit): |XX
; Extended BBS list header
264 |CR|14Extended BBS listing:
; Extended BBS list information
@ -505,7 +505,7 @@
; verify bbs?
266 |CR|12Verify that this BBS is still online? |11
; Extended BBS list prompt
267 |CR|09(Enter) to Continue, (D)elete, (V)erify, or (Q)uit?
267 |CR|09(Enter) to Continue, (D)elete, (V)erify, or (Q)uit? |XX
; Who's Online: blank listing. |&1 = Node number
268 |07|$R05|&1 Waiting for connection
; Matrix login: Create a BBS account?
@ -515,39 +515,39 @@
; Matrix login: Your account is not validated.
271 |CR|14Sorry, your account has not been validated.|CR|CR|PA
; Matrix login: Enter matrix password
272 |CR|14Enter matrix password:
272 |CR|14Enter matrix password: |XX
; Matrix login: Enter account name prompt
273 |CR|03Account name |09:
273 |CR|03Account name |09: |XX
; Matrix login: enter account password prompt
274 |CR|03Account password|09:
274 |CR|03Account password|09: |XX
; Add question to voting booth question
275 |CR|12Add a question to the voting booth? |11
; Maximum of 20 voting questions text
276 |CR|14Sorry, there is a maximum of 20 voting questions.
; Enter new question
277 |CL|03Enter new question (Enter/Quit)|CR|09:
277 |CR|03Enter new question (Enter/Quit)|CR|09:
; Enter choices now. Max 15.
278 |CR|10Enter choices now. There are a maximum of 15 choices for each question.|CREnter a blank line when done.|CR
; Choice #. &1 = Choice number
279 |09Choice #|&1:
279 |09Choice #|&1: |XX
; Allow users to add answers?
280 |CR|12Allow users to add their own answers? |11
; Save this question?
281 |CR|12Save this voting question? |11
; Move message to where?
282 |CR|09Move to which base (?/List):
282 |CR|09Move to which base (?/List): |XX
; Add BBS list: enter phone number
283 |03Enter BBS phone number:
283 |03Enter BBS phone number: |XX
; Add BBS list: enter BBS name
284 |03Enter BBS Name :
284 |03Enter BBS Name : |XX
; Add BBS list: enter BBS location
285 |03Enter Location of BBS :
285 |03Enter Location of BBS : |XX
; Add BBS list: enter sysop name
286 |03Enter Sysop Name :
286 |03Enter Sysop Name : |XX
; Add BBS list: enter max baud rate
287 |03Enter Max Baud Rate :
287 |03Enter Max Baud Rate : |XX
; Add BBS list: enter BBS software
288 |03Enter BBS Software :
288 |03Enter BBS Software : |XX
; File base is mandatory
289 |CR |11|FB is marked as mandatory scanning.|CR
; Save this BBS entry
@ -555,19 +555,19 @@
; There are no entries in BBS list.
291 |CR|12There are no entries in the BBS list.
; BBS list: enter text to search for
292 |CR|09Enter search text or (ENTER) for All:
292 |CR|09Enter search text or (ENTER) for All: |XX
; Matrix login: Invalid PW
293 |CR|12Invalid password.
294 |CR|12Delete this BBS from the list? |11
295 |CR|12You did not add this BBS entry.
; editing message display
296 |CL|14Message Editor|CR|CR|03A. To : |&1|CRB. Subj : |&2|CR|CR|09Command: (!) Edit text, (Q)uit:
296 |CL|14Message Editor|CR|CR|03A. To : |&1|CRB. Subj : |&2|CR|CR|09Command: (!) Edit text, (Q)uit: |XX
; editing message to
297 |CR|09To:
297 |CR|09To: |XX
; editing message net address
298 |CR|09Enter destination address:
298 |CR|09Enter destination address: |XX
; editing message subject
299 |CR|09Subject:
299 |CR|09Subject: |XX
; editing message save changes
300 |CR|12Save changes to message? |11
; delete autosig?
@ -585,7 +585,7 @@
308 |CR|12Invisible login? |11
309 |CR|12Sorry, this user name is not acceptable.
; Message search: search text input
310 |CR|03Enter text to search for:
310 |CR|03Enter text to search for: |XX
; Message search completed
311 |CL|15Message search completed.|DE|DE|DE
; Lightbar file list: DL limit is exceeded.
@ -594,9 +594,10 @@
313 |12Your download ratio would be exceeded.|PN
; Lightbar file list: Batch queue is full.
314 |12Your batch queue is full.|PN
; UNUSED
315 UNUSED
; Lightbar Y/N: YES text
316 |08++(|23|00 yes |16|08/ |07no |08)++
316 |09|17 Y|15es |09|16 N|15o |16
; Lightbar Y/N: NO text
317 |09 Y|15es |09|17 N|15o |16
; Moving message. &1=base name
@ -619,7 +620,7 @@
328 |CR|14Sysop has shelled to DOS. Please wait.
329 |14Sysop has returned from DOS. Thank you.
; Add to BBS list: telnet
330 |03Enter Telnet Address :
330 |03Enter Telnet Address : |XX
; Start at message index in email? (lightbar msg reader)
331 |CR|12Start at e-mail message index? |11
; Teleconference user list
@ -634,14 +635,14 @@
; One Liners list format. &1 = Text &2 = Poster Name &3 = Initials
337 |07 |$R61|&1 |$L15|&2
; Reading forward prompt &1 = Total messages in base
338 |CR|03Begin reading at (|111|03-|11|&1|03)|12:
338 |CR|03Begin reading at (|111|03-|11|&1|03)|12: |XX
; Lightbar file list prompt (SYSOP)
339 |01(|07Space|01) |09Flag |01(|07E|01) |09Edit |01(|07N|01) |09Next |01(|07V|01) |09View |01(|07ESC|01) |09Quit |01(|07?|01) |09Help
; Lightbar file list uploaders name &1 = user name &3 = downloads
340 |$D34 |07+ Uploader: |&1
; Line editor quote mode: &1 = line number &2 = line text
341 |10|&1|02: |11|$R74|&2
342 |CR|09Enter destination address:
342 |CR|09Enter destination address: |XX
; Upload file name prompt
343 |CR|09File Name|CR:
; Download file name prompt
@ -671,19 +672,19 @@
; FS editor "abort msg"
356 |CR|12Abort message? |11
; file list tagging prompt
357 |CR|01[|10þ|01] |09Add which file number to batch |01(|07Enter|01/|07Quit|01)|09:
357 |CR|01[|10þ|01] |09Add which file number to batch |01(|07Enter|01/|07Quit|01)|09: |XX
; file list view prompt
358 |CR|01[|10þ|01] |09View contents of which file number |01(|07Enter|01/|07Quit|01)|09:
358 |CR|01[|10þ|01] |09View contents of which file number |01(|07Enter|01/|07Quit|01)|09: |XX
; Protocol List Header
359 |CR|14Available Protocols:|CR
; NodeMsg reply &1=from &2=node#
360 |CR|07Sending reply to |15|&1 |07on node |15|&2|07:
; Add BBS list connection type
361 |CR|09Accessible by (D)ialup, (T)elnet, (B)oth:
361 |CR|09Accessible by (D)ialup, (T)elnet, (B)oth: |XX
; Add BBS: BBS already exists
362 |CR|12BBS already exists in list!
; Msg xport: local export path
363 |CR|09Enter full path/filename to export to:
363 |CR|09Enter full path/filename to export to: |XX
; info edit: address
364 |CR|03Enter your street address.|CR|09:
; info edit: city/state
@ -697,11 +698,11 @@
; info edit: bday
369 |CR|03Enter your date of birth (|UF):|CR|09:
; info edit: gender
370 |CR|09Are you (M)ale or (F)emale?
370 |CR|09Are you (M)ale or (F)emale? |XX
; info edit: date format
371 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07
; info edit: screen length &1 = def page size
372 |CR|09Screen Pause Length (Enter/|&1):
372 |CR|09Screen Pause Length (Enter/|&1): |XX
; info edit: editor type
373 |CR|11(|030|08) |14Line Editor|CR|11(|031|08) |14Full Screen Editor|CR|11(|032|08) |14Ask|CR|CR|15E|10d|02itor |15T|10y|02pe|15: |15
; info edit: file list type
@ -711,13 +712,13 @@
; Processing uploads
376 |CR|14Processing uploads ...|CR
; BLIND dupe search
377 |12þ |03Searching for duplicate files :
377 |12þ |03Searching for duplicate files : |XX
; BLIND dupe found
378 Dupe found.
; BLIND no dupe found
379 None.
; importing file_id.diz
380 |12þ |03Importing file description :
380 |12þ |03Importing file description : |XX
; file_id found
381 Found.
; no file_id
@ -733,11 +734,11 @@
; Mass mail prompt
387 |CL|09Send mass mail by|09:|CR|CR|11(|031|08) |09ACS level|CR|11(|032|08)|09 List of users|CR|11(|033|08)|09 All users|CR|11(|03Q|08)|09 Quit|CR|CRCommand |08-> |07
; Mass mail ACS prompt
388 |CREnter ACS level:
388 |CREnter ACS level: |XX
; Mass mail name info
389 |CR|11Enter user name, or search string.|CREnter a blank line to end.|CR
; Mass mail name prompt &1 = # of users in list
390 |CR|11|&1 |03users in list. Enter user name:
390 |CR|11|&1 |03users in list. Enter user name: |XX
; Mass mail name list
391 |CR|09User mailing list:|CR
; Mass mail name format &1 = name
@ -749,7 +750,7 @@
; Node unavilable
395 |CR|14Sorry, this user is marked as unavailable.
; Msg search prompt
396 |CR|03Enter search string:
396 |CR|03Enter search string: |XX
; Info edit: Msg Read type
397 |CR|11(|030|08) |14Normal |15: |10View messages page by page|CR|11(|031|08) |14LightBar |15: |10Scroll message lists with arrow keys|CR|CR|15S|10ele|02ct |15T|10yp|02e: |15
; New user: Msg Read type
@ -766,15 +767,15 @@
; Ansi msg read: delete msg
402 |CR|12Delete this mail?
; Ansi msg read: jump to msg: &1 = cur msg num &2 = high msg num
403 |CR|09Jump to which message? (1-|&2):
403 |CR|09Jump to which message? (1-|&2): |XX
; Ansi msg read: scan toggle &1 = message base name
404 |CR|11|&1 will NOT be scanned in new message scan!
405 |CR|11|&1 will be scanned in new message scan!
406 |CR|11|MB is marked as mandatory reading!
; Reply msg To: standard
407 |CR|09To:
407 |CR|09To: |XX
; Reply msg To: lightbar
408 |CR|09To:
408 |CR|09To: |XX
; User edit: Hotkeys
409 |CR|12Use hot-key input?
; New user: Hotkeys
@ -787,7 +788,7 @@
; ansi msg read: local export
415 Export to filepath/filename|CR:
; mass email subj: prompt
416 |CR|09Subject:
416 |CR|09Subject: |XX
; General Invalid PW
417 |CR|12Invalid password.
; INFO EDIT: Do not match
@ -834,7 +835,7 @@
; post on msg base (lightbar reader)
438 |CR|12Post a message?
; new user: enter email address
439 |01[|10þ|01] |09Enter your e-mail address ->
439 |01[|10þ|01] |09Enter your e-mail address -> |XX
; info edit: enter email address
440 |CR|09Enter E-mail address|CR:
; new user: enter user note
@ -842,23 +843,23 @@
; info edit: enter user note
442 |CR|09Enter your desired user note|CR:
; new user: option 1
443 |01[|10þ|01] |09How did you hear of this BBS ->
443 |01[|10þ|01] |09How did you hear of this BBS -> |XX
; info edit: option 1
444 |CR|09Enter optional field 1:
444 |CR|09Enter optional field 1: |XX
; new user: option 2
445 |CR|09Enter optional field 2:
445 |CR|09Enter optional field 2: |XX
; info edit: option 2
446 |CR|09Enter optional field 2:
446 |CR|09Enter optional field 2: |XX
; new user: option 3
447 |CR|09Enter optional field 3:
447 |CR|09Enter optional field 3: |XX
; info edit: option 3
448 |CR|09Enter optional field 3:
448 |CR|09Enter optional field 3: |XX
; file new scan setting footer
449
; private post (email) TO:
450 |CR|09To:
450 |CR|09To: |XX
; reply msg SUBJ
451 |CR|09Subject:
451 |CR|09Subject: |XX
; standard quote header
452 |15Quote mode: Select a range of text to quote|CR
453 |09|$D77Ä|CR|PA
@ -881,14 +882,13 @@
; filename greater than 70 chars prompt
461 |CR|12File of this name already exists.|CR|CR|09Enter new file name (max 70 chars)|CR:
; line editor edit subject
462 |CR|09Enter new subject:
462 |CR|09Enter new subject: |XX
; FS editor edit subject
463 |CR|09Enter new subject:
463 |CR|09Enter new subject: |XX
; msgtext quote header &1=date &2=from &3=initials
464 On |&1, |&2 said the following...
; new email node msg: &1=from &2=subj
465 You've just received new e-mail from |&1.
; ansi gallery: Ansi is required to use this prompt
466 |CRSorry, this gallery requires ANSI graphics|CR|CR|PA
; ansi gallery: Deselected file in list (bar OFF)
@ -908,7 +908,7 @@
; &6=sauce group &7=filetime
470 |[X02|15|17 |$R49|&1 |12<DIRECTORY>|$D15 |XX
; ansi gallery: Current path update prompt (when switching directories)
; set to blank to not display a path
; set to blank to not display a path (automatically excludes the root)
; &1 = current path &2 = # of files in path
471 |[X08|[Y05|15|16|$R70|&1
; ansi gallery: Percent bar update (when redrawing page)
@ -921,7 +921,7 @@
; ansi gallery: Command prompt for ! (only download for now)
474 |CR|12Download |&1? |XX
; Password inquiry prompt
475 |CR|12Send an e-mail about your forgetten password? |XX
475 |CR|12Send a password inquiry message to the SysOp? |XX
; Displayed when account expired down to a security level > 0
476 |CR|14Your account has expired. Downgrading security to |XS.
; Displayed when account expired down to level 0 (delete)

View File

@ -58,7 +58,7 @@ Const
colEditBorder = 25; { 31 }
colEditHeader = 31; { 31 }
colEditStatus = 19; { 19 }
colEditStatus = 9 + 1 * 16;
colEditPosBar = 9 + 1 * 16;
Type

View File

@ -22,7 +22,7 @@ End;
Function Char2VarType (C: Char) : TIdentTypes;
Begin
Case UpCase(c) of
Case UpCase(C) of
'S' : Result := iString;
'C' : Result := iChar;
'B' : Result := iByte;

View File

@ -2,14 +2,6 @@ Unit MPL_Compile;
{$I M_OPS.PAS}
// OKAY SO iRECORD HAS DATAPTR ALLOCATED TO ITS FULL SIZE.
// WHEN A RECORD VARIABLE (iRECORD) is DEFINED, EACH VAR
// IS CREATED WITH A POINTER TO iRECORD.DATAPTR[OFFSET]
// IRECORD THEN CAN BE REFERENCED AS EXPECTED.
// ALSO NEED TO FIGURE OUT SIZEOF TOO
// REMOVE VARTYPE2CHAR ETC AND USE ORDINAL
Interface
Uses
@ -47,22 +39,15 @@ Type
TParserUpdateProc = Procedure (Mode: TParserUpdateInfo);
TParserSourceFile = Record
DataFile : TCharFile;
ColCur : Byte;
ColLast : Byte;
ColSaved : Byte;
LineCur : Word;
LineSaved : Word;
Position : LongInt;
PosSaved : LongInt;
Size : LongInt;
ColLastSaved : Byte;
SavedInfo : TParserUpdateInfo;
DataFile : TCharFile;
Position : LongInt;
PosSaved : LongInt;
Size : LongInt;
SavedInfo : TParserUpdateInfo;
End;
TParserVarInfoRec = Record
Ident : Array[1..mplMaxVarDeclare] of String[mplMaxIdentLen];
Prefix : String[mplMaxIdentLen];
vType : TIdentTypes;
ArrDem : Byte;
ArrStart : Array[1..mplMaxArrayDem] of LongInt;
@ -71,14 +56,16 @@ Type
StrLen : Byte;
VarSize : LongInt;
DataSize : LongInt;
RecID : Word;
End;
PRecordRec = ^TRecordRec;
TRecordRec = Record
Ident : String[mplMaxIdentLen];
RecID : Word;
Fields : Array[1..mplMaxRecFields] of TParserVarInfoRec;
NumFields : Word;
// RecSize : Word;
DataSize : LongInt;
End;
PConstRec = ^TConstRec;
@ -106,6 +93,7 @@ Type
CurRecNum : Word;
CurConstNum : Word;
CurVarID : Word;
CurRecID : Word;
UsesUSER : Boolean;
UsesCFG : Boolean;
UsesMBASE : Boolean;
@ -136,7 +124,7 @@ Type
// CODE PROCESSING
Function GetDataSize (Info: TParserVarInfoRec) : LongInt;
Procedure CreateVariable (Var Info: TParserVarInfoRec);
Procedure ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec);
Function ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec) : LongInt;
Procedure ParseIdent;
Procedure ParseBlock (VarStart: Word; OneLine, CheckBlock, IsRepeat: Boolean);
@ -144,9 +132,10 @@ Type
Procedure ParseVarString;
Procedure ParseVarFile;
Procedure ParseVarBoolean;
Procedure ParseVarChar; //combine with string?
Procedure ParseVarChar;
Procedure ParseVariable (VT: TIdentTypes);
Procedure ParseArray (VN: Word);
Function ParseElement (VN: Word; TypeCheck: Boolean; VT: TIdentTypes) : TIdentTypes;
Procedure DefineRecordType;
Procedure DefineVariable;
@ -196,6 +185,7 @@ Begin
Ch := #0;
IdentStr := '';
CurVarID := 0;
CurRecID := 0;
CurFile := 0;
CurVarNum := 0;
CurGotoNum := 0;
@ -271,10 +261,23 @@ Begin
UpdateInfo.ErrorType := ErrNum;
UpdateInfo.ErrorText := GetErrorMessage(Str);
UpdateInfo.ErrorLine := InFile[CurFile].LineCur;
UpdateInfo.ErrorCol := InFile[CurFile].ColCur;
UpdateInfo.ErrorLine := 1;
UpdateInfo.ErrorCol := 0;
If UpdateInfo.ErrorLine < 1 Then UpdateInfo.ErrorLine := 1;
InFile[CurFile].DataFile.Seek(0);
While Not InFile[CurFile].DataFile.EOF And (InFile[CurFile].DataFile.FilePos < InFile[CurFile].Position) Do Begin
Case InFile[CurFile].DataFile.Read of
#10 : Begin
Inc (UpdateInfo.ErrorLine);
UpdateInfo.ErrorCol := 0;
End;
#09,
#13 : ;
Else
Inc (UpdateInfo.ErrorCol);
End;
End;
End;
Function TParserEngine.CurFilePos : LongInt;
@ -358,6 +361,9 @@ Begin
If CurRecNum = 0 Then Exit;
Repeat
writeln('rec ident: ', recdata[count]^.ident);
writeln('str: ', str);
If strUpper(RecData[Count]^.Ident) = Str Then Begin
Result := Count;
Exit;
@ -400,7 +406,6 @@ Begin
UpdateInfo.Percent := Percent;
UpdateInfo.FilePosition := InFile[CurFile].Position;
UpdateInfo.FileSize := InFile[CurFile].Size;
UpdateInfo.FileLine := InFile[CurFile].LineCur;
End;
UpdateProc(UpdateInfo);
@ -414,9 +419,8 @@ Begin
If Not InFile[CurFile].DataFile.Eof Then Begin
Ch := InFile[CurFile].DataFile.Read;
Inc (InFile[CurFile].Position);
If Not (Ch in [#10, #13]) Then Inc(InFile[CurFile].ColCur);
Inc (InFile[CurFile].Position);
End Else
If InFile[CurFile].DataFile.Eof and (CurFile > 1) Then Begin
CloseSourceFile;
@ -434,42 +438,15 @@ Begin
With InFile[CurFile] Do Begin
If Position <= 1 Then Exit;
Dec (Position);
Dec (ColCur);
Dec (Position);
DataFile.Seek (DataFile.FilePos - 1);
If ColCur < 1 Then Begin
ColCur := ColLast;
ColLast := 1;
Dec (LineCur);
End;
End;
End;
Function TParserEngine.IsEndOfLine : Boolean;
Begin
Result := False;
Case Ch of
#10,
#13 : Begin
With InFile[CurFile] Do Begin
Inc (LineCur);
ColLast := ColCur;
ColCur := 1;
Result := True;
End;
If Ch = #13 Then Begin
GetChar;
If Not (Ch in [#10]) Then PrevChar;
End;
End;
End;
Result := Ch in [#10, #13];
End;
Procedure TParserEngine.NextChar;
@ -496,10 +473,9 @@ Begin
While Not UpdateInfo.ErrorType <> 0 Do Begin
Case Ch of
// SKIP CR/LF...
#10,
#13 : IsEndOfLine;
// SKIP WHITESPACE
#10,
#13,
#09,
#32,
#59 : {ignore};
@ -519,8 +495,6 @@ Begin
'*' : Repeat
GetChar;
IsEndOfLine;
Case Ch of
'*' : Begin
GetChar;
@ -584,6 +558,7 @@ Begin
End;
1 : Begin
BlockCount := 1;
Repeat
GetChar;
@ -685,7 +660,7 @@ Begin
If UpdateInfo.ErrorType <> 0 Then Exit;
While (UpdateInfo.ErrorType = 0) And ((Ch in ChIdent2) or (Ch = '.')) Do Begin
While (UpdateInfo.ErrorType = 0) And (Ch in ChIdent2) Do Begin
IdentStr := IdentStr + Ch;
GetChar;
End;
@ -707,20 +682,14 @@ End;
Procedure TParserEngine.SavePosition;
Begin
With InFile[CurFile] Do Begin
ColSaved := ColCur;
LineSaved := LineCur;
PosSaved := DataFile.FilePos + 1;
ColLastSaved := ColLast;
PosSaved := DataFile.FilePos + 1;
End;
End;
Procedure TParserEngine.LoadPosition;
Begin
With InFile[CurFile] Do Begin
ColCur := ColSaved;
LineCur := LineSaved;
Position := PosSaved;
ColLast := ColLastSaved;
DataFile.Seek (Position - 1);
End;
@ -743,8 +712,10 @@ Var
Begin
If VarData[VN]^.ArrPos > 0 Then Begin
GetStr(tkw[wOpenArray], True, False);
For X := 1 to VarData[vn]^.ArrPos Do Begin
For X := 1 to VarData[VN]^.ArrPos Do Begin
ParseVarNumber;
If X < VarData[VN]^.ArrPos Then
GetStr(tkw[wArrSep], True, False)
Else
@ -753,6 +724,65 @@ Begin
End;
End;
Function TParserEngine.ParseElement (VN: Word; TypeCheck: Boolean; VT: TIdentTypes) : TIdentTypes;
Var
Element : String;
RecNum : Word;
Count : Word;
Found : Boolean;
Offset : LongInt;
X : Word;
Begin
Result := VarData[VN]^.vType;
If Result <> iRecord Then Exit;
NextChar;
If Ch <> '.' Then Begin
PrevChar;
Exit;
End;
GetIdent(False);
Element := strUpper(IdentStr);
Offset := 0;
For Count := 1 to RecData[VarData[VN]^.RecID]^.NumFields Do Begin
If strUpper(RecData[VarData[VN]^.RecID]^.Fields[Count].Ident[1]) = Element Then Begin
Found := True;
Result := RecData[VarData[VN]^.RecID]^.Fields[Count].vType;
//VarType
//Offset
//Size
If RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem > 0 Then Begin
GetStr(tkw[wOpenArray], True, False);
For X := 1 to RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem Do Begin
ParseVarNumber;
If X < RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem Then
GetStr(tkw[wArrSep], True, False)
Else
GetStr(tkw[wCloseArray], True, False);
End;
End;
// writeln('creating ', recdata[vardata[vn]^.recid]^.fields[count].varsize, ' at ', offset);
Break;
End;
Inc (Offset, RecData[VarData[VN]^.RecID]^.Fields[Count].VarSize);
End;
If Not Found Then
Error (mpsUnknownIdent, '');
End;
Procedure TParserEngine.NewNumberCrap;
var
IsDecimal : Boolean;
@ -853,6 +883,7 @@ begin
If GetIdent(False) Then Begin
VarNum := FindConst(IdentStr);
If VarNum > 0 Then Begin
If Not (ConstData[VarNum]^.vType in vNums) Then
Error (mpsTypeMismatch, '');
@ -864,7 +895,7 @@ begin
If VarNum = 0 Then
Error (mpsUnknownIdent, IdentStr)
Else
If Not (VarData[VarNum]^.vType in vNums) Then
If Not (VarData[VarNum]^.vType in vNums) And (VarData[VarNum]^.vType <> iRecord) Then
Error (mpsTypeMismatch, '');
If UpdateInfo.ErrorType <> 0 Then Exit;
@ -872,9 +903,10 @@ begin
If VarData[VarNum]^.Proc Then
ExecuteProcedure (VarNum, True)
Else Begin
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
ParseElement (VarNum, True, iLongInt);
End;
End;
End Else
@ -973,16 +1005,16 @@ Begin
If Not (ConstData[VarNum]^.vType in vStrings) Then
Error (mpsTypeMismatch, '');
OutString(Char(opOpenString));
OutString(ConstData[VarNum]^.Data[0]);
OutString(ConstData[VarNum]^.Data);
OutString (Char(opOpenString));
OutString (ConstData[VarNum]^.Data[0]);
OutString (ConstData[VarNum]^.Data);
End Else Begin
VarNum := FindVariable(IdentStr);
If VarNum = 0 Then
Error (mpsUnknownIdent, IdentStr)
Else
If Not (VarData[VarNum]^.vType in vStrings) Then
If Not (VarData[VarNum]^.vType in vStrings) And (VarData[VarNum]^.vType <> iRecord) Then
Error (mpsTypeMismatch, '');
If UpdateInfo.ErrorType <> 0 Then Exit;
@ -990,9 +1022,10 @@ Begin
If VarData[VarNum]^.Proc Then
ExecuteProcedure(VarNum, True)
Else Begin
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
ParseElement (VarNum, True, iChar);
End;
End;
@ -1112,7 +1145,7 @@ Begin
If VarNum = 0 Then
Error (mpsUnknownIdent, IdentStr)
Else
If Not (VarData[VarNum]^.vType in vStrings) Then
If Not (VarData[VarNum]^.vType in vStrings) And (VarData[VarNum]^.vType <> iRecord) Then
Error (mpsTypeMismatch, '');
If UpdateInfo.ErrorType <> 0 Then Exit;
@ -1120,9 +1153,10 @@ Begin
If VarData[VarNum]^.Proc Then
ExecuteProcedure(VarNum, True)
Else Begin
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
ParseElement (VarNum, True, iString);
End;
End;
@ -1215,15 +1249,16 @@ Begin
If VarNum = 0 Then
Error (mpsUnknownIdent, IdentStr)
Else
If VarData[VarNum]^.vType <> iBool Then
If (VarData[VarNum]^.vType <> iBool) And (VarData[VarNum]^.vType <> iRecord) Then
Error (mpsTypeMismatch, '')
Else
If VarData[VarNum]^.Proc Then
ExecuteProcedure(VarNum, True)
Else Begin
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
OutString (Char(opVariable));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
ParseElement (VarNum, True, iBool);
End;
End;
End;
@ -1455,7 +1490,7 @@ Begin
Result := DimSize;
End;
Procedure TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec);
Function TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec) : LongInt;
Function ParseNum : LongInt;
Var
@ -1547,41 +1582,41 @@ Procedure TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var I
If IsRec Then Error(mpsSyntaxError, 'Cannot define file in record');
Info.vType := iFile;
End Else Begin
Count := FindRecord(IdentStr);
Info.RecID := FindRecord(IdentStr);
If Count = 0 Then
If Info.RecID = 0 Then
Error(mpsUnknownIdent, IdentStr)
Else If IsRec Then
Error(mpsSyntaxError, 'Cannot define record in record')
Else Begin
Info.vType := iRecord;
Info.Prefix := Info.Ident[1] + '.';
Info.StrLen := Count;
// this crap needs to go?
Info.vType := iRecord;
End;
End;
If Not Param Then
If Info.vType = iString Then
If GetStr(tkw[wOpenStrSize], False, False) Then Begin
Info.StrLen := ParseNum;
GetStr(tkw[wCloseStrSize], True, False);
End Else
Info.StrLen := 255;
Case Info.vType of
iString : Begin
Info.StrLen := 255;
If Info.vType <> iRecord Then Begin
If Info.vType = iString Then
Info.VarSize := Info.StrLen + 1
Else
Info.VarSize := GetVarSize(Info.vType);
If Not Param Then
If GetStr(tkw[wOpenStrSize], False, False) Then Begin
Info.StrLen := ParseNum;
GetStr(tkw[wCloseStrSize], True, False);
End;
If Info.ArrDem > 0 Then
Info.VarSize := GetDataSize(Info);
If Info.VarSize > mplMaxDataSize Then
Error (mpsDataTooBig, '');
Info.VarSize := Info.StrLen + 1;
End;
iRecord : Info.VarSize := RecData[Info.RecID]^.DataSize;
Else
Info.VarSize := GetVarSize(Info.vType);
End;
If Info.ArrDem > 0 Then
Info.VarSize := GetDataSize(Info);
If Info.VarSize > mplMaxDataSize Then
Error (mpsDataTooBig, '');
// writeln('parsed variable of size: ' , info.varsize);
End;
Begin
@ -1743,46 +1778,10 @@ End;
Procedure TParserEngine.DefineVariable;
Var
Info : TParserVarInfoRec;
BaseRec : TParserVarInfoRec;
Count : LongInt;
Info : TParserVarInfoRec;
Begin
ParseVariableInfo(False, False, Info);
If Info.vType = iRecord Then Begin
OutString (Char(opTypeRec));
OutWord (RecData[Info.StrLen]^.NumFields);
BaseRec := Info;
BaseRec.VarSize := 0;
BaseRec.ArrDem := Info.ArrDem;
BaseRec.ArrStart := Info.ArrStart;
BaseRec.ArrEnd := Info.ArrEnd;
BaseRec.Prefix := '';
BaseRec.NumVars := 1;
BaseRec.StrLen := 0;
For Count := 1 to RecData[Info.StrLen]^.NumFields Do
Inc (BaseRec.VarSize, RecData[Info.StrLen]^.Fields[Count].VarSize);
If BaseRec.VarSize > mplMaxDataSize Then Begin
Error (mpsDataTooBig, '');
Exit;
End;
BaseRec.DataSize := GetDataSize(BaseRec);
OutWord (BaseRec.DataSize);
CreateVariable(BaseRec);
For Count := 1 to RecData[Info.StrLen]^.NumFields Do Begin
RecData[Info.StrLen]^.Fields[Count].Prefix := Info.Prefix;
CreateVariable(RecData[Info.StrLen]^.Fields[Count]);
End;
End Else
CreateVariable(Info);
ParseVariableInfo (False, False, Info);
CreateVariable (Info);
End;
Procedure TParserEngine.CreateVariable (Var Info: TParserVarInfoRec);
@ -1795,6 +1794,11 @@ Begin
If (Info.vType = iString) and (Info.StrLen > 0) Then
OutString(Char(opStrSize) + Char(opOpenNum) + strI2S(Info.StrLen) + Char(opCloseNum));
If Info.vType = iRecord Then Begin
OutString (Char(opTypeRec));
OutWord (Info.DataSize);
End;
If Info.ArrDem = 0 Then
OutString(Char(opVarNormal))
Else Begin
@ -1817,10 +1821,11 @@ Begin
OutWord (CurVarID);
Inc (CurVarID);
Ident := Info.Prefix + Info.Ident[Count];
Ident := Info.Ident[Count];
vType := Info.vType;
Proc := False;
ArrPos := Info.ArrDem;
RecID := Info.RecID;
NumParams := 0;
FillChar(Params, SizeOf(Params), 0);
@ -1838,10 +1843,9 @@ Begin
End;
Procedure TParserEngine.DefineRecordType;
// get rid of this crap kludge and do records the right way...
Var
Ident : String;
Info : TParserVarInfoRec;
Ident : String;
Info : TParserVarInfoRec;
Begin
GetIdent(False);
@ -1862,6 +1866,10 @@ Begin
RecData[CurRecNum]^.Ident := Ident;
RecData[CurRecNum]^.NumFields := 0;
RecData[CurRecNum]^.DataSize := 0;
RecData[CurRecNum]^.RecID := CurRecID;
Inc (CurRecID);
Repeat
Inc (RecData[CurRecNum]^.NumFields);
@ -1869,12 +1877,34 @@ Begin
If RecData[CurRecNum]^.NumFields > mplMaxRecFields Then
Error (mpsTooManyFields, '');
// need to check that datasize does not go over the max
ParseVariableInfo(False, True, Info); // if record fail if file type?
ParseVariableInfo(False, True, Info);
RecData[CurRecNum]^.Fields[RecData[CurRecNum]^.NumFields] := Info;
Inc (RecData[CurRecNum]^.DataSize, Info.VarSize);
Until (UpdateInfo.ErrorType <> 0) or GetStr(tkw[wBlockClose], False, tkwType = 1);
If RecData[CurRecNum]^.DataSize > mplMaxDataSize Then
Error (mpsDataTooBig, '');
(*
OutString (Char(opTypeRec));
OutWord (RecData[CurRecNum]^.RecID);
OutWord (RecData[CurRecNum]^.NumFields);
OutWord (RecData[CUrRecNum]^.DataSize);
*)
// what would we need:
// 1. vartype (byte)
// 2. offset (Word)
// 3. size (word)
// output record define OP
// output record ID
// output record variable types STRING needs size and how do we do array?
// output record size?
// ALSO need to output on createvariable for RECORD type
// need to add both to interpreter engine
// need to change interpreter to address vars by data pointer always?
End;
Procedure TParserEngine.DefineProc;
@ -1994,6 +2024,8 @@ Begin
Else
Error (mpsUnknownIdent, IdentStr);
// need to support records here
VarChar := VarType2Char(VarType);
VarData[ProcVar]^.vType := VarType;
@ -2036,9 +2068,9 @@ Begin
If (VarData[RV]^.vType <> Char2VarType(VarData[VN]^.Params[Count])) And (VarData[VN]^.Params[Count] <> '*') Then
Error (mpsTypeMismatch, '');
// OutString (Char(opVariable)); // i dont think we need this
OutWord (VarData[RV]^.VarID);
ParseArray (RV);
OutWord (VarData[RV]^.VarID);
ParseArray (RV);
ParseElement (RV, VarData[VN]^.Params[Count] <> '*', VarData[RV]^.vType);
// if = '*' and type iString then...do the string index
End Else Begin
@ -2074,13 +2106,15 @@ Begin
VC := FindVariable(IdentStr);
If Not (VarData[VC]^.vType in vNums) Then Error(mpsNumExpected, '');
If Not (VarData[VC]^.vType in vNums) And (VarData[VC]^.vType <> iRecord) Then
Error(mpsNumExpected, '');
If UpdateInfo.ErrorType <> 0 Then Exit;
OutWord (VarData[VC]^.VarID);
ParseArray (VC);
GetStr (tkw[wSetVar], True, False);
OutWord (VarData[VC]^.VarID);
ParseArray (VC);
ParseElement (VC, True, iLongInt);
GetStr (tkw[wSetVar], True, False);
If UpdateInfo.ErrorType <> 0 Then Exit;
@ -2432,8 +2466,8 @@ Begin
If Not VarData[vn]^.InProc Then Exit;
If GetStr(tkw[wSetVar], False, False) Then Begin
OutString (Char(opSetVar));
OutWord (VarData[VN]^.VarID);
OutString (Char(opSetVar));
OutWord (VarData[VN]^.VarID);
ParseVariable (VarData[VN]^.vType);
SetProcResult := True;
@ -2443,6 +2477,7 @@ End;
Procedure TParserEngine.ParseIdent;
Var
VarNum : LongInt;
VT : TIdentTypes;
Begin
PrevChar;
GetIdent(False);
@ -2468,14 +2503,17 @@ Begin
If VarData[VarNum]^.Proc Then Begin
If Not SetProcResult(VarNum) Then ExecuteProcedure(VarNum, False);
End Else Begin
OutString (Char(opSetVar));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
OutString (Char(opSetVar));
OutWord (VarData[VarNum]^.VarID);
ParseArray (VarNum);
VT := ParseElement (VarNum, False, iNone);
//will need to pull vartype from parse array here
GetChar;
// should this only happen with a string?
If Ch = tkw[wOpenArray] Then Begin
// prob shoud be iString check here. also need to
If (Ch = tkw[wOpenArray]) Then Begin
OutString(Char(opStrArray));
ParseVarNumber;
// check here to make sure is <= string length?
@ -2485,7 +2523,7 @@ Begin
If Not GetStr(tkw[wSetVar], True, False) Then Exit;
ParseVariable(VarData[VarNum]^.vType);
ParseVariable(VT);
End;
End;
End;
@ -2623,10 +2661,12 @@ Begin
Dispose (GotoData[Count]);
End;
CurGotoNum := SavedGoto;
For Count := CurRecNum DownTo SavedRec + 1 Do
Dispose (RecData[Count]);
CurRecNum := SavedRec;
For Count := CurConstNum DownTo SavedConst + 1 Do
@ -2651,10 +2691,6 @@ Begin
FillChar (InFile[CurFile], SizeOf(InFile[CurFile]), 0);
InFile[CurFile].LineCur := 1;
InFile[CurFile].LineSaved := 1;
InFile[CurFile].ColCur := 0;
InFile[CurFile].ColSaved := 0;
InFile[CurFile].Position := 1;
InFile[CurFile].PosSaved := 1;
InFile[CurFile].Size := 1;

View File

@ -48,8 +48,8 @@ Type
{$ENDIF}
Function GetErrorMsg : String;
Procedure Error (Err: Byte; Str: String);
Procedure MoveToPos (Num: LongInt);
Procedure Error (Err: Byte; Str: String);
Procedure MoveToPos (Num: LongInt);
Procedure SkipBlock;
Function CurFilePos : LongInt;
Procedure NextChar;
@ -70,9 +70,9 @@ Type
Procedure SetNumber (VN: Word; R: Real; Var A: TArrayInfo);
Procedure SetVariable (VarNum: Word);
Function DefineVariable (DataStart: Pointer; RecSize: Word) : LongInt;
Function DefineVariable : LongInt;
Procedure DefineProcedure;
Procedure DefineRecord;
//Procedure DefineRecordType;
Procedure StatementRepeatUntil;
Function StatementIfThenElse : Byte;
@ -147,7 +147,7 @@ Begin
// ProcPos : LongInt;
// Data : PStack;
// ArrPos : Byte;
// ArrDim : TArrayInfo;
// ArrDims : TArrayInfo;
End;
{$ENDIF}
@ -934,12 +934,13 @@ Begin
End;
End;
Function TInterpEngine.DefineVariable (DataStart: Pointer; RecSize: Word) : LongInt;
Function TInterpEngine.DefineVariable : LongInt;
Var
VarType : TIdentTypes;
NumVars : Word;
SavedVar : Word;
StrSize : Word;
RecSize : Word;
Count : Word;
ArrayPos : Word;
ArrayData : TArrayInfo;
@ -962,6 +963,14 @@ Begin
NextChar;
End;
If Ch = Char(opTypeRec) Then Begin
NextWord;
RecSize := W;
NextChar;
End;
If Ch = Char(opArrDef) Then Begin
NextWord;
@ -1011,15 +1020,10 @@ Begin
Result := DataSize;
If DataStart = NIL Then Begin
GetMem (Data, DataSize);
FillChar (Data^, DataSize, 0);
GetMem (Data, DataSize);
FillChar (Data^, DataSize, 0);
Kill := True;
End Else Begin
Data := DataStart;
Kill := False;
End;
Kill := True;
End;
End;
@ -2024,37 +2028,10 @@ Begin
PrevChar;
End;
Procedure TInterpEngine.DefineRecord;
Var
Count : LongInt;
RecSize : LongInt;
Begin
NextWord;
Inc (CurRecNum);
New (RecData[CurRecNum]);
// Holds ID info for all variables in this record
RecData[CurRecNum]^.RecStart := CurVarNum + 2; {+1 is base}
RecData[CurRecNum]^.NumFields := W;
NextWord;
RecSize := W;
NextChar; // opVarDeclare
DefineVariable (NIL, RecSize); // Base record identifier
RecSize := 1;
For Count := 1 to RecData[CurRecNum]^.NumFields Do Begin
NextChar; // opVarDeclare
Inc (RecSize, DefineVariable(@TStack(VarData[RecData[CurRecNum]^.RecStart - 1]^.Data^)[RecSize], 0));
End;
End;
//Procedure TInterpEngine.DefineRecordType;
//Begin
//asdf
//End;
Function TInterpEngine.ExecuteBlock (StartVar, StartRec: Word) : Byte;
Var
@ -2085,7 +2062,7 @@ Begin
Self.ExecuteBlock(CurVarNum, CurRecNum);
End;
{1} opBlockClose : Break;
{2} opVarDeclare : DefineVariable (NIL, 0);
{2} opVarDeclare : DefineVariable;
{12} opSetVar : Begin
NextWord;
SetVariable(FindVariable(W));
@ -2116,7 +2093,7 @@ Begin
Break;
End;
End;
{52} opTypeRec : DefineRecord;
//{52} opTypeRec : DefineRecordType;
{53} opBreak : Begin
MoveToPos (BlockStart + BlockSize);
Result := 1;

View File

@ -230,9 +230,20 @@ Const
Type
{$IFNDEF MPLPARSER}
PStack = ^TStack;
TStack = Array[1..mplMaxDataSize] of Byte;
TArrayInfo = Array[1..mplMaxArrayDem] of Word;
PStack = ^TStack;
TStack = Array[1..mplMaxDataSize] of Byte;
TArrayInfo = Array[1..mplMaxArrayDem] of Word;
TRecordInfo = Record
vType : Byte;
Offset : Word;
DataSize : Word;
End;
//TVarInfo = Record
// AInfo : Array[1..mplMaxArrayDem] of Word;
// RInfo : Word;
// End;
// Basically, an ArrayInfo will have an appended Offset for DataPtr
// if it is a record and probably some sort of record element ID
(*
// MEMORY SAVING... could be 28 bytes per var?!?!
@ -265,11 +276,17 @@ Type
ArrDim : TArrayInfo;
End;
TRecordElement = Record
ESize : Word;
Offset : Word;
End;
PRecordRec = ^TRecordRec;
TRecordRec = Record
// RecID : Word; needed when Record variable type is added
RecStart : Word;
NumFields : Word;
RecID : Word;
Fields : Word;
DataSize : Word;
Element : Array[1..mplMaxRecFields] of TRecordElement;
End;
VarDataRec = Array[1..mplMaxVars] of PVarRec;
@ -285,6 +302,7 @@ Type
InProc : Boolean;
Proc : Boolean;
ArrPos : Byte;
RecID : Word;
End;
PGotoRec = ^TGotoRec;