Skip to content

Commit

Permalink
First import
Browse files Browse the repository at this point in the history
  • Loading branch information
olivomarco committed Aug 19, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
0 parents commit 8cc7e2b
Showing 42 changed files with 4,028 additions and 0 deletions.
20 changes: 20 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Copyright (c) 1997-2020 Marco Olivo

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
113 changes: 113 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Grafico, a program for drawing math functions

This repo contains an old retro-computing program I wrote back in 1997 for MS-DOS. Its aim was to get a math function in input and draw it, also calculating and plotting first-degree and second-degree derived functions.

It was written in Turbo Pascal 6, and you can find the [source code here](/src) with the main code being [this file](/src/grafico.pas). The original [compile.bat](/compile.bat) was the file used to compile it all, and required the `tcp.exe` file which is the Turbo Pascal 6 compiler for MS-DOS.

I cannot provide it (I am not sure it is still under copyright), however I do not think anyone will try to compile this program anymore.
To compile it maybe you can use Free Pascal:

```bash
sudo apt-get install fp-compiler fp-ide
```

See also <http://fusharblog.com/installing-free-pascal-in-ubuntu/>

However I haven't tried it myself (being Grafico more than 20 years old).

Theoretically, it could be run under Linux with `dosbox`:

```bash
sudo apt-get install dosbox
dosbox grafico.exe
```

However, I personally didn't succeed: the program runs in graphical mode, and I received lots of gibberish on the screen. If you manage to make it run, please let me know how.

## Original instructions (italian)

Grafico è un programma che ho ideato nel dicembre del 1997 ed ho sviluppato nel corso dei primi mesi del 1998. Sebbene il suo nome sia tutt'altro che originale, questo programma è in grado di compiere diverse operazioni riguardo lo studio di funzioni matematiche. Alla fine di aprile 1999 sono state aggiunte alcune nuove funzionalità per quanto riguarda le funzioni supportate dal programma.

In breve, ecco le caratteristiche principali del programma in questione:

