!*************************** AMUS Program Label ****************************** ! Filename: PROLAB.BAS Date: 2/26/90 ! Category: UTIL Hash Code: 651-773-641-647 Version: 1.0(101) ! Initials: GR/AM Name: James A. Jarboe IV ! Company: Educational Video Network, Inc. Telephone #: 4092955767 ! Related Files: PROLAB.DOC, EDIT.SBR, DIRHSH.SBR, MACLIB.UNV (FOR EDIT.SBR) ! Min. Op. Sys.: AMOSL 1.0 Expertise Level: BEG ! Special: Uses DIRHSH.SBR to get hash/version of compiled or assembled file. ! Description: Used to create a program label for donations made to the AMUS ! Network. Creates a file called LABEL.RPT which can then be appended to ! the top of the source code program. See PROLAB.DOC for more info. !***************************************************************************** !*! Updated on 26-Feb-90 at 4:54 AM by James A. Jarboe IV; edit time: 2:11:32 !*************************** AMUS Program Label ****************************** ! Filename: PROLAB.BAS Date: 01/19/89 ! Category: UTIL Hash Code: 774-057-755-505 Version: 1.0(100) ! Initials: ARCH/US Name: STEVE ARCHULETA ! Company: ALPHA MICRO USERS SOCIETY Telephone #: 3034496917 ! Related Files: PROLAB.DOC, EDIT.M68 (SBR), MACLIB.UNV-TO ASSEMBLE EDIT.M68 ! Min. Op. Sys.: AMOSL 1.0 Expertise Level: BEG ! Special: ! Description: Used to create a program label for donations made to the AMUS ! Network. Creates a file called LABEL.RPT which can then be appended to ! the top of the source code program. See PROLAB.DOC for more info. !***************************************************************************** ! -NOTE- Added help prompts, visual border as to what border PROLAB will ! output, option to load some user defaults via "PROLAB.INI", ! automatic preloading of most of the previous AMUS program label ! from the source code if it exists to cut down on data entry, and ! automatic hashing of files using DIRHSH.SBR. 26-Feb-90 [JAJ] ! Program PROLAB,1.0(101) ! New version. MAP1 dummy,S,1 !dummy variable MAP1 file'type,S,1,"" !type of file by extension MAP1 field(16) !field record MAP2 prompt,S,17 ! field prompt MAP2 pr'x,F ! field prompt column MAP2 pr'y,F ! field prompt row MAP2 y,S,3 ! field row MAP2 x,S,3 ! field column MAP2 type,S,2 ! field type MAP2 minsize,S,2 ! minimum field size MAP2 maxsize,S,2 ! maximum field size MAP2 flags,S,3 ! field flag MAP2 string,S,80 ! field string MAP1 num'flds,F,,16 !number of defined fields MAP1 key,B,2 !result code from EDIT XCALL MAP1 fld'stats,S,16 !string descriptor for EDIT XCALL MAP1 fld,F !field counter MAP1 col,F !column var for PRINT'RPT MAP1 comment'char,S,1,"*" !comment char var for PRINT'RPT MAP1 ini'file, S, 20, "PROLAB.INI" ! INI file name. MAP1 hash'array, S, 74 ! DIRHSH.SBR returned file data. MAP1 hash'file, S, 30 ! Filename to DIRHSH. MAP1 hash'flag, B, 1 ! DIRHSH error flag. MAP1 prompt'hlp(16),S,70 ! Field prompt helps. prompt'hlp(1 ) = "Enter name of source file." prompt'hlp(2 ) = "Enter Current Date." prompt'hlp(3 ) = "UTIL, SBR, GAME, TDV, MATH, TEXT, GRAP, DOC, COMM, CAL, SEC, SCI" prompt'hlp(4 ) = "Enter hash total of assembled or compiled program." prompt'hlp(5 ) = "Enter version number of assembled or compiled program." prompt'hlp(6 ) = "Enter your AMUS EMAIL initials." prompt'hlp(7 ) = "Enter Donators name." prompt'hlp(8 ) = "Enter Donators Company Name." prompt'hlp(9 ) = "Enter phone number you can be reached at (optional)." prompt'hlp(10) = "Enter any files related to this program." prompt'hlp(11) = "Enter Minimum AMUS O/S this program can run on." prompt'hlp(12) = "(BEG)inner, (INT)ermediate, (ADV)anced." prompt'hlp(13) = "Enter any special considerations." prompt'hlp(14) = "Enter a general description of this program." prompt'hlp(15) = "Enter a general description of this program." prompt'hlp(16) = "Enter a general description of this program." MAP1 ini'default(4), S, 7 ! INI file default names. ini'default(1) = "INITIAL" ! AMUS network ID. ini'default(2) = "NAME" ! Donators name. ini'default(3) = "COMPANY" ! Donators company name. ini'default(4) = "PHONE" ! Donators phone. MAP1 ini'string, S, 80 ! ini default input string. MAP1 bin'date, B, 4 ! Binary date. MAP1 the'date,@bin'date ! date in accessable variables. MAP2 month, B, 1 ! the month MAP2 day, B, 1 ! the day MAP2 year, B, 1 ! the year MAP1 previous'flag, F, 6 ! Previous AMUS label loaded flag. MAP1 stars,S,75 ! label border. stars="*****" for i = 1 to 5 stars=stars+stars next i !*********************************************************************** ! Main program structure - follow the call routines and you've got the * ! program flow. * !*********************************************************************** on error goto TRAP'ERROR !clear screen on error call START'UP !start program call LOAD'FIELDS !initialize fields call LOAD'DEFAULTS ! Preload defaults from INI file. call PRINT'FIELDS !print fields on terminal screen call PROCESS'FIELDS !get field input call PRINT'RPT !create output report goto EXIT !finished !*********************************************************************** ! START'UP - Find out what type of source code is involved so we can * ! set the appropriate comment character (default to DOC). If a Q then * ! abandon ship. * !*********************************************************************** START'UP: ? tab(-1,0) ? tab(16) "********* AMUS Program Label Generator *********" ? ? ? ? "File types: (M)68, (B)asic, (C), (P)ostScript, (D)oc" ? input "Enter file type or 'Q' to quit: ", file'type file'type = ucs(file'type[1;1]) if file'type = "Q" then goto EXIT if file'type = "M" then comment'char = ";" if file'type = "B" then comment'char = "!" if file'type = "C" then comment'char = "/" if file'type = "P" then comment'char = "%" if file'type = "D" then comment'char = "*" RETURN !*********************************************************************** ! LOAD'FIELDS - Read in field data from data statements. Data includes * ! prompt string, prompt display x-y coordinates, data field x-y coords,* ! field type (* - string), field minimum size, field maximum size, and * ! and field flags (U - Uppercase, R - Required field) * !*********************************************************************** LOAD'FIELDS: for fld = 1 to num'flds read prompt(fld),pr'x(fld),pr'y(fld),y(fld),x(fld),type(fld),minsize(fld),maxsize(fld),flags(fld) next fld RETURN !*********************************************************************** ! PRINT'FIELDS - display field prompts on terminal screen * !*********************************************************************** PRINT'FIELDS: ? tab(-1,0) ? TAB(4,1);comment'char+stars ? TAB(4,28);" AMUS Program Label " for fld = 5 to 14 ? TAB(fld,1);comment'char next fld ? comment'char+stars for fld = 1 to num'flds ? tab(pr'y(fld),pr'x(fld)) prompt(fld);string(fld) next fld ? tab(17,28) "[ Press ESC to Finish ]" fld = 1 RETURN !*********************************************************************** ! PROCESS'FIELDS - Set up program to receive input data. Keep track of * ! field location and increment appropriately - if Up-Arrow then go back* ! one field, otherwise move to next field. If at first or last fields * ! then cycle back to appropriate field. If ESC then return. * !*********************************************************************** PROCESS'FIELDS: call GET'INPUT if key = 1 then return if fld = 1 then call AUTO'HASH if key = 2 then fld = fld - 1 & else fld = fld + 1 if fld < 1 then fld = num'flds if fld > num'flds then fld = 1 goto PROCESS'FIELDS !*********************************************************************** ! LOAD'STRING - Preload Strings with defaults from PROLAB.INI if it * ! it exists. PROLAB.INI is an initialization file for PROLAB.RUN. * ! Using PROLAB.INI you can set defaults which will be proloaded into * ! the Initial, Name, Company, and Phone fields so that information * ! does not have to be typed in every time. Search path is local * ! account, BAS: . If you want others add them. * ! PROLAB.INI is a VUEable file with the following format. The labels * ! must be included. * ! * !Example INITIALS =ARCH/US * ! NAME =Steve Archuleta * ! COMPANY =Alpha Micro Users Society * ! PHONE =3034496917 * ! * !*********************************************************************** LOAD'DEFAULTS: bin'date= DATE string(2)=str(month)+"/"+str(day)+"/"+str(year) LOOKUP ini'file, answer if answer > 0 goto LOAD'EM ini'file = "BAS:"+ini'file LOOKUP "BAS:PROLAB.INI", answer if answer < 1 RETURN !*********************************************************************** !LOAD'EM: Open the PROLAB.INI file for input. Could be the INI file in * !this account or any set in LOAD'DEFAULTS. * !*********************************************************************** LOAD'EM: open #99, ini'file, input !*********************************************************************** !GET'DEF - Get ini file input and check for "=", commented out lines, * !and blank lines. Report errors at INI'ERROR. * !*********************************************************************** GET'DEF: input line #99, ini'string if eof(99) then CLOSE #99 : RETURN if ini'string[1;1]=";" then goto GET'DEF if ini'string="" then goto GET'DEF eq = instr(1,ini'string,"=") if eq = 0 goto INI'ERROR c = 1 !*********************************************************************** !FIND'DEF - located default definition and load default. If definition * ! does not match then report error at INI'ERROR. * !*********************************************************************** FIND'DEF: g = instr(1,UCS(ini'string), ini'default(c)) if g then & ini'string = ini'string[eq+1,len(ini'string)] & : goto BYP'BLNK if c = 4 goto INI'ERROR c=c+1 goto FIND'DEF !*********************************************************************** !BYP'BLNK - Bypass white space in Default definitions, set default and * !attempt to get next default at GET'DEF * !*********************************************************************** BYP'BLNK: if ini'string[1,1]=" " then & ini'string = ini'string[2,len(ini'string)] & : goto BYP'BLNK string(c+5) = ini'string goto GET'DEF !*********************************************************************** !INI'ERROR - An error has been located in the PROLAB.INI file. Error * ! is reported and default file input is suspended * !*********************************************************************** INI'ERROR: ? : ? "Error in ";ini'file;" -> ";ini'string ? "Press ENTER to continue "; : input "",c CLOSE #99 RETURN !*********************************************************************** ! GET'INPUT - Use EDIT.SBR to take care of user input. Allows use of * ! various VUE control chars to edit input. See EDIT.M68 in [100,52] * ! on AMUS Network. * !*********************************************************************** GET'INPUT: call SHOW'HELP fld'stats = y(fld) + x(fld) + type(fld) & + minsize(fld) + maxsize(fld) + flags(fld) xcall edit,fld'stats,string(fld),key RETURN !*********************************************************************** ! AUTO'HASH - Gets hash total from file using XCALL DIRHSH.SBR * ! for automatic input to Hash and Version * !*********************************************************************** AUTO'HASH: CALL LOAD'PREVIOUS if hash'file <> "" then goto LOOK'HASH dot = instr(1,string(1),".") if dot then hash'file=string(1)[1,dot-1] & else hash'file=string(1) if file'type="M" hash'file=hash'file+".LIT" if file'type="C" hash'file=hash'file+".LIT" if file'type="B" hash'file=hash'file+".RUN" if file'type="P" hash'file=hash'file+".PS " if file'type="D" hash'file=hash'file+".DOC" !*********************************************************************** !LOOK'HASH - Looks up the name of the file to get hash and version * ! number. If default file does not exist then user will be asked for * ! file name to do a HASH on. Complete filespec is accepted. * !*********************************************************************** LOOK'HASH: LOOKUP hash'file, answer if answer <1 then goto ASK'HASH XCALL DIRHSH,hash'file,hash'file,hash'array,hash'flag if hash'flag <> 0 then goto ASK'HASH string(4)= hash'array[57;15] : ? tab(y(4),x(4));string(4) string(5)= hash'array[39;15] : ? tab(y(5),x(5));string(5) RETURN !*********************************************************************** !ASK'HASH - Default file was not found. User is asked to input file * ! name to HASH. An empty field will return user to prompts without * ! HASHing a file. If a file name is given then file will attempted * ! to be HASHed in LOOK'HASH. * !*********************************************************************** ASK'HASH: ? TAB(19,25);"Cannot find ";hash'file;"." hash'file= "" ? TAB(21,13);"Enter file name to HASH " ? TAB(24,13);"Enter nothing but a RETURN to NOT Hash a file."; fld'stats = "21 "+"37 "+"* "+"0 "+"25"+"U R" xcall edit,fld'stats,hash'file,key ? tab(19,1);tab(-1,10); if hash'file="" RETURN goto LOOK'HASH !*********************************************************************** !SHOW'HELP - All field helps (prompt'hlp) are displayed here by * !centering the text on line 24 of the terminal. * !*********************************************************************** SHOW'HELP: ? TAB(24,1);tab(-1,9); c= (40-(len(prompt'hlp(fld))/2)) ? tab(24,c);prompt'hlp(fld); return !*********************************************************************** ! LOAD'PREVIOUS- Preload applicable fields with previous label data * ! So user doesn't have to retype the obvious. * !*********************************************************************** LOAD'PREVIOUS: if previous'flag = 1 RETURN previous'flag=1 LOOKUP string(1), answer if answer<1 then RETURN OPEN #99, string(1), input !*********************************************************************** ! LOADP'LOOP- Check input line for d/SOFT update lines, and current * ! AMUS label header. * !*********************************************************************** LOADP'LOOP: input line #99, ini'string if EOF(99) then goto CLOSE'FILE if ini'string[1,3]=comment'char+"*"+comment'char & then goto LOADP'LOOP c = instr(1,ini'string,"AMUS Program Label") if c = 0 then goto CLOSE'FILE c = 0 !*********************************************************************** ! LAB'LOOP- Loop through input lines and preload strings with current * ! applicable AMUS label data. * !*********************************************************************** LAB'LOOP: c = c + 1 if c > 10 then goto CLOSE'FILE input line #99, ini'string if EOF(99) then goto CLOSE'FILE if c = 2 then string(3) = ini'string[(x(3)+1);maxsize(3)] if c = 5 then string(10) = ini'string[(x(10)+1);maxsize(10)] if c = 6 then string(11) = ini'string[(x(11)+1);maxsize(11)] & : string(12) = ini'string[(x(12)+1);maxsize(12)] if c = 7 then string(13) = ini'string[(x(13)+1);maxsize(13)] if c = 8 then string(14) = ini'string[(x(14)+1);maxsize(14)] if c = 9 then string(15) = ini'string[(x(15)+1);maxsize(15)] if c = 10 then string(16) = ini'string[(x(16)+1);maxsize(16)] goto LAB'LOOP !*********************************************************************** ! CLOSE'FILE- Close the source file. * !*********************************************************************** CLOSE'FILE: ? tab(y(3),x(3));string(3) for c = 10 to 16 ? tab(y(c),x(c));string(c); next c CLOSE #99 RETURN !*********************************************************************** ! PRINT'RPT - Finished with the input, now output data to LABEL.RPT. * ! First use appropriate comment character, then output data. * !*********************************************************************** PRINT'RPT: row = 0 lookup "label.rpt",exists ? tab(17,15); if exists then & input "LABEL.RPT already exists - continue? (Y/N) -> ", dummy if ucs(dummy[1;1]) = "N" then goto EXIT open #1, "label.rpt", output if file'type = "M" then comment'char = ";" if file'type = "B" then comment'char = "!" if file'type = "C" then comment'char = "/" if file'type = "P" then comment'char = "%" if file'type = "D" then comment'char = "*" ? #1,comment'char; ? #1,"*************************** AMUS Program Label ******************************"; if file'type = "C" then comment'char = "*" for fld = 1 to num'flds if row # pr'y(fld) then col = 0 : row = pr'y(fld) : ? #1 : ? #1,comment'char; temp = col col = pr'x(fld) - col - 1 ? #1, space(col); : ? #1,prompt(fld); : ? #1, string(fld); col = temp + col + len(prompt(fld)) + len(string(fld)) next fld ? #1 ? #1,comment'char; ? #1,"****************************************************************************"; if file'type = "C" then ? #1,"/" else ? #1,"*" close #1 RETURN !*********************************************************************** ! TRAP'ERROR - Let them know what the error is. * !*********************************************************************** TRAP'ERROR: if ERR(0) = 1 then resume EXIT if ERR(0) = 12 then ? tab(-1,0) :& ? "Both EDIT.SBR and DIRHSH.SBR are needed to run this program." :& ? "These files are available on the AMUS Network." : END ? tab(-1,0) : ? "Basic error"; ERR(0) : END !*********************************************************************** ! EXIT - All done, clear the screen please. * !*********************************************************************** EXIT: ? tab(-1,0) END !*********************************************************************** ! DATA information for various fields * ! prompt px py row col type min max flags* !*********************************************************************** data "Filename: " , 2, 5, "5 ", "12 ", "* ", "0 ", "10 ", "U R" data "Date: " , 60, 5, "5 ", "66 ", "* ", "0 ", " 8 ", "U R" data "Category: " , 2, 6, "6 ", "12 ", "* ", "0 ", " 4 ", "U R" data "Hash Code: " , 25, 6, "6 ", "36 ", "* ", "0 ", "15 ", "U R" data "Version: " , 57, 6, "6 ", "66 ", "* ", "0 ", " 9 ", "U " data "Initials: " , 2, 7, "7 ", "12 ", "* ", "0 ", " 7 ", "U R" data "Name: " , 25, 7, "7 ", "31 ", "* ", "0 ", "30 ", "U " data "Company: " , 2, 8, "8 ", "11 ", "* ", "0 ", "37 ", "U " data "Telephone #: " , 51, 8, "8 ", "64 ", "* ", "0 ", "10 ", "U " data "Related Files: " , 2, 9, "9 ", "17 ", "* ", "0 ", "60 ", "U " data "Min. Op. Sys.: " , 2, 10, "10 ", "17 ", "* ", "0 ", "11 ", "U " data "Expertise Level: ", 47, 10, "10 ", "64 ", "* ", "0 ", " 3 ", "U " data "Special: " , 2, 11, "11 ", "11 ", "* ", "0 ", "67 ", "" data "Description: " , 2, 12, "12 ", "15 ", "* ", "0 ", "63 ", "" data "" , 2, 13, "13 ", " 2 ", "* ", "0 ", "76 ", "" data "" , 2, 14, "14 ", " 2 ", "* ", "0 ", "76 ", ""