ü& „-¶ CALC-DM.BAS SUBPROGRAM¹(¹ SET UP2¹L<CÌìÿ()ñÿ(E)ñÿ()ñÿ(H)RÅìÿ( )BÓìÿ()BÕìÿ()$FEËìÿ()BÌì" "NÕì""PINÖìÿ()ñÿ(p)ZOFÆìÿ()ñÿ(q)/dSÃìPÒìF±ì ¹ device codes/nMÖìL³ì� Î(MÖ),Ö(MÖ)+x� É(P),Ð(P),Ó(P),Ó(P) 8‚¹ infix, postfix expressions, value, operand stacks,ŒOÕìSù Default output to screen 1–¹ ****************************************** ¹ *** PRINT HEADERª¹ ´³ CÌ;;¾³ "--------------------------------------------------",ȳ ß();INÖ;"DESK CALCULATOR";OFÆ;Ò³ "--------------------------------------------------"=ܳ³ "Enter Formulas, Variable assignments, or Commands."*æ³ "Type HELP for a list of commands."/ð³ "Enter to return to DESKMASTER."³1ú¹ *******************************************¹ *** PROMPT AND GET INFIX EXPRESSION¹ EXPORT: T$¹ 4"� MÅïNÕ â ³ MŹ Error message, if any*,� OÕìPÒ ÷ MÅïNÕ â ¦ MÅ6MÅìNÕ"@³³ ": "; ¹ prompt for inputJ� OÕìPÒ â ¦¦ ": ";0TLÎìPFÃì LÃì› ¢¹ GET LINE^� EÃì"ESC" â œ *&h� ÔìNÕ â œ  ¹ re-prompt/r¹ ****************************************)|¹ PARSE INFIX EXPRESSION INTO TOKENS†¹ IMPORT: T$ �¹ EXPORT: I$(),Iš¹9¤Îì"NOTVAL"IÎì"NOTID"¹ value,identifier flags ®Éì6¸™ Ãì ã ÿ(Ô)¹ For each char in expression Ãì©(Ô,Ã,)Ì � ÃìBÌ â œ :)Ö › ² ¹ GET CHARACTER TYPE (TP$)3à � TÐì"Bad character" â MÅìTМ 6ê � TÐï"NUMERIC" ÷ Îì"VAL" â Îì"NOTVAL"Šô � TÐì"OPERATOR" ÷ IÎì"ID" ÷ Ãï"=" â IÄìÉ(É)› ÈÉ(É)ìÿ|(ÿ"(NÕ),ÿ(ÿ"(NÕ))ò)� MÅïNÕ â œ =þ � TÐì"OPERATOR" ÷ IÎì"ID" â IÎì"NOTID"œ 0. � TÐì"NUMERIC" ÷ Îì"VAL" â œ :V � TÐì"ALPHA" ÷ IÎì"NOTID" â ÉìÉñÉ(É)ìÃIÎì"ID"œ :J � TÐï"OPERATOR" ÷ IÎì"ID" â É(É)ìÉ(É)ñÜ :Ÿ& � TÐì"NUMERIC" ÷ Îì"NOTVAL" â ÉìÉñÉ(É)ìÿ|(ÿ"(ÿ&(ÿ|(Ô,ÿ(Ô)òÃñ))),ÿ(ÿ"(ÿ&(ÿ|(Ô,ÿ(Ô)òÃñ))))ò)Îì"VAL"œ :;0� TÐì"OPERATOR" â ÉìÉñÉ(É)ìÜ ::«rD� IÎì"ID" ÷ Éë â IÄìÉ(É)› ÈÉ(É)ìÿ|(ÿ"(NÕ),ÿ(ÿ"(NÕ))ò)� MÅïNÕ â œ 2N¹ *******************************************X¹ INTERPRET EXPRESSIONb¹ IMPORT: I$(I)l¹v� Éì â œ $€L×ìÉ()› \I±ìUЊÃìÿx(É(),)› ²U”� TÐì"NUMERIC" ÷ É()ì"=" â MÅì"Can't assign a value to a number"œ )ž� É()ì"=" ÷ Éí â › 6œ 2¨� I±ì"HELP" â ›  œ  ¹ LIST COMMANDS9²� I±ì"LIST" â › ¤œ  ¹ LIST VARIABLE VALUESH¼� I±ì"CLEAR" â L³ì™ Îì ã MÖÎ(Î)ìNÕ«œ :Æ� I±ì"PON" â OÕìPÒœ ¹ Output to printer'Ð� I±ì"POFF" â OÕìSÜ BÚ� I±ì"EX1" â ½³ CÌ™ Øì ã  ¸ س Ø«œ Zä� I±ì"EX2" â ½³ CÌ™ Øì ã  ¸ Ø«™ Øì ã ¸ س Ø«œ 9î� Éì â IÄìÉ()› È� MÅìNÕ â œ  ø� MÅïNÕ â œ 3IÂì› Ê ¹ Default: evaluate expression+ ³ BÌ;NÕ¹ Display numeric answer"� OÕìPÒ â ¦ BÌ;NÕ œ  ¹ end with ESC1*¹ ******************************************4³ CÌ™ Îì ã  ³«7>³ ß( );"Reloading Desk Master..."‚ "DESK-DM.BAS"2H¹ ****************************************** 1R¹ ******************************************/\¹ *** TRANSLATE UPPERCASE TO LOWERCASE ***%f¹ IMPORT: LW$ (lowercase string)%p¹ EXPORT: UP$ (UPPERCASE STRING)zUÐìNÕ„™ Îì ã ÿ(L×)Ž Ãì©(L×,Î,))˜ � Ãë"Z" â Ãìÿ(ÿ(Ã)ò )¢ UÐìUÐñì«¶À.À¹ ***************************************3ʹ *** CONVERT INFIX EXPRESSION TO POSTFIX ***Ô¹ IMPORT: I$(),I Þ¹ EXPORT: P$(),Pè¹"òTÐìÐì¹ Top of stackü™ ÃìI ã É ÃìÉ(Ã)! � Ãì")" â › œ ’  PÃìPÓì;$ � Ãï"/" ÷ Ãï"*" ÷ Ãï"-" ÷ Ãï"+" â œ t'. � Ãì"*" û Ãì"/" â PÃì"8 � TÐì â PÓì œ V5B � Ó(TÐ)ì"*" û Ó(TÐ)ì"/" â PÓì#L � Ó(TÐ)ì"(" â PÓì<V � PÃëPÓ â TÐìTÐñÓ(TÐ)ìÜ ’K`� PÃîPÓ â ÐìÐñÐ(Ð)ìÓ(TÐ)TÐìTÐòœ Nj� PÃìPÓ â ÐìÐñÐ(Ð)ìÓ(TÐ)Ó(TÐ)ìÜ ’9t � Ãì"(" â TÐìTÐñÓ(TÐ)ìÜ ’~ ¹ Identifier#ˆ ÐìÐñÐ(Ð)ìÃ’«"œ›  ¹ EMPTY OPERATOR STACK1¦¹ ******************************************+°¹ *** EXECUTE POSTFIXED EXPRESSION ***º¹ IMPORT: P$(),PĹ EXPORT: NUÎTÐì¹ Stack top0Ø™ Ãì ã й For each post-fixed tokenâ ÃìÐ(Ã)&ì ¹ Perform arithmetic operationNö � Ãì"+" â TÐìTÐòÓ(TÐ)ìÓ(TÐ)ñÓ(TÐñ)œ 2N � Ãì"-" â TÐìTÐòÓ(TÐ)ìÓ(TÐ)òÓ(TÐñ)œ 2N  � Ãì"*" â TÐìTÐòÓ(TÐ)ìÓ(TÐ)óÓ(TÐñ)œ 2L � Ãì"/" ÷ Ó(TÐ)ì â MÅì"You can't divide by zero!"œ FN � Ãì"/" â TÐìTÐòÓ(TÐ)ìÓ(TÐ)ôÓ(TÐñ)œ 2*( TÐìTÐñÓ(TÐ)ìÿ&(Ã)2«-<NÕìÓ(TÐ)¹ The answer, at last!FÀ0P¹ *****************************************,Z¹ *** PUT VALUE INTO VARIABLE TABLE ***d¹ IMPORT: NU,ID$n¹ EXPORT: ME$ xÎì9‚ÎìÎñ¹ For each variable in the table already3Œ � Î(Î)ìIÄ â Ö(Î)ìNÕœ ´–� ÎîL³ â œ ‚> � L³ìMÖ â MÅì"No more variables allowed. "œ ´VªL³ìL³ñÎ(L³)ìÉ()Ö(L³)ìNÕ¹ Add value to variable table´À0¾¹ *****************************************,ȹ *** GET VALUE FROM VARIABLE TABLE ***Ò¹ IMPORT: ID$ܹ EXPORT: NU,ME$ æÎì.ðÎìÎñ¹ For each value in the table7ú � ÎëL³ â MÅì"Undefined variable"œ "3 � Î(Î)ìIÄ â NÕìÖ(Î)œ " œ ðMÅì"Undefined variable""À1,¹ ******************************************+6¹ *** ASSIGN A VALUE TO A VARIABLE ***@¹ IMPORT: I$(),I J¹ EXPORT: IB,ME$)TÃìÿx(É(),)› ² ¹ GET TYPE3^� Éì ÷ TÐì"NUMERIC" â NÕìÿ&(É())3h� Éì ÷ TÐì"ALPHA" â IÄìÉ()› È3r� Éë â IÂì› Ê¹ POSTFIX AND EXECUTE|� MÅïNÕ â œ š.†IÄìÉ()› Z ¹ PUT VALUE IN TABLE�À.š¹ ***************************************¤¹ DISPLAY VARIABLES®¹¸³³+Â� L³î â ³ "No variables set"œ 3̳ "::::::::::::: SET VARIABLES ::::::::::::"³GÖ� OÕìPÒ â ¦ "::::::::::::::: SET VARIABLES ::::::::::::::"¦à™ Îì ã L³#ê ³ Î(Î);"=";Ö(Î)3ô � OÕìPÒ â ¦ Î(Î);"=";Ö(Î)þ«À2¹ *******************************************#¹ *** EMPTY OPERATOR STACK ***&¹0� TÐì â œ b:™ ÎìTÐ ã  à ò>D � Ó(TÐ)ï"(" â ÐìÐñÐ(Ð)ìÓ(TÐ)N TÐìTÐòX«bÀ0l¹ ***************************************** v¹ *** WAIT FOR RESPONSE *** €³³³*г ß( );"Hit any key to continue...";”Ëìÿv()žÀ.¨¹ ***************************************'²¹ *** DETERMINE CHARACTER TYPE ***¼¹ IMPORT: C$ƹ EXPORT: TP$ÐTÐì"Bad character"CÚ� (Ãí"A" ÷ Ãð"Z") û (Ãí"a" ÷ Ãð"z")â TÐì"ALPHA"9ä� (Ãí"0" ÷ Ãð"9") û Ãì"." â TÐì"NUMERIC"cî� Ãì")" û Ãì"(" û Ãì"+" û Ãì"-" û Ãì"*"û Ãì"/" û Ãì"=" â TÐì"OPERATOR"øÀ/¹ **************************************** ¹ *** LIST COMMANDS ***½™ Îì ã ¸ Ø« ™ Îì ã "* ¸ Ø4 ³ Ø> � OÕìPÒ â ¦ ØH«R³/\³ "Like HELP, type command after colon."³fÀ1p¹ *******************************************z¹ *** SOPHISTICATED ERROR ROUTINE ***&„MÅì"Error in expression"œ !޹ So much for sophistication0˜¹ *****************************************¢¹ *** GET LINE ***¬¹ IMPORT: LN,FC,LC¶¹ EXPORT: T$,EC$À¹ÊEÃìNÕÔìNÕ'ÔÃì ¹ for each character input.ÞÃìÃñ Ãìÿv() ¹ get character (è � ÃìBÕ â ÃìBÓ³ Ã;'ò � ÃìEË â EÃì"ESC"œ L ü � ÃìRÅ â ³œ L K � (ÿ(Ã)îFà û ÿ(Ã)ëLÃ) ÷ ÃïBÓ â ÃìÃòœ Þ' � ÃìBÓ ÷ Ãì â ³;œ Ê' ³ Ã;� OÕìPÒ â ¦ Ã; /$ � ÃìBÓ ÷ Ãð â ³ ³ ": ";œ ¢C. � ÃìBÓ ÷ Ãë â ÃìÃòÔìÿx(Ô,Ã)œ Þ)8 � ÃìLÎ â ÔìÔñÜ L :B ÔìÔñÜ Þ ¹ add character and get anotherL � OÕìPÒ â ¦V À/` ¹ ****************************************&j ‡ "Simple calculations: "," "," "+t ‡ ": 2+2"," 4"," ",": 5*5"," 25"," "~ ‡ ": 2+(8/2)"," 6"ˆ ‡ "Assignments: "," "," " $’ ‡ ": A=15"," ",": A"," 15"," "*œ ‡ ": TOTAL=A+15"," ",": TOTAL"," 30" ¦ ‡ " "° ‡ " LIST OF COMMANDS" º ‡ " "-Ä ‡ "PON.................TURNS PRINTER ON".Î ‡ "POFF................TURNS PRINTER OFF"5Ø ‡ "LIST................LIST VALUES OF VARIABLES"1â ‡ "CLEAR...............ERASES ALL VARIABLES"0ì ‡ "HELP................LIST THESE COMMANDS"0ö ‡ "EX1.................SIMPLE CALCULATIONS"1 ‡ "EX2.................VARIABLE ASSIGNMENTS"2 ‡ "...............RETURN TO DESK MASTER"  ‡ " " “ULATIONS"1 ‡ "EX2.................VARIABLE ASSIGNMENTS"2 ‡ "...............RETURN TO DESK M