* possibilità di studiare una qualunque funzione matematica (razionale, irrazionale, fratta, goniometrica, logaritmica, ...)
* possibilità di visualizzarne la sua derivata prima con in più alcuni punti particolarmente significativi ricavabili da essa; la derivata seconda non è stata implementata, ma è possibile inserire una breve funzione anche per essa tramite semplici formule di calcolo numerico
* possibilità di visualizzare il grafico di rotazione della curva attorno all'asse delle ascisse (un problema che si trova spesso durante la discussione di volumi tramite integrali; a questo proposito anche qui non è stato implementato il calcolo dell'integrale della curva, ma il metodo è piuttosto facile, dato che è sufficiente utilizzare qualche formula del calcolo numerico)
* possibilità di caricare e salvare un file contenente un massimo di 16 funzioni, richiamabili molto facilmente per una rapida consultazione
* possibilità di cambiare la scala di visualizzazione da numeri interi a radianti (l'ideale per le funzioni goniometriche)
* possibilità di scorrere il grafico della curva, di ingrandire e di rimpicciolire parti di essa, di aumentare o diminuire la risoluzione della curva (modificando la distanza tra i punti) e possibilità di visualizzare il dominio della curva
* possibilità di estrapolare punti dal grafico, al fine di visualizzarne l'ordinata

Le funzioni matematiche base supportate sono numerose. Esempi:

* abs(x)
* ln(x)
* sen(x)
* cos(x)
* tag(x)
* cotag(x)
* arcsen(x)
* arccos(x)
* arctag(x)
* arccotag(x)
* sqr(x)
* sqrt(x)
* x^3
* e^x
* (1/2)^x
* (x-1)/(x+4)
* asinh(x)
* acosh(x)
* atanh(x)
* sinh(x)
* cosh(x)
* tanh(x)
* sgn(x)
* int(x)

oltre a tutte le possibili combinazioni delle stesse, come ad esempio:

* 4\*cos(x)+2\*cos(2\*x)-1
* cos(x)/(sin(x)-1)
* (x^3)\*(e^(-x))
* (1-abs(e^(2\*x)-1))^(1/2)
* arctag(1/abs(x))
* x/(x^3-1)
* 2\*x+log(x)
* 2\*arctag(x)-x
* (x^2+x)^(1/3)
* x+(1-x^2)^(1/2)
* 1/(1+x)+1/(1-abs(x))
* x/(x^2+1)
* abs(x^3-x^2)+x^3
* ln(x/(x^2-4))
* x+tag(x)
* (x-2)*(e^x-1)
* (1+x)/(abs(1-x))
* (1+x)/(1-abs(x))
* (1+abs(x))/(1-abs(x))
* (x^2-4)/(x+1)
* (x^3)/abs(x^2-1)
* sqrt(4-x^2)
* sqrt((1-abs(x))/(1+abs(x)))
* sqrt((1-x)/(1+x))
* 3\*((sen(x))^2)-3\*((sen(x))^3)
* ((cos(x))^2)/(1+2\*sen(x))
* (abs(x))^x
* 2^(x+1/x)
* (e^(tag(x))-1)/(e^(tag(x))+1)
* sqrt(1-e^x)
* arctag((e^x+1)/(e^x-1))
* 25\*(x^3)\*(x-1)^2

## Screenshot

La figura qui sotto mostra una sovrapposizione di schermate del programma (quella in alto a sinistra è uno studio di funzione in verde con la derivata prima in viola e l'asse Y fuori dal dominio evidenziato in blu e quella in basso a destra è la rotazione di una curva attorno all'asse delle X):

![Screenshot del programma](/images/grafico.jpg)

## Riconoscimenti

QUESTO PROGRAMMA E' STATO PUBBLICATO SULLA RIVISTA ITALIANA PCFLOPPY+PCMAGAZINE (EDITA DA JACKSON INFORMATICA) NEL MESE DI MAGGIO 1999 NELLO SPAZIO DEDICATO AI PROGRAMMATORI ITALIANI. DESIDERO RINGRAZIARE TUTTI COLORO CHE MI HANNO AIUTATO, IN UN MODO O NELL'ALTRO. UN GRAZIE SPECIALE A SILVIO D'ANGELO E ROBERTO FULIGNI, CHE MI HANNO AIUTATO ED INCORAGGIATO NELLA PRIMA VERSIONE DEL PROGRAMMA.

![Articolo su PC Magazine maggio 1999](/images/articolo.jpg)
Binary file added build/grafico.exe
Binary file not shown.
5 changes: 5 additions & 0 deletions compile.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
rem Compilazione di grafico.pas tramite Turbo Pascal
cls
cd src
tpc grafico.pas
make -f grafico.mak
Binary file added images/articolo.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/grafico.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/logopcf.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/att.bgi
Binary file not shown.
Binary file added src/att.obj
Binary file not shown.
35 changes: 35 additions & 0 deletions src/bgidriv.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

{ Copyright (c) 1985, 1990 by Borland International, Inc. }

unit BGIDriv;
{ Sample unit to accompany BGILINK.PAS. This unit links the BGI graphics
driver into a single TPU file. This makes it easy to link the driver files
directly into an .EXE file. See BGILINK.PAS for more information.
}
interface

procedure ATTDriverProc;
procedure CgaDriverProc;
procedure EgaVgaDriverProc;
procedure HercDriverProc;
procedure PC3270DriverProc;

implementation

procedure ATTDriverProc; external;
{$L ATT.OBJ }

procedure CgaDriverProc; external;
{$L CGA.OBJ }

procedure EgaVgaDriverProc; external;
{$L EGAVGA.OBJ }

procedure HercDriverProc; external;
{$L HERC.OBJ }

procedure PC3270DriverProc; external;
{$L PC3270.OBJ }

end.

Binary file added src/bgidriv.tpu
Binary file not shown.
31 changes: 31 additions & 0 deletions src/bgifont.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

{ Copyright (c) 1985, 1990 by Borland International, Inc. }

unit BGIFont;
{ Sample unit to accompany BGILINK.PAS. This unit links all the BGI graphics
fonts into a single TPU file. This makes it easy to incorporate the font
files directly into an .EXE file. See BGILINK.PAS for more information.
}
interface

procedure GothicFontProc;
procedure SansSerifFontProc;
procedure SmallFontProc;
procedure TriplexFontProc;

implementation

procedure GothicFontProc; external;
{$L GOTH.OBJ }

procedure SansSerifFontProc; external;
{$L SANS.OBJ }

procedure SmallFontProc; external;
{$L LITT.OBJ }

procedure TriplexFontProc; external;
{$L TRIP.OBJ }

end.

Binary file added src/bgifont.tpu
Binary file not shown.
Binary file added src/binobj.exe
Binary file not shown.
Binary file added src/bold.chr
Binary file not shown.
Binary file added src/cga.bgi
Binary file not shown.
Binary file added src/cga.obj
Binary file not shown.
Binary file added src/egavga.bgi
Binary file not shown.
Binary file added src/egavga.obj
Binary file not shown.
Binary file added src/euro.chr
Binary file not shown.
Binary file added src/goth.chr
Binary file not shown.
Binary file added src/goth.obj
Binary file not shown.
31 changes: 31 additions & 0 deletions src/grafico.mak
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Build program that uses BGIFONT.TPU and BGIDRIV.TPU
grafico.exe: bgidriv.tpu bgifont.tpu
tpc grafico /m

# Build unit with all fonts linked in
bgifont.tpu: bgifont.pas goth.obj litt.obj sans.obj trip.obj
tpc bgifont
goth.obj: goth.chr
binobj goth.chr goth GothicFontProc
litt.obj: litt.chr
binobj litt.chr litt SmallFontProc
sans.obj: sans.chr
binobj sans.chr sans SansSerifFontProc
trip.obj: trip.chr
binobj trip.chr trip TriplexFontProc


# Build unit with all drivers linked in
bgidriv.tpu: bgidriv.pas cga.obj egavga.obj herc.obj pc3270.obj att.obj
tpc bgidriv
cga.obj: cga.bgi
binobj cga.bgi cga CGADriverProc
egavga.obj: egavga.bgi
binobj egavga.bgi egavga EGAVGADriverProc
herc.obj: herc.bgi
binobj herc.bgi herc HercDriverProc
pc3270.obj: pc3270.bgi
binobj pc3270.bgi pc3270 PC3270DriverProc
att.obj: att.bgi
binobj att.bgi att ATTDriverProc

Loading

0 comments on commit 8cc7e2b

Please sign in to comment